How to fill a hole for 3D image when the hole is not fully covered?

44 views (last 30 days)
Hi,
I have generated some 3d structure of few particles based on 3D binary images. These particles have multiples holes insides and I want to fill all the holes so the particles will be totally solid. Now I can get porosity by using 1-((volume before filling the hole)/(volume after filling the hole)). however, some of holes are not fully covered due do cracks on the particle surface. For the small uncovered holes, I can use imclose first and then imfill to fill the hole without changing particle shape too much. But for the large holes, I have to make radius for imclose very large to cover the hole for imfill to fill. In this case, the particle volume changes a lot and affect the accuracy for porosity calculation. Another problem is I have to manually set up the radius for imclose for each particle since they have different hole size.
So, I am thinking about to use bwconvhull which seems working good for 2D image to fill the big hole and no parameters to set up. But this function is only working for 2D, I am wondering is there similar function for 3D image?
Another thought is there any fucntions can detect if the hole is fully covered or if there is no cracks on the solid surface? If so, maybe I can set up a iteration to automatically increase the radius of imclose until it can make large holes be covered.
Thanks!

Accepted Answer

Keerthana Chiruvolu
Keerthana Chiruvolu on 28 Feb 2021
Hi,
You can use the bwmorph3() function to fill holes in the 3D image. Further, to measure the properpties of a 3D image use regionprops3() function.
Alternately, you can also create a 3D image using the alphaShape() function.
Refer the link, for more information on a similar case.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!