I’m trying to convert a vtkMRMLScalarVolumeNode to a new vtkMRMLSegmentationNode (in Python) and I don’t seem to get it figured out… The scalar volume is basically just a binary image but I want it to be rendered as a segmentation (contour) and not a volume.
Does anyone know how I can achieve this? Thanks in advance!
You can programmatically use the segment editor tools to generate a segment from your binary image using a threshold (check out the segmentations section of the script repository), though there is probably a simpler way given that you basically already have a thresholded image. If it helps, it looks like you can load your volume as a segmentation (see instructions here Segmentations — 3D Slicer documentation). That’s not exactly the same as converting an already loaded volume, but maybe it will work for you.
There are convenience tools to do this conversion. Thresholding as suggested above is an error-prone workaround, so I suggest using the built-in function called
ImportLabelmapToSegmentationNode, see Slicer: vtkSlicerSegmentationsModuleLogic Class Reference
Thank you, it was indeed the preferred method!
I may have missed something, I see that the input to the function is a label map, is there anyway to input a volume Node instead i.e. convert the volume node to a segmentation then labelmap.
When you say “convert the volume node to a segmentation” do you mean segmenting an anatomical image like a CT or MRI? For that you need to use the Segment Editor module.
I have a binary 3D mask of a structure that I load as a volume node instead of a segmentation node, I then just want to convert it to a segmentation node later on in a post-processing step.
If your scalar volume is already a binary labelmap (just imported as a scalar volume instead), then the easiest method is to convert your scalar volume to a labelmap using the Volumes module, in the “Volume Information” section:
and then import the labelmap as a segmentation using the “Segmentations” module in the “Export/Import models and labelmaps” section:
or programmatically using
ImportLabelmapToSegmentationNode as suggested above.