Documentation/Labs/Segmentations

From Slicer Wiki
Jump to: navigation, search
Home < Documentation < Labs < Segmentations

Motivation

See

Features

  • TODO

Design and implementation

  • TODO
Segmentations module, Visualizing model in 2D and 3D, also showing merged labelmap in 2D
Class diagram

Code

Segmentation modules is part of the SlicerRT extension during development and will be moved to Slicer core when the developments are complete:

Slicer core changes

https://github.com/SlicerRT/Slicer/tree/segmentation-node

Future features

  • TODO

Issues

  • TODO

Topics to discuss

  • TODO

Notes

  • TODO

vtkMRMLLabelMapVolumeNode integration

Slicer core updated, see this commit: https://github.com/Slicer/Slicer/commit/e4ffa1f6dcfafc1ca8f0015ecf02a0c23a8bd503

Module update instructions

Module selectors that expect a labelmap volume should be changed

From:

   self.outputSelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" )
   self.outputSelector.addAttribute( "vtkMRMLScalarVolumeNode", "LabelMap", 1)

to

   self.outputSelector.nodeTypes = ["vtkMRMLLabelMapVolumeNode"]


From:

   self.outputSelector.nodeTypes = ( ("vtkMRMLScalarVolumeNode"), "" )
   self.outputSelector.addAttribute( "vtkMRMLScalarVolumeNode", "LabelMap", 0)

to

   self.outputSelector.nodeTypes = ["vtkMRMLScalarVolumeNode"]
  • Note: This changes the value assigned to nodeTypes from a Tuple with 2 elements to a List with only one element. Additional information on the Tuple syntax can be found here: https://wiki.python.org/moin/TupleSyntax

CLI modules

CLI modules are not impacted. No change is needed in interface definition XML files or in the module implementation.

Switch between scalar/labelmap volume

Previously it was possible to switch between scalar/labelmap type by changing an attribute value. Now scalar/labelmap volumes are stored in different classes, therefore a new node has to be created for the converted volume. Conversion options:

  • Use the Cast Scalar Volume module to convert between scalar/labelmap volumes.
  • Create a new node for the target representation and pass the image data of the source node to the target node. For example, conversion to labelmap volume:
   scalarVolume = slicer.util.getNode('MRHead')
   labelVolume = slicer.modules.volumes.logic().CreateAndAddLabelVolume(scalarVolume,scalarVolume.GetName()+'-label')
   labelVolume.SetAndObserveImageData(scalarVolume.GetImageData())
   slicer.mrmlScene.RemoveNode(scalarVolume)