Remove islands inside the resulting STL from a segment

Operating system: Windows 10 Pro. Version: 21H2. Build: 19044.1466
Slicer version: 4.11.20210226 r29738 / 7a593c8

Hello all.

This is my first question in the forum, so I hope this topic is not repeated (at least I couldn’t find it).

I need to solve a problem that I found during multiple segmentation tasks of CBCT dental scans by using the Segment Editor module. In particular, I am segmenting the teeth, mandible and the maxilla, and inside all of them, there are multiple “islands” that I can’t remove with the Islands method. I tried the following:
- remove islands smaller than a fixed number of voxels (with different voxel sizes),
- keep the largest island (both for mandible and maxilla),
- split islands into segments,
but in any case, I could not remove these parts.

I attach some images of that problem (images are snapshots from MeshLab software due to I don’t know how I can see those islands with slicer in an easy way) where I hope you can see the islands inside the STL resulting from the segmentations done.

Can somebody help me with this problem? How can I remove these islands inside the STL? These islands are really considered “islands” by Slicer? Is there a way to check them in Slicer instead of using MeshLab or other software?

I take this opportunity to ask the Slicer community what methodology each of you uses to segment these types of images, with the goal of both improving my work and contributing to a piece of shared knowledge in this type of segmentation. In my case, I use to apply a Grow From Seeds for tooth segmentation but it is a very rough segmentation and I have to invest a lot of time in debugging it. For the jaw segmentation, I usually apply a threshold between the maximum value of HU and a value around 500 HU, this way I remove the air and much of the soft tissue and then, after manual cleaning, I subtract the segmentation made by the teeth. If you want I can upload photos of how I do it.

I hope I have explained it well. Thanks in advance for your time.

Best regards.





snapshot-10

If these “islands” are truly disconnected from the rest of the segment, then Slicer’s Islands tool should remove them. However, it is sometimes the case that there are small regions which are connected via a very thin bridge to the rest of the segment. These do not count as separate islands because they maintain a connection. However, when exporting to STL or viewing in 3D, there is typically some smoothing applied, and this smoothing can have the effect of eliminating the small bridge in the 3D visualization or the exported mesh. Thus the mesh can have islands which are not truly islands in the segmentation it is generated from. These will not be identified by the Islands tool because they are not islands in the segmentation.

What can you do about this? There are multiple approaches you could take which come to mind. Which is best will depend on your images and your segmentation goals.

  • You could smooth the images (e.g. with a median filter) to make them less noisy before segmentation
  • You could smooth the segment using the “Smoothing” tool in segment editor after your initial threshold segmentation. You could try this with either a “Median” smoothing or with an “Opening” smoothing. “Opening” will perform a morphological erosion followed by a morphological dilation with the net effect of removing structures smaller than the kernel size while maintaining larger structures.

If I were in your position, I would probably start by trying the second approach using “Opening”, followed by keeping the largest island, and see how that looks.

It looks from your last screenshot like you eventually had some success seeing the segment structure in 3D in Slicer. If you want the 3D surface to be transparent, you can control that in the “Display” section of the “Segmentations” module, using the 3D visibility opacity slider.

One way to check whether smoothing is giving rise to the islands is to turn off smoothing and see if those regions are connected in that case. You can turn of smoothing by going to the “Segmentations” module, and in the “Representations” section, next to “Closed Surface”, click the “Update” button, which will open another window:


In that window, click on the path, and then on the “Smoothing factor” in the conversion parameters, and change the smoothing factor to 0. Then click the “Convert” button to generate a mesh with no smoothing applied.