Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
This example demonstrates how to run Grow from seeds effect in batch mode (without GUI, using qMRMLSegmentEditorWidget) using 3D Slicer
# Generate input data
################################################
import SampleData
# Load master volume
sampleDataLogic = SampleData.SampleDataLogic()
masterVolumeNode = sampleDataLogic.downloadMRBrainTumor1()
# Create segmentation
segmentationNode = slicer.vtkMRMLSegmentationNode()
slicer.mrmlScene.AddNode(segmentationNode)
segmentationNode.CreateDefaultDisplayNodes() # only needed for display
segmentationNode.SetReferenceImageGeometryParameterFromVolumeNode(masterVolumeNode)
# Create seed segment inside tumor
tumorSeed = vtk.vtkSphereSource()
tumorSeed.SetCenter(-6, 30, 28)
tumorSeed.SetRadius(10)
tumorSeed.Update()
segmentationNode.AddSegmentFromClosedSurfaceRepresentation(tumorSeed.GetOutput(), "Tumor", [1.0,0.0,0.0])
# Create seed segment outside tumor
backgroundSeedPositions = [[0,65,32], [1, -14, 30], [0, 28, -7], [0,30,64], [31, 33, 27], [-42, 30, 27]]
append = vtk.vtkAppendPolyData()
for backgroundSeedPosition in backgroundSeedPositions:
backgroundSeed = vtk.vtkSphereSource()
backgroundSeed.SetCenter(backgroundSeedPosition)
backgroundSeed.SetRadius(10)
backgroundSeed.Update()
append.AddInputData(backgroundSeed.GetOutput())
append.Update()
backgroundSegmentId = segmentationNode.AddSegmentFromClosedSurfaceRepresentation(append.GetOutput(), "Background", [0.0,1.0,0.0])
# Run filter
################################################
# Create segment editor to get access to effects
segmentEditorWidget = slicer.qMRMLSegmentEditorWidget()
# To show segment editor widget (useful for debugging): segmentEditorWidget.show()
segmentEditorWidget.setMRMLScene(slicer.mrmlScene)
segmentEditorNode = slicer.vtkMRMLSegmentEditorNode()
slicer.mrmlScene.AddNode(segmentEditorNode)
segmentEditorWidget.setMRMLSegmentEditorNode(segmentEditorNode)
segmentEditorWidget.setSegmentationNode(segmentationNode)
segmentEditorWidget.setMasterVolumeNode(masterVolumeNode)
# Run segmentation
segmentEditorWidget.setActiveEffectByName("Grow from seeds")
effect = segmentEditorWidget.activeEffect()
# You can change parameters by calling: effect.setParameter("MyParameterName", someValue)
# Most effect don't have onPreview, you can just call onApply
effect.self().onPreview()
effect.self().onApply()
# Clean up and show results
################################################
# Clean up
slicer.mrmlScene.RemoveNode(segmentEditorNode)
# Make segmentation results nicely visible in 3D
segmentationDisplayNode = segmentationNode.GetDisplayNode()
segmentationDisplayNode.SetSegmentVisibility(backgroundSegmentId, False)
@kbehlmirusmed
Copy link

kbehlmirusmed commented Jul 2, 2020

To run a file like this, would you download it to a text editor and run the code from the text editor itself or through the 3D slicer module? If the latter, do you ever encounter issues where the display disappears with the reload and test?

@lassoan
Copy link
Author

lassoan commented Jul 12, 2020

This is a code snippet, not a module, so you cannot load it as a module (it has not GUI, so if you replace a module with this script then the previous module GUI will disappear and nothing will be displayed instead).

The quickest is to copy-paste the code from here to Slicer's Python console. If you want to edit/rerun it with different parameters then I would recommend to use Jupyter notebooks with Slicer chosen as kernel.

@Lhomer
Copy link

Lhomer commented Jun 29, 2021

Thanks for making this, would there be a way to manually paint the seeds and then run the script using the painted seeds?

@lassoan
Copy link
Author

lassoan commented Jun 29, 2021

Yes, of course. You can then simply use Segment Editor module in 3D Slicer and the "Grow from seeds" effect. See a simple example here: https://youtu.be/cybL5A0w3hw

@DrMohamedAssadawy
Copy link

DrMohamedAssadawy commented Mar 28, 2022

what are the best segmentation methods of maxillary bone?

@lassoan
Copy link
Author

lassoan commented Mar 28, 2022

@DrMohamedAssadawy please post this question on the Slicer Forum.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment