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

27 次查看(过去 30 天)
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)?

采纳的回答

Image Analyst
Image Analyst 2022-6-29
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 个评论
Don Max
Don Max 2022-6-29
编辑:Don Max 2022-6-29
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!

请先登录,再进行评论。

更多回答(1 个)

DGM
DGM 2022-6-29
编辑:DGM 2022-6-29
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!

Translated by