Nasal Cavity Geometry Extraction

I need to extract geometry of nasal cavity of sample patients for CFD simulation. Kindly guide me what would be the best method to do so.

What is the most effective and efficient way to extract geometry of nasal cavity from DICOM data?

If it’s just air surrounded by tissue, maybe you can get by with just thesholding and scissors. The segmentation tutorials are a good place to start. Beyond that you’d need to describe your data more (maybe with screenshots).

That is what I have been doing but there are a lot of holes in the surface and I am not able to fix that using smoothies tools. Can segmentation be done using GrayScale Model Maker? How does it work?

It might help - we can only guess without seeing your data.

One thing you can try is increasing the resolution of the segmentation compared to the background image.

Thanks for the reply. I am not allowed to share the data. Do you have any tutorial that tells how to extract geometry using Grayscale Model Maker?

You should use Segment Editor from a recent preview version. Here are some pointers to get you started:

How do I increase resolution of my segmentation?

Also, what is the most appropriate method to determine the exact threshold range for a specific patient?

For thresholds, I don’t think there is an ‘exact’ method. You can try the provided automated thresholding algorithms (e.g., Otsu, isodata etc), as a starting to point and see if they help you identify a range that works for the structure you isolate. Benefit of such algorithms is the reproducibility, but that doesn’t mean the range that they estimate is going to be range you will need for your case.

To change the resolution of the segmentation, you can click the little cube next to do Master Volume field of segment editor, and select Segmentation node. Then you can specify the resolution you would like to have. Note that for me this resulted in a crash with MRHead.nrrd when I was testing it.

My preferred method is to increase the resolution of the master volume using the Crop Volume or ResampleScalarVolume so that thin structures that I want to segment are at least 4-5 voxels thick. After that you can proceed with the segmentation normally.

Thank you for the help. After trial and error, I was able to find a suitable threshold range with minimum holes and extrusions. However, I am not sure whether this is the correct way to do it. What I mean to say is that this may result
in adding extra segments to the geometry which are not originally part of the patient’s actual nasal cavity.

I read in a paper (attached) about determining the right threshold value (Table 1). I am working on it. If you know anything about it or come across anything relevant in future, kindly do let me know. Furthermore, the authors have
mentioned about using the Grayscale Model Maker for geometry reconstruction (section 2.3 para 1). I have been trying it. I was able to create iso-surfaces. Is there any way to turn that is-surface into a segment?

Thank you.

(Attachment Zwicker_2018_Biomed._Phys._Eng._Express_4_045022.pdf is missing)

Attachment has been rejected. You can view that paper here:


It worked well for me with any parameter combinations that I tried. Can you describe the steps that led to the crash?

Thanks. Is there any way to convert an iso-surface (obtained form Grayscale Model Maker) into a segment which can later be exported into an STL file?


You do not need to use Grayscale model maker module anymore. All you need is available in Segment Editor and Segmentations modules:

  • Thresholding effect to generate segment from iso-value
  • Create 3D to generate isosurface that is automatically regenerated as you edit the segmentation
  • Export to files to create 3D-printable STL file, etc

@lassoan, Doesn’t the Segment Editor require a labelmap for thresholding? That would technically be a different final mesh than the Grayscale model maker for the same threshold (depends on oversample level).

Segment editor Threshold effect does not require labelmap input - as master volume it can use the same scalar volume input as Grayscale model maker.

Segmentations can generate the same output as Grayscale model maker. You can tune smoothing, decimation, normal computation options in Segmentations module / Representations / Closed Surface - Update / Binary Labelmap -> Closed surface path.

But Grayscale model maker never creates a labelmap, so the isosurface is defined by the continuous tone values of the image, not from the output of the threshold, which introduces a voxel level discretation.

When I try editing a Segmentation where the master representation is Closed Surface I get this dialog, so it looks like you can’t bypass having the labelmap.

I see what you mean now. Yes, if you use binary labelmap representation then the subpixel-precision adjustment of surface point positions is missed. In practice, this does not make much difference because we smooth the generated mesh.

Maybe there is some degree of surface roughness that can be preserved if scalar volume is meshed immediately, but smoothed out if performing thresholding, meshing, and smoothing. In the rare case that this would matter, you can use fractional labelmap representation instead of binary labelmap. Or, you can use binary labelmap representation with oversampling. Or, if you don’t need any editing, then you can use Grayscale model maker.

Yes, I agree - in most use cases you need to edit anyway, so the best option is to pick a segmentation oversampling that is able to represent the details you need (so that any important feature is a few voxels thick).

For special cases where thresholding works well in the area of interest, another option is to edit the things you want to remove into a segment and then use that to mask the original volume before running the Grayscale model maker.

I just had an idea. I was thinking if there is any way to cut down my segmentation into small segments so that I can manually edit them by filling the holes and then later merge all the segments into a single segment. I need the geometry to be one closed surface. I will use it later in ICEM CFD for meshing, so it needs to be totally error free. Thank you for your time.