How can i fill NaN values on unwanted region of an image?
22 views (last 30 days)
Show older comments
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)?
0 Comments
Accepted Answer
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
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
0 Comments
See Also
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!