1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import slicer
- import cardiacSPECT
- #must have SlicerElastix extension installed
- import Elastix
- import slicerNetwork
- import os
- mirID='2SBMIR'
- obrID='2SMobr'
- configFile=os.path.join(os.path.expanduser('~'),'.cardiacSPECT','register.json')
- dataManager=cardiacSPECT.cardiacSPECTLogic(configFile)
- network=slicerNetwork.labkeyURIHandler()
- #parseConfig if a different location than default is chosen
- #network.parseConfig(remote.json)
- #network.initRemote()
- dataManager.setURIHandler(network)
- dataManager.loadPatient(mirID)
- dataManager.loadPatient(obrID)
- elastix=Elastix.ElastixLogic()
- registrationIndex=12
- """
- index 12 corresponds to:
- ['par0015', '3D CT, monomodal', 'lung',
- 'intrapatient; B-spline transformation; several similarity metrics',
- 'Staring (2013), Towards Local Progression Estimation of Pulmonary Emphysema using CT',
- ['Parameters.Par0015.expA.patient.NC.affine.txt', 'Parameters.Par0015.expA.patient.NC.bspline.txt']]
- """
- RegistrationPresets_ParameterFilenames=5
- parameterFilenames = elastix.getRegistrationPresets()[registrationIndex][RegistrationPresets_ParameterFilenames]
- fixedVolumeNode=slicer.util.getFirstNodeByName(mirID+'CT')
- movingVolumeNode=slicer.util.getFirstNodeByName(obrID+'CT')
- transformNodeName=obrID+'_DF'
- transformNodeFile=outPath=os.path.join(os.path.expanduser('~'),'temp',transformNodeName+'.h5')
- ok, transformNode= slicer.util.loadTransform(transformNodeFile,returnNode=True)
- if not ok:
- transformNode=slicer.vtkMRMLTransformNode()
- transformNode.SetName(transformNodeName) # a bspline transform node
- slicer.mrmlScene.AddNode(transformNode)
- elastix.registerVolumes(fixedVolumeNode, movingVolumeNode,
- parameterFilenames = parameterFilenames,
- outputVolumeNode = None,
- outputTransformNode = transformNode,
- fixedVolumeMaskNode = None,
- movingVolumeMaskNode = None,
- #recent elastix version
- forceDisplacementFieldOutputTransform = 1)
- slicer.util.saveNode(transformNode,transformNodeFile)
- #already a grid transform node
- #gridTransformNode=slicer.modules.transforms.logic().ConvertToGridTransform(transformNode, fixedVolumeNode)
- dataManager.applyTransform(obrID,mirID,0,19)
- dataManager.storeVolumeNodes(obrID,0,19)
- dataManager.storeVolumeNodes(mirID,0,19)
- dataManager.storeTransformation(obrID)
- quit()
|