Segmenting canine turbinates using mask volume

Hi everyone,
I want to segment the turbinates from a canine. Turbinates are typically thin interconnected tissue/bone . I’m using the mask volume segmentation tool & Paint to isolate the turbinates from the bones of the skull. My segmentation is not interconnected. Is this the correct segmentation tool to use or how would you interconnect the tissue?

These bones are so thin that due to partial volume effect they may be hardly distinguishable from image noise at usual CT resolutions. What is your overall goal - rendering, 3D printing, quantitative analysis, …? What are your time constraints (how many data sets do you need to process and much time you can spend with each)?

My goal is to 3D print the turbinates in the skull to show the reduction of the nasal cancer from stereotactic radiation treatment. The nasal cancer was much easier to segment/print as it was a mass filed with mucosa. I segmented that by setting the threshold values and using Paint. The turbinates are so thin, I’m thinking I will need to thicken them internally so I can print them. I will have two segmentations-the skull and turbinates. I have a week to segment the turbinates and print both sides of the skull.

Thank you.

If you only going to do this one, and anatomical accuracy is important, I think manual segmentation is the way to go. Your initial segmentation seems to based on thresholding, and such it is a mixture of things including turbinates, cartilage, but also missing for some reason part of ethmoid plate and smaller turbinals.

While they are complex, the morphology changes gradually from slice to slice. If you carefully outline in a one slice using manual paint/draw options, skip a few and do the same on another, you can use the ‘fill between slices’ to interpolate skipped sections.

This of course doesn’t work very well, if you are going to do this routinely.
Then perhaps you can play with the segmentation geometry

1 Like

I agree, if it is a one-off then the fastest solution overall is to use manual or semi-automatic methods. You could try to experiment with various preprocessing methods or developing more sophisticated workflows but that does not pay off if you only need to segment one or a few cases.

In addition to the Fill between slices effect, you can also try to use Paint effect with sphere option enabled (so that it paints on a couple of slices at once) with enabling “Editable intensity range” in Masking settings. You can find a good intensity range using Threshold effect (click “Use for masking” if the previewed intensity range looks good).

1 Like

Hi, thanks for your reply. I will try the “fill between slices” option. I plan to do this on multiple patients. So, I will need to find a faster way after this project. I’ll try to slice it in multiple views so as to get a better build/connections in all directions when using fill between slices. There is a Perk Lab video for a femur by using the mask region growing, paint, grow from seeds, I will try it as well.

1 Like

Great, I appreciate the help from everyone.
I will try your suggestions and let you know how it goes.

1 Like

Region growing requires the segmented structures to be at least 4-6 voxel thick. You can achieve that by Cropping and resampling the volume (resample with spacing scale of 0.2 to 0.7, crop to prevent the segmentation to consume too much memory - spacing scale of 0.5 increases memory usage and processing time by a factor of 8x).

Hi Murat and Andras,
I was successful in segmenting the turbinates using fill between slices.
Is there a setting to reduce the volume of the fill or ratio of negative to positive space in fill between slices? I was hoping to develop the left nasal cavity with more detailed turbinate leaflets.
My axial view shows this detail but fill between slices filled all the negative space. This is for 3d printing. Any suggestions? Thanks!


1 Like

You can always a good segmentation with “Fill between slices” by reviewing the slices after clicking “Preview” (before clicking “Apply”) and if you find that on any slice the segmentation needs improvement then segment that slice, too. This will automatically recompute the segmentation, taking into account this additional input. Click “Apply” when the entire segmentation is acceptable.

1 Like

Thanks, I’ll give it a go.

Yes, it worked well.

I have noticed when I exported the skull as a STL(LPS), I’m losing the varying thickness of the skull. Previously the skull thickness was visible, when cut in half ,in the STL file.
Have I saved it incorrectly as a STL?

Can you post a screenshot?

How did you cut the mesh in half: using Dynamic modeler module’s Plane cut tool, or simply specifying cutting planes in Models module? Capping of the cut surface is only available in Dynamic modeler.

I cut the mesh in Rhino3d with a cutting plane that I can control points to shape the cutting plane or I use a straight plane, then I bring in a 3dm file of a knuckle joint to do a Boolean union to the two half’s of the skull. It sounds like I can cut the skull & turbinates with a straight plane in Slicer? Can I do a Boolean union?

I found the community comments regarding using the dynamic modeler. I will pursue using it and some of the other means mentioned from the community.

Thanks.

STL can only store a surface mesh. If the surface is closed then it appears from outside as a solid object, but it is really just an infinitely thin shell.

If Rhino3d can interpret the imported STL file as a solid then when you cut it, the cut surfaces will be capped to it will appear that it has thickness. However, if Rhino3d interprets the imported STL file as a surface mesh then when you cut it, then you will see that the mesh is just an infinitely thin shell.

In Slicer, you can cut a model and cap the cut surface using Dynamic modeler module’s “Plane cut” tool, which will keep the surface closed (thereby preserving the solid-like appearance). You can do Boolean operations on models (union, intersection, difference) using the new experimental module in Sandbox extension: New experimental feature: Boolean operations (union, intersection, difference) on meshes

Thank you. I found a Perk Lab video 3D Slicer: Dynamic Modeler - Parametric Surface Editing for Biomedical Applications that will be helpful as well. And I installed the Sandbox extension. This should streamline our process. I’ll let you know how it works. Thanks.

1 Like

Sorry for asking probably a very basic question but how do I declare the skull as a Model Node in the selection panel?

Have you exported the segmentation back as 3D model? Sometimes it is easy to overlook that step.

@Dexter777 I’ve also noticed that you use a Slicer version that is months old. We make fixes and improvements and add features almost every day, so during all this time you missed out on a lot of things. I would recommend to update to the latest Slicer Stable Release.