How can i fill NaN values on unwanted region of an image?

12 views (last 30 days)
I am working on 3D reconstruction. Attaching captured fringe pattern here. Is that possible to fill NaN values on unwanted regions (regions where no measured object)?

Accepted Answer

Image Analyst
Image Analyst on 29 Jun 2022
Not sure from your image where the unwanted regions are - you didn't indicate them. If you want, and it's appropriate you could use isnan and imcrop to crop away the unwanted regions from the outer parts of the image.
goodPixels = ~isnan(grayImage);
goodPixels = bwconvhull(goodPixels, 'union');
props = regionprops(goodPixels, 'BoundingBox');
grayImage = imcrop(grayImage, props.BoundingBox); % Crop to outermost bounding box of the good pixels.
If the regions are interior and irregularly shaped you could use isnan to get a map of where they are and use regionfill to fill them in by smearing surrounding values into the region,
badPixels = isnan(grayImage);
grayImage = regionfill(grayImage, badPixels);
or you could assign some non-nan gray level, like 0, to them.
badPixels = isnan(grayImage); % Mask of where the NaNs are
grayImage(badPixels) = 0; % Make nans zero
  1 Comment
Don Max
Don Max on 29 Jun 2022
Edited: Don Max on 29 Jun 2022
Hi @Image Analyst,@DGM, I think you didn't get my question. I will explain detail
From the picture, you can see rectangular shape with fringes (This is my measurement object). I want to reconstruct this shape using triangulation. For that, I want to make all the unwanted regions (regions other than measurement object) to NaN.
The image which i uploaded have no any NaN values.
Attaching wn edited image here, from this you clearly get whis is unwanted region!

Sign in to comment.

More Answers (1)

DGM on 29 Jun 2022
Edited: DGM on 29 Jun 2022
IPT regionfill() can do inpainting based on a logical mask. You could use isnan() to derive the mask from the image.
Alternatively, you could use John's inpaint_nans() from the FEX. That should be able to work directly on the image, inpainting NaN regions without extracting a mask.
If your image is monochrome, and you want to fill those regions with a solid black/white/gray fill, you can do
mk = isnan(myimage); % create mask from image
myimage(mk) = 0.6; % fill nan regions with 60% gray

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!