MATLAB: How to calculate geometric tortuosity of a 3D binary image in all directions (x,y,z)

geometric tortuosityimage analysisImage Processing Toolboximage quantifictiontomographytortuosity

Hi,
I'd like to calculate the geometric tortuosity of a 3d binary image (2d .tiff stack) in in the x, y, and z directions using MATLAB. What I have is a 3d binary image (obtained from xray u-CT) of a porous material and I would like to calculate the tortuosity in all directions of the sample. Please help?

Best Answer

Here's the general approach I would take:
  • For every pore, identify the end-points. We'll get to how to do this later.
  • Once you have the end-points, select one, take the geodesic distance transform with this point selected and then calculate the maximum value in that pore (which I believe should always be the other end point).
doc bwdistgeodesic %will give you this transform in three dimensions.
  • Divide the geodesic distance by the hypotenuse between the two end points to calculate tortuosity.
The second module of this webinar should help you get an understanding of the general idea as it is exactly the same thing in two dimensions:
Now, how to calculate endpoints in three dimensions? This is non-trivial. There are no prebuilt 3d skeletonization or thinning routines ( bwmorph for 2d) to my knowledge. If this was my task, I would probably try something like the following as a starter.
  • Use bwperim to get just the perimeter voxels of the pores (they will contain endpoints).
  • Then loop over the voxels in the perimeter taking the geodesic distance transform with respect to each voxel.
  • Calculate the maximum value and store it only if the max is greater than the previous max. This is a brute force approach to finding the endpoints (i.e. the two points that maximize distance along the pore. I can't think of a cheap way around this though because a weird shape could throw off anything general.
  • Once you have the endpoints, the geodesic distance between them, calculate the distance between them using the distance formula. Divide these two and then relax.
Maybe Image Analyst will have some additional thoughts as well.
Related Question