Finding surface roughness and sphericity of 3D particles from 2D stacked images using Fiji/ImageJ?

Hi everyone,

I have a stack of images of my soil (taken by x-ray tomography) that looks like the image below sandpack04_1000x1000x1000_8bit2.to-byte101.tif (7.0 KB)

Where the black 'circle’s are the particles/grains of the soil. I’m struggling to find a way to obtain surface roughness (e.g. Ra values) and sphericity measurements of grain particles in a soil sample from 2D stacked images by using imagej/fiji. Is there any way to obtain surface roughness and sphericity values of a grain particle in 3D? I tried doing to do particle analyzer to first identify the particles and then use the Roughness Calculation plugin, however, this only identifies the grain particles per slices and I want it to identify the grain particles in 3D. For sphericity, I tried using the 3D Shape Measure but it didn’t identify the grain particles.

Thanks in advance!

Try BoneJ’s Particle Analyser. You may have to do a bit of arithmetic on the results to get the ratios that you want, but I think it should be possible just by combining surface area and ellipsoid fitting.

Thanks for the suggestion Michael, but I need help understanding the results of BoneJ’s particle analyser in terms of the volume. I attached the image of the resulting 3D viewer and the table of results below. For context, the dimensions of the 2D stack images are 8000x8000 um and there are 291 images. For one of the identified particles, the volume is significantly larger than the other particles by an order of magnitude of 8. In the 3D viewer I do not see this kind of particle, so why does this appear?


Screenshot (454)

Hi Michael, I just realized what the table of results show. For some reason, I think that BoneJ’s particle analyser identified 157 out of 158 particles to be the blue dots you see in the 3D viewer image and the 1 particle that has the large volume of 2.403E11 um3 is the volume of the grains in its entirety. So now my question is, how do I obtain values for each of the grain particles.

You have one huge connected particle, and lots of little unconnected particles, which is pretty typical for this kind of image. Look at the label image stack to get a better idea of what is going on. In effect, if the sand grains are close or touching, and the image cannot resolve the gap between them, then the connected components labelling sees the grains as one single connected particle.

If you want to treat the one big particle as separate sub-particles you will need to do some image processing prior to Particle Analyser. You may find that a 3D watershed (or some other filter) helps to split the grains into individual particles. Please try some different things and report back here on what worked for you.

I managed to separate the grain particles from each other by using 3D Watershed Split filter from the 3D ImageJ Suite plugin. However, I lost about 22% of the grain volume which is not a problem. I also managed to obtain the sphericity values after separating the grains by using 3D Shape Measure function from the 3D ImageJ Suite plugin. I’m still stuck on figuring out how to get surface roughness values.

1 Like

One way to do it may be to calculate the surface area of each particle with different amounts of smoothing (the Surface resampling option). Roughness will lead to increased variability in surface area as a function of smoothing. Bear in mind that you are limited by the pixelation of the image, so all the particles will look rough to some degree, which relates to the pixel grid rather than true surface roughness. You may also find that filtering of the input image to get the binary image creates artefacts so that you are not measuring roughness of the particles so much as some feature of your filtering process.