Average pore length

I would like to get the average pore length. But I am not sure about it. Does the Tb.Th Mean(pixel) in the results of Plugin/BoneJ/Thickness represents this parameter?

Although this is a small question, I need to get a stable answer, so I’m here to ask for help.
Thanks for your help!

Yours sincerely

Tb.Th most reasonably approximates pore diameter, not length, unless your pores are roughly spherical and diameter ≃ length. As discussed elsewhere, Feret diameter is probably the best bet for length for pores, or the sum of skeleton branch lengths (although, some small pores have short branch lengths as a result of the skeletonisation algorithm). If your pores are roughly ellipsoidal, the long ellipsoid axis may also estimate pore length.


Thanks for your answer! It solved my problem very well.
By the way, the result of Feret diameter is only one value for a stack sample, and I want to ask this value is the maximum value or the average value of the whole stack?

That would imply that you have only one particle in the stack. You should get one Feret diameter result per particle.

It’s strange that there must be more than one particle in my stack and according to the result of 3D object count, there are more than 3000 particles in this stack.

Can you share the results table, or better the binary image (zipped) here?

It’s possible that the mesher is smoothing your small particles into nothing, so that no Feret diameter is measured.

This is my stack sample with 400 slices for your try!example.rar (1.8 MB)

If Feret diameter doesn’t allow, I have to make this as my plan B.

Thanks very much!

Thanks for the test data. Which part of this image do you want to analyse? I note that there is one very large piece of foreground (255) and only a small number (25) of very small other particles, which are all touching the sides. Some of them are small enough to be removed by the surface smoothing option, which you should change to 1 to keep small particles in the Feret and surface area analysis (smoothing of 2 removes very small particles by averaging them out). The LUT is showing foreground as white, the white parts are being analysed. Is that what you want? If not, run Edit > Invert to swap the foreground/background phases. Doing so gives a result that looks like this, with 6641 particles:

Hi @mdoube,
Thank you for taking the time to try my data.
I’m sorry because I didn’t express it clearly, you may have doubts. The data I upload is my binary data. What I am interested in is the background, that is, the black color objects, and they are soil pores. I usually invert first, and then analyze, just like you did:

But I’ll check “Exclude objects on edges” when I’m doing Particle Analyse. Because I want to study the pores on a regular cube, I’m afraid that the edge object will affect the parameter calculation.

I think disconnected small pores may correspond to noise and distort the
skeletonization process, so I set the size filter =10 voxels in Particle Analyse.

According to the figure you provided, do you see Feret diameter in the result table of Particles Analyze? Which parameter is? I calculated it in Analyze/Measure before…

Since you tried this data in Particle Analyze, I want ask you one more question. It’s also a problem that I have posted before but haven’t solved.
I’d like to try to use the result image of Particles Analyze that size filter 10 voxels to do Thickness and Skeleton. So I need to convert the color image to a binary image. But I feel that some information will be lost in the process of binarization, that is, it is obvious to the naked eye that the binarization image will lack some objects compare to the color image of Particle Analyze. Sorry, my English is limited. Can you understand my question?


The colour is not important. You must make sure that the pixel value of the parts you want to analyse is 255. LUTs mean you can make 255 any colour you want to display. The colour that you see is totally ignored by Particle Analyser, which cares only about pixels with value = 255 = image foreground.

I noticed some problems in your stack which make it look as though a different threshold has been used to binarise each slice. If you are applying a threshold, make sure to use stack histogram and also not to calculate a different threshold for each slice. You can also use the threshold settings to put the pores in the foreground (255) of the binarised image.

This will tend to exclude large particles, which have a greater chance of touching the sides.

No, because I didn’t select it for calculation. But Feret diameter would be there if you select it. Just remember to set the Surface resampling to 1 so your small particles are retained.

Do you mean to exclude particles smaller than 10 pixels³? If so, just set Min Volume to 10, and tick the Thickness and Skeletons options. You are right, information will lost: results from smaller particles. The other way to do this is to run without size filtering and filter the numerical results in a spreadsheet later.

By colour, do you mean greyscale? Yes, information is lost in the conversion process because you are going from 16-bit to 1-bit. If you are not happy with the way the segmentation is working, because features are getting lost, there are other approaches like Trainable Segmentation that may work for you.

Hello @mdoube,
Because BoneJ wiki is down now, I’d like to confirm with you again about using the sum of skeleton branch lengths to calculate the average pore length.

If I remember correctly, Branches length (pixels) in Particle Analyze is the sum of branches length of each trabeculae bone? So if I want to calculate the average pore length, just average Branches length (pixels) in Particle Analyze result, right?