I’ve found myself down a rabbit hole, and I’m looking for opinions/suggestions from more advanced users. Long story short, I would need to calculate the average trabecular and cortical bone densities of the calvaria from CT (and ZTE) images of quite many people, in order to calculate the skull density ratio. I have created the skull masks of the calvaria already, and now I’m battling what to do next. As direct thresholding cortical/trabecular does not seem accurate option, would some kind of clustering and/or bone texture analysis be suitable idea?
I’m not afraid some python scripts either, but I have to say I’m extremely lost in the option jungle, and I’m having hard time founding any examples and results people have gotten out of different options. I’ve tried this and that and read countles amounts of posts, but I would love to hear that has anyone actually managed to do such separation of the bone tissue types of the skull in a semi-okay manner. The resolution and image quality I have are okayish.
Me and my thesis would be extremely happy to hear your thoughts. Thank you for any suggestions!
I don’t work on bone morphometrics, so take it with a grain of salt.
Assuming your CT scans are not high enough resolution to see Tb, I am not sure this is something you can measure easily or even possible. Intensity only segmentation will not be sufficient (because you can’t distinguish a low intensities sufficiently clear. It can be a thin cortical bone showing partial volume effect, vs indeed part of Tb.
The CT voxel sice is 0.5x0.5x0.5 so not great but not terrible, but partial volume effect is an issue here for sure. ZTE (zero echo time mri) is quite noivel MRI sequence that provides CT-like (but intensity based) images where bone structures are nicely visible, " Zero TE MRI for Craniofacial Bone Imaging" paper has some images. It’s not as good as CT, but the scans in my dataset are luckily quite nice.
Literature covers this topic quite well, but I’m having hard time finding anything that would be explained precisely enough for me to actually figure out what has been used.
This group also had threhoding approach (Otsu, histograms) with bunch of things I’m not too familiar with: Radware Bot Manager Captcha
Many sources just mention that the SDR was calculated via segmentation and the basic ratio was taken, so I hope it would mean that it could be possible. Honestly, at this point anything that could create even slightly possible results is better than nothing, luckily this ain’t a PhD.
Well I am still not convinced that even 0.5mm is sufficient (since the Tb thickness is on the order 0.02-0.1 mm), but if people in the field is claiming that it is doable, I am not going to argue.
All of those functions you mentioned is available in the Slicer segment editor for you to try. However, if you can get your hands on some of these datasets (i.e., you have skulls partition into cortical and Tb), and you tryust their results, a more meaningful approach would be to train a deep-learning network to classify the bones for you.
Alternatively, you can try to do that manually using NNinteractive focusing on regions you know anatomically that Tb is present and see if you can manually segment to do the same without solely relying on intensities.
Thanks! Yeah I for sure agree that this seems like an impossible task to do even remotely correctly. I will for sure try the NNinteractive option, as I have already tried all other thinkable options regarding this approach in the past two months.
I also thought about alternative approach to calculate the SDR, and it gave me an idea to try the intensity based method in Frontiers | The Distribution of Skull Score and Skull Density Ratio in Tremor Patients for MR-Guided Focused Ultrasound Thalamotomy paper (Eq. 1). I already found that Slicer can plot the intensity plot along one line with the LineProfile option. Thus, does anyone know if it’s technically possible to build a model that could measure intensities along like 500 lines at the same time, but from different parts of the skull? This way I could extract the min and max intensities along each line and use the eq2. Here’s a not-so-fancy picture of what I’m hoping to achieve, but in 3D and with hundreds of skull points and by not needing to place each line manually (don’t mind the skull model itself, it’s a phantom, not a skull):
I’m new to slicer and it seems that either this is not possible to build a model like this with multiple lines at the same time or then I’m unable to find the correct search words for such thing.