I’m working on brain vessels segmentation. I need manually annotated data from clinicians, so I wrote a module that uses some effects from the Segment Editor. Their current pipeline for segmentation is:
MITK: Intensity threshold of the vessels image and surface generation
MeshLab: mesh cleaning by removing small (diameter) islands and manually selected ones
My Slicer module is very similar, but works on a Segmentation node with label map as master representation. I use Remove small islands and the Scissors effect, but my feature requests are:
Being able to remove an island by clicking on it in the 3D view. I guess this shouldn’t be too hard since one can already move the 2D crosshair by placing the mouse on the 3D mesh and pressing Shift
Add an option to use islands diameters (longest distance between points on the surface) instead of number of voxels for the Remove small islands. This one might be harder, I don’t know whether that filter is available on VTK.
An elongated, thin island (long diameter, small volume) is more likely to be a vessel than a spherical island (small diameter, high volume). That’s why this difference is important for my case.
This would be nice. The complication in 3D views is that when you pick a point position in 3D view, it is always at the boundary of a segments, so you need to analyze what is around that position and look around, maybe move a bit farther along the viewing ray until you find a non-empty voxel and use that position. Should not be too difficult, it’s just not completely trivial. Getting 3D position from a click position is already available in qSlicerSegmentEditorPaintEffectPrivate::brushPositionInWorld - this method could be moved to the common segment editor effect base class so that all effects can access it; everything else could be implemented in the Islands effect in Python. @Fernando Would you be interested in trying to implement this?
This metric is quite special and not easy or fast to compute. I would recommend to use bounding box shape or first moment to perform some filtering based on the island shape. This could be implemented as an additional filtering step after small islands have been removed, in Islands effect. @Fernando We don’t know how useful this shape-based filtering would be (maybe it will be often useful, maybe not), so the best would be if you could implement a prototype, play with different shape characterization options, etc., and if you find something that seems to work well then we can integrate it in the Slicer core. We can help you with any specific problems.