Measuring Trabecular Thickness in Knee MRI

Hi everyone,
I am quite new to ImageJ and BoneJ. I would really appreciate if you could help me with this.
I want to measure MRI-derived trabecular thickness (Tb.Th), trabecular separation (Tb.Sp), and bone volume/total volume (BV/TV) in several coronal IW TSE MRI sequences (like attached file).

Is there any tutorial for this?
I know I should make them binary first and then select some ROIs. But I don’t know how.

Many thanks in advance,


can you mark on the image, where do you want to measure?

Please see the attached file (the yellow box).

It’s unlikely that the tools in BoneJ will give you accurate results at this level of resolution. They are intended for the situation where trabeculae are resolved by at least 5 pixels (and better, 20 or more), and can be reliably segmented from the greyscale image, which is the usual situation in X-ray microtomography.

Human Tb.Th is usually on the order of 200 - 500 µm, and that is approximately the same as the resolution of typical clinical MRI images. You will need a different approach - plenty are published in the literature (e.g. doi:10.1016/j.medengphy.2009.09.003), but the problem is usually code availability.

Many thanks for the response.
The voxel size in my MR images is 0.3 x 0.3 x 3 mm (they are anisotropic). Given the depth of 3 mm, can I use BoneJ to find the best circle (instead of the sphere) that fits within each trabecula in each slice?
How about BV/TV, does BoneJ provides reliable estimates for this voxel size?
Many thanks,

Thanks for raising it. The anisotropic pixel spacing typical of clinical imaging means that you can’t easily do 3D measurements. It’s even worse than that: your ruler in the out-of-plane direction is likely to be at least 5× bigger than the thing you are trying to measure (like trying to measure your interpupillary distance with an unmarked metre-stick).

This is not to say don’t bother trying, just, be painfully aware of the limitations to measurement that your modality has restricted you to.

BV/TV might work, but it will be very sensitive to your segmentation. You should do a sensitivity analysis to show how BV/TV varies as a function of e.g. threshold value (or whatever other segmentation steps you take).

Another approach would be to use the greyscale values, as long as they are well calibrated. I guess your signal is going from low (bone matrix) to high (marrow fat and water). All of your pixels will be partially filled with bone matrix and marrow, and the BV/TV might be able to be estimated by a mean pixel value within your ROI. One way to calibrate is to use known pixel values in the current image, e.g. a cortical bone region as ‘100% bone’ and subcutaneous or infrapatellar fat as ‘100% marrow’. You can then estimate the pixel’s filling fraction (i.e. its BV/TV) as:

f = (p - b) / (m - b)

(please check that. The idea is to place your pixel value p on a linear scale stretching from 0 - 1 between your image’s bone value b and marrow value m. It assumes a linear relationship, which may not be correct - it depends on the MR image formation physics).

This calculation can be done with ImageJ’s built-in Image math plugins.

Many thanks. :relaxed: