InsightSoftwareConsortium / ITKBoneMorphometry

ITK filters that quantify bone morphometry
Apache License 2.0
7 stars 8 forks source link

Implement local thickness transform #23

Open Besler opened 6 years ago

Besler commented 6 years ago

The current implementation for thickness (Tb.Th, Tb.Sp, etc.) uses the derived measures [1]. Although these are metric-free indices, they are not direct indices.

Instead, it would be great to have the thickness transform [2] for direct assessment.

It takes a traditional distance transform and "blows up" the distances in spheres.

I would be OK to implement this (have a basic ITK class right now). Just want feedback (i.e. Yes/No) before I do.

[1]: Boutroy, Stephanie, et al. "In vivo assessment of trabecular bone microarchitecture by high-resolution peripheral quantitative computed tomography." The Journal of Clinical Endocrinology & Metabolism 90.12 (2005): 6508-6515. [2]: Hildebrand, Tor, and Peter Rüegsegger. "A new method for the model‐independent assessment of thickness in three‐dimensional images." Journal of microscopy 185.1 (1997): 67-75.

phcerdan commented 6 years ago

Hi @Besler, I am sure contributions and new features are welcome, please do! @thewtex @bpaniagua

thewtex commented 6 years ago

@Besler sorry we missed this issue -- yes, @phcerdan is right -- collaboration on the direct indices would be more than welcome!

T4mmi commented 5 years ago

Just adding to the discussion with a contribution : ITKThickness3D
Local thickness transform is an objective of this module, not yet implemented.

My workaround for such issue is using the actual "distance from the medial axis to the outside"...
Such transform can be averaged/tabulated to get the actual Tb.Th (or Tb.Sp, inverting phases).

It is in my opinion more relevant than regular "local thickness transform" averaging since the 'larger number of pixels in larger trabecuale' would overestimate the actual Tb.Th... (but I'd like your opinion on that point)

Besler commented 5 years ago

@T4mmi Loving the ITKThickness3D ! I never got around to an efficient implementation.

The main reason for blowing up the medial axis transform back to the original data is two fold. First, you can render the thickness image. This is very common for publication images. Second, there is too much lock in now. So many academics understand the "sphere filling" method that it's a massive up hill battle. Their response is going to be "at least we're all biased".

I totally agree that there are better ways to compute thickness. But, for the purposes of bone morphometry, being wrong may just be the best way to get buy in. And since there are python interfaces, this package can have huge implications for academic purposes.

Where this stuff is ultimately going is towards techniques like individual trabecular segmentation [1]. I really can stress how important I think the itkBoneMorphometry package is going to be.

I have access to the Scanco implementations and can run a comparison study if you're interested.

[1] Liu, X. Sherry, et al. "Complete volumetric decomposition of individual trabecular plates and rods and its morphological correlations with anisotropic elastic moduli in human trabecular bone." Journal of Bone and Mineral Research 23.2 (2008): 223-235.

T4mmi commented 5 years ago

Just to add up some material to the discussion,

I'm not saying that the maximal sphere approach is wrong (actually it would provide the same results as the medial thickness approach if used correctly) ... only that its use is usually done wrong (averaging the whole transform instead of volume-adjusted average [1]).

In line with this statement I completely agree that an opensource solution like ITK and the itkBoneMorphometry module could give an extremely valuable baseline/reference for such measurements (especially since implementations like Scanco or Bruker ones are proprietary and not reproducible) ....
For now I only see BoneJ as a valid tool, but it lacks important features as scripting/bindings, low level customization...

I also agree with the use of thickness render for visualisation purpose but there are some methods to do it without a local thickness transform as detailed here.

Finally, for the local thickness transform implementation, a starting point might be to look at the FIJI implementation, but I personally don't feel the need nor have the time for it right now...

[1] Hildebrand, T. & Ruegsegger, P. A new method for the model-independent assessment of thickness in three-dimensional images. J. Microsc. 185, 67–75 (1997).

Besler commented 5 years ago

Okay, I take it back! Thanks for correcting me, @T4mmi! The Link you provided for visualizing with the local thickness transform is really amazing... I had never seen this.

I'll see if I can find some time to implement it here.

dzenanz commented 5 years ago

Has there been any news since March?

T4mmi commented 5 years ago

Hi, unfortunately I hadn't much time to dedicate to new implementation ....

For now, ITKThickness3D is a viable solution for Bone morphometry (I actually use it for my projects).
It only provides a 3D medial thickness and lacks the "local thickness transform" which only requires a retro-propagation of the medial thickness to neighbors ... Since this transform is mostly used for "cool paper figures" (the hard computation are based on the medial thickness, or should be in my experience in the case of bone morphometry), a temporary solution is to go by Slicer3D. Haven't look at the Probe volume with model and how it could be used directly in ITK...

Full disclosure, I'm changing job at the end of the month so not so available these days...

thewtex commented 1 year ago

CC @sbonaretti

soupault commented 1 year ago

Hi all! FWIW, I have recently written an anisotropic implementation in Python. The medial axis is still 2.5D (concatenation of 2D axes), the rest is fully volumetric - https://github.com/MIPT-Oulu/SubregionalCartilageAnalysis/blob/main/scartan/metrics/local_thickness.py . My version already works better in practice than the ImageJ version, since that one is isotropic.

I am working in the background to make my implementation properly 3-dimensional (https://pageperso.lis-lab.fr/~edouard.thiel/print/2005-ivc-remy-thiel.pdf), but it is going rather slow. If anyone is willing to collaborate, that would be fantastic.

soupault commented 1 year ago

@sbonaretti I would also appreciate if it possible to have your input on how to properly validate such algorithms, i.e. what are the best test samples that would cover the majority of corner cases. I am assuming you may have some intuition from the prior study - https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6042828/, but, please, correct me if I am wrong.

thewtex commented 1 year ago

Hi @soupault ,

Thanks for reaching out. And excellent to see more relevant open source work in MIPT-Oulu!

Discussing offline with @sbonaretti, she has some simulations in development for validation. We could also look at generation of additional trabecular-like volumes where we have a known ground truth.

Building on the work of @T4mmi , there are additional improvements that can be made to the accuracy of medial thickness based on the distance estimation method. And, skeletonization can be improved building on the work of @phcerdan.

In 2023, we could have an ORMIR community discussion on the topic.

sbonaretti commented 1 year ago

@sbonaretti I would also appreciate if it possible to have your input on how to properly validate such algorithms, i.e. what are the best test samples that would cover the majority of corner cases. I am assuming you may have some intuition from the prior study - https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6042828/, but, please, correct me if I am wrong.

Hi @soupault, As @thewtex said, we are looking into some shapes to compare thickness algorithms. I will let you know more after Xmas! Serena