Last active
May 6, 2023 15:08
-
-
Save lassoan/2d5a5b73645f65a5eb6f8d5f97abf31b to your computer and use it in GitHub Desktop.
This example demonstrates how to run Grow from seeds effect in batch mode (without GUI, using qMRMLSegmentEditorWidget) using 3D Slicer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Generate input data | |
################################################ | |
import SampleData | |
# Load master volume | |
sampleDataLogic = SampleData.SampleDataLogic() | |
masterVolumeNode = sampleDataLogic.downloadMRBrainTumor1() | |
# Create segmentation | |
segmentationNode = slicer.mrmlScene.AddNewNodeByClass("vtkMRMLSegmentationNode") | |
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.mrmlScene.AddNewNodeByClass("vtkMRMLSegmentEditorNode") | |
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) |
When I run this code using my own CT data, there is an error as follows. How can I solve it?
File "qt-scripted-modules\SegmentEditorEffects\AbstractScriptedSegmentEditorAutoCompleteEffect.py", line 301, in onApply
previewContainsClosedSurfaceRepresentation = previewNode.GetSegmentation().ContainsRepresentation(
AttributeError: 'NoneType' object has no attribute 'GetSegmentation'
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@DrMohamedAssadawy please post this question on the Slicer Forum.