Difference between revisions of "Documentation/Labs/Segmentations"
From Slicer Wiki
(Added class diagram and latest source code links) |
|||
Line 12: | Line 12: | ||
{| | {| | ||
|[[Image:20150529_Segmentations.png|thumb|right|961px|Segmentations module, Visualizing model in 2D and 3D, also showing merged labelmap in 2D]] | |[[Image:20150529_Segmentations.png|thumb|right|961px|Segmentations module, Visualizing model in 2D and 3D, also showing merged labelmap in 2D]] | ||
+ | |} | ||
+ | |||
+ | {| | ||
+ | |[[Image:20150710_Segmentation_Design.png|thumb|right|961px|Class diagram]] | ||
|} | |} | ||
= Code = | = Code = | ||
− | Segmentation modules is part of the SlicerRT extension during development and will be moved to | + | Segmentation modules is part of the SlicerRT extension during development and will be moved to Slicer core when the developments are complete: |
− | + | * SlicerRT trunk modules: | |
− | https://subversion.assembla.com/svn/slicerrt/branches/SegmentationObject/ | + | ** SegmentationCore containing the base VTK container and conversion classes: https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/src/SegmentationCore/ |
+ | ** Segmentations module: https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/src/Segmentations/ | ||
+ | * Original topic branch in SlicerRT: https://subversion.assembla.com/svn/slicerrt/branches/SegmentationObject/ | ||
= Slicer core changes = | = Slicer core changes = |
Revision as of 19:36, 15 July 2015
Home < Documentation < Labs < SegmentationsContents
Motivation
See
- https://www.assembla.com/spaces/slicerrt/wiki/Segmentation
- http://www.na-mic.org/Wiki/index.php/2014_Project_Week_Breakout_Session:_Contours
- http://www.na-mic.org/Wiki/index.php/2015_Winter_Project_Week_Segmentations_Breakout
Features
- TODO
Design and implementation
- TODO
Code
Segmentation modules is part of the SlicerRT extension during development and will be moved to Slicer core when the developments are complete:
- SlicerRT trunk modules:
- SegmentationCore containing the base VTK container and conversion classes: https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/src/SegmentationCore/
- Segmentations module: https://subversion.assembla.com/svn/slicerrt/trunk/SlicerRt/src/Segmentations/
- Original topic branch in SlicerRT: https://subversion.assembla.com/svn/slicerrt/branches/SegmentationObject/
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.
- Conversion can be performed by creating a new node for the target representation and passing 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)