Hello! I am trying to analyze my own cbct scan using 3d slicer and it is a very interesting program. some extensions have already helped me segment the airway and do a rudimentary airway analysis to determine the narrowest points but this only followe a line set between points within the model and the data spreads and graphs are confusing and questionable.
I did use blueskyplan which allowed me to easily segment my whole skull but it sadly seems to not have a dedicated option like this.
Could anyone who is better at this maybe make a function that automatically does an analysis like in the image on a segmented airway? Would be cool if you could also do it for the nasal cavity or both the nose and throat together.
Sadly all these programs that can do these features are locked behind a paywall or you being a medical provider.
For the airway you should be able to use vmtk, check out its Slicer extension. I think the analysis you want to do is similar to what is done using vmtk for aorta
I did use vmtk, although I had a lot of trouble shooting before I got it to work. I found that I didn’t get a clean representation since it’s only a line that I can color code between the marked points of the analysis.
The image in your post above looks sort of like they just took a centerline value and used it to color the airway surface points (there doesn’t seem to be any circumferential variation in color). I don’t know of any existing automated way to transfer the centerline-associated associated values to model surface points, but it seems conceptually fairly straightforward, and you could probably have an LLM successfully guide you through it. Here is how I would probably approach it:
Export your airway segment to a surface model node.
For each point on your surface model’s polydata:
Find the closest point on your centerline curve
Get the associated stored maximum inscribed radius or diameter associated with that centerline point from the vmtk analysis
Store that value as a scalar associated with the model point
In the surface model node’s display settings (Models module => Display => Scalars):
Check the “Visibility” box to turn on scalar display
Choose the name of the scalar where you stored the radius or diameter value as the “Active Scalar”
Choose a color map and data range to control how the colors map to the stored values
I think this should work well, and is hopefully not too difficult to implement. Good luck!