**Hi, I want to register all my CTP images to MNI space using General Reg. (Elastix). But I have over thousands images and don’t want to do all the images manually. Can I write a python code to register all my images using a loop. **
Previously I did the same for skull stripping using the following code:
def skull_stripping():
import vtkITK
#masterVolumeNode = slicer.util.loadVolume(‘E:/asdgdrhss/8 CTA_1_0__H20f_5.nrrd’)
for _ in range (1200):
masterVolumeNode = slicer.mrmlScene.GetFirstNodeByClass(“vtkMRMLScalarVolumeNode”)
threshold = 500
split_cavities = 30
thresholdCalculator = vtkITK.vtkITKImageThresholdCalculator()
thresholdCalculator.SetInputData(masterVolumeNode.GetImageData())
thresholdCalculator.SetMethodToOtsu()
thresholdCalculator.Update()
boneThresholdValue = thresholdCalculator.GetThreshold()
volumeScalarRange = masterVolumeNode.GetImageData().GetScalarRange()
logging.info("Volume minimum = {0}, maximum = {1}, bone threshold = {2}".format(volumeScalarRange[0], volumeScalarRange[1], boneThresholdValue))
slicer.app.processEvents()
# Create segmentation
slicer.app.processEvents()
segmentationNode = slicer.vtkMRMLSegmentationNode()
slicer.mrmlScene.AddNode(segmentationNode)
segmentationNode.CreateDefaultDisplayNodes() # only needed for display
segmentationNode.SetReferenceImageGeometryParameterFromVolumeNode(masterVolumeNode)
# Create segment editor to get access to effects
slicer.app.processEvents()
segmentEditorWidget = slicer.qMRMLSegmentEditorWidget()
# To show segment editor widget (useful for debugging): segmentEditorWidget.show()
segmentEditorWidget.setMRMLScene(slicer.mrmlScene)
if not segmentEditorWidget.effectByName("Wrap Solidify"):
slicer.util.errorDisplay("Please install 'SurfaceWrapSolidify' extension using Extension Manager.")
segmentEditorNode = slicer.vtkMRMLSegmentEditorNode()
slicer.mrmlScene.AddNode(segmentEditorNode)
segmentEditorWidget.setMRMLSegmentEditorNode(segmentEditorNode)
segmentEditorWidget.setSegmentationNode(segmentationNode)
segmentEditorWidget.setMasterVolumeNode(masterVolumeNode)
# Create bone segment by thresholding
slicer.app.processEvents()
boneSegmentID = segmentationNode.GetSegmentation().AddEmptySegment("bone")
segmentEditorNode.SetSelectedSegmentID(boneSegmentID)
segmentEditorWidget.setActiveEffectByName("Threshold")
effect = segmentEditorWidget.activeEffect()
effect.setParameter("MinimumThreshold",str(threshold))#change if needed
effect.setParameter("MaximumThreshold",str(volumeScalarRange[1]))
effect.self().onApply()
# Find largest object, remove all other regions from the segment
slicer.app.processEvents()
segmentEditorWidget.setActiveEffectByName("Islands")
effect = segmentEditorWidget.activeEffect()
effect.setParameterDefault("Operation", "KEEP_LARGEST_ISLAND")
effect.self().onApply()
# Create Margin
# slicer.app.processEvents()
# segmentEditorWidget.setActiveEffectByName("Margin")
# effect = segmentEditorWidget.activeEffect()
# effect.setParameterDefault("Operation", "Grow")
# effect.setParameter('Margin_Size', 1)
# effect.self().onApply()
# Fill holes in the segment to create a solid region of interest
slicer.app.processEvents()
segmentEditorWidget.setActiveEffectByName("Wrap Solidify")
effect = segmentEditorWidget.activeEffect()
effect.setParameter("region", "largestCavity")
effect.setParameter("splitCavities", str(split_cavities))
effect.setParameter("outputType", "segment")
#effect.setParameter("smoothingFactor", 0.2) # speed up solidification by lowering resolution
#effect.setParameter("remeshOversampling", 1.5) # speed up solidification by lowering resolution
#effect.setParameter("numberOfIterations", 6) # speed up solidification by lowering resolution
effect.self().onApply()
# Blank out the volume outside the object segment
slicer.app.processEvents()
segmentEditorWidget.setActiveEffectByName('Mask volume')
effect = segmentEditorWidget.activeEffect()
effect.setParameter('FillValue', -1000)
effect.setParameter('Operation', 'FILL_OUTSIDE')
effect.self().onApply()
# Remove temporary nodes and widget
segmentEditorWidget = None
slicer.mrmlScene.RemoveNode(segmentEditorNode)
slicer.mrmlScene.RemoveNode(segmentationNode)
slicer.mrmlScene.RemoveNode(masterVolumeNode)
# Show masked volume
maskedVolume = slicer.mrmlScene.GetFirstNodeByName(masterVolumeNode.GetName()+" masked")
slicer.util.setSliceViewerLayers(background=maskedVolume)
shortcuts = [(“s”, lambda: skull_stripping())]
for (shortcutKey, callback) in shortcuts:
shortcut = qt.QShortcut(slicer.util.mainWindow())
shortcut.setKey(qt.QKeySequence(shortcutKey))
shortcut.connect( “activated()”, callback)
I need some help with the code for doing the same thing for registration.