Why thickness can be sub-resolution?


I’m currently using BoneJ plugin to estimate diameter of 3D structure (vessel).

This works perfectly and the result are good approximation of the real size of the object.

But I have a question, how is it possible to have sub-resolution value ?
I design some toy data to understand how the algorithm create those sub-resolution value, but I don’t get it. How a voxel sphere can be under voxel size ?

My image resolution at MRI is 0.4 mm isotropic, but I get value between resolution. For BoneJ, min value is 2*ImageResolution, but I get value between 0.8 and 1.2 mm.

Is it possible to explain me why this happen and is it a numerical problem ? Because I try to compare 2 images. One with small diameter and the other one bigger (dilation of the vessel). And when I do voxel-based comparison, I get sub-resolution delta (change in diameter), which means the method detect change under MRI resolution, can I really see this ?


Hi Alex,

I’m don’t know how BoneJ specifically works under-the-hood, but it is possible to measure things like thickness to sub-pixel resolution, so I suspect it is not a numerical error. This is because it usually makes more sense to measure things in physical units (mm) rather than pixels (or voxels).

How is it possible to measure to subpixel resolution? This comes from the fact that pixels are point samples of a continuous function. If you’re not familiar with thinking about pixels in this way, I’d suggest you check out this nice technical report: “A pixel is not a little square”.

Look at the picture above. There are three pixel values (the circles), that sample the continuous function (the curve). I hope you can appreciate how it makes sense that the true peak is not at 3 but a bit to the right of three. Since it’s possible to measure peak or edge locations to sub-pixel locations, it’s possible to measure thicknesses or distances in this way as well.

Hope this helped. If anything is unclear definitely follow up.



Hi John,

Thanks for your answer. You have a valid point, there few method to measure the diameter using Full width half-maximum (FWHM) method, which allow to profile the curve of intensity of your data (a bit like your image above).

This method is one way to extract diameter, but you need to manually define where you want to profite your object. I used object segmentation and BoneJ to avoid those manual step.

And based on what I saw in BoneJ and Local Thickness paper, they do sphere fitting (voxelic sphere) which are voxel/pixel size. So they don’t use a continuous model and they can’t obtain value like that.

My doing more and more toy sample, I figure out that maybe the distance map (EDT) using float value (like sqrt(2)) to define voxel near border and others, which leads to float value. But I don’t get how a sphere can have a voxelic size of sqrt(2). I tried to draw those on board, but I don’t get it.

So if anyone have ever work with BoneJ or Local thickness in the past and can help be to understand more the sphere fitting, to understand why there sub-voxel measurement on fitting, it would be greatly appreciated.