def run(input_fpath, output_fpath, input_node_name=None): assert _recent_opr_nodes == [] input_node = None if input_node_name is not None: input_node = getNode(input_node_name) if input_node is None: input_node = _load_volume(input_fpath, input_node_name) atlas_volume, atlas_mask = _get_atlas_nodes() output_volume_node = slicer.vtkMRMLScalarVolumeNode() output_mask_node = slicer.vtkMRMLScalarVolumeNode() output_volume_node.SetName('{}-output'.format(input_node.GetName())) output_mask_node.SetName('{}-mask'.format(input_node.GetName())) slicer.mrmlScene.AddNode(output_volume_node) slicer.mrmlScene.AddNode(output_mask_node) output_mask_node.LabelMapOn() params = { 'atlasMRIVolume': atlas_volume.GetID(), 'atlasMaskVolume': atlas_mask.GetID(), 'patientVolume': input_node.GetID(), 'patientOutputVolume': output_volume_node.GetID(), 'patientMaskLabel': output_mask_node.GetID() } cli_node = slicer.cli.run(slicer.modules.swissskullstripper, None, params, wait_for_completion=True) # cli_node.AddObserver('ModifiedEvent', _on_status_modified) _recent_opr_nodes[:] = [ input_node, output_volume_node, output_mask_node, output_fpath ] _on_finished()
def run(input_fpath, output_fpath, input_node_name=None): assert _recent_opr_nodes == [] input_node = None if input_node_name is not None: input_node = getNode(input_node_name) if input_node is None: input_node = _load_volume(input_fpath, input_node_name) atlas_volume, atlas_mask = _get_atlas_nodes() output_volume_node = slicer.vtkMRMLScalarVolumeNode() output_mask_node = slicer.vtkMRMLScalarVolumeNode() output_volume_node.SetName('{}-output'.format(input_node.GetName())) output_mask_node.SetName('{}-mask'.format(input_node.GetName())) slicer.mrmlScene.AddNode(output_volume_node) slicer.mrmlScene.AddNode(output_mask_node) output_mask_node.LabelMapOn() params = { 'atlasMRIVolume': atlas_volume.GetID(), 'atlasMaskVolume': atlas_mask.GetID(), 'patientVolume': input_node.GetID(), 'patientOutputVolume': output_volume_node.GetID(), 'patientMaskLabel': output_mask_node.GetID() } cli_node = slicer.cli.run(slicer.modules.swissskullstripper, None, params, wait_for_completion=True) # cli_node.AddObserver('ModifiedEvent', _on_status_modified) _recent_opr_nodes[:] = [ input_node, output_volume_node, output_mask_node, output_fpath] _on_finished()
def run(input_fpath, output_fpath, input_node_name=None): assert _recent_opr_nodes == [] input_node = None if input_node_name is not None: input_node = getNode(input_node_name) if input_node is None: input_node = _load_volume(input_fpath, input_node_name) slicer.util.saveNode(input_node, output_fpath + '.nii.gz')
def calculateNeedleToCoronalAngle( self): #calculates angle between needle and coronal plane needleModelToNeedleTipNode = getNode('NeedleModelToNeedleTip') needleToRas = vtk.vtkMatrix4x4() needleModelToNeedleTipNode.GetMatrixTransformToWorld(needleToRas) directionVector = numpy.dot(self.arrayFromVtkMatrix(needleToRas), numpy.array([0, 0, 1, 0])) coronalPlane = numpy.array([0, 1, 0, 0]) self.calculateAngle(directionVector, coronalPlane)
def _get_atlas_nodes(volume_name='atlasImage', mask_name='atlasMask', volume_path='data/atlasImage.mha', mask_path='data/atlasMask.mha'): volume_node = getNode(volume_name) mask_node = getNode(mask_name) if volume_node is not None and mask_node is not None: return volume_node, mask_node fname = __file__ if fname.endswith('.pyc'): fname = fname[:-1] basedir = os.path.dirname(os.path.realpath(fname)) p = lambda v: os.path.join(basedir, v) if volume_node is None: volume_node = _load_volume(p(volume_path), volume_name) if mask_node is None: mask_node = _load_volume(p(mask_path), mask_name) mask_node.LabelMapOn() return volume_node, mask_node
def loadRecordingSequences(self, recordingFile): logging.debug("loading \'recording\' sequences") recordingFileBaseName = os.path.splitext( os.path.basename(recordingFile))[0] slicer.app.coreIOManager().loadNodes('Sequence Metafile', {'fileName': recordingFile}) self.recordingData_browserNode = slicer.mrmlScene.GetFirstNodeByName( recordingFileBaseName) self.recordingData_trackerToReferenceNode = self.initializeLinearTransformNode( recordingFileBaseName + "-TrackerToReference") self.recordingData_needleToTrackerNode = self.initializeLinearTransformNode( recordingFileBaseName + "-NeedleToTracker") self.recordingData_cauteryToTrackerNode = self.initializeLinearTransformNode( recordingFileBaseName + "-CauteryToTracker") self.probeToTrackerNode = self.initializeLinearTransformNode( recordingFileBaseName + "-ProbeToTracker") self.imageToTransducerNode = self.initializeLinearTransformNode( recordingFileBaseName + "-ImageToTransducer") self.imageNode = getNode(recordingFileBaseName + "-Image") self.trackerToReferenceNode = self.recordingData_trackerToReferenceNode self.cauteryToTrackerNode = self.recordingData_cauteryToTrackerNode self.needleToTrackerNode = self.recordingData_needleToTrackerNode self.setupResliceDriver()
def showUltrasound(self, volumeNode): resliceLogic = modules.volumereslicedriver.logic() if resliceLogic == None: logging.error( "Volume reslice driver module not found! Install SlicerIGT extension." ) return redNode = getNode('vtkMRMLSliceNodeRed') resliceLogic.SetDriverForSlice(volumeNode.GetID(), redNode) resliceLogic.SetModeForSlice(6, redNode) # Transverse mode resliceLogic.SetFlipForSlice(False, redNode) resliceLogic.SetRotationForSlice(180, redNode) redSliceLogic = self.layoutManager.sliceWidget('Red').sliceLogic() redSliceLogic.GetSliceCompositeNode().SetBackgroundVolumeID( volumeNode.GetID()) redSliceLogic.FitSliceToAll() # Show red slice in 3D viewer sliceWidget = app.layoutManager().sliceWidget('Red') sliceLogic = sliceWidget.sliceLogic() sliceNode = sliceLogic.GetSliceNode() sliceNode.SetSliceVisible(True)
def setTransforms(self): #Run the actual algorithm logging.info('Setting up data for evaluation') # Get all nodes of models and transforms trackerToReferenceNode = getNode('*TrackerToReferenceTransform [*') probeToTrackerNode = getNode('*ProbeToTrackerTransform [*') needleToTrackerNode = getNode('*NeedleToTrackerTransform [*') imageToTransducerNode = getNode('*ImageToTransducerTransform [*') imageNode = getNode('*Image [*') referenceToRasNode = getNode('ReferenceToRas') transducerToProbeNode = getNode('TransducerToProbe') tumorModelNode = getNode('TumorModel') needleModelToNeedleTipNode = getNode('NeedleModelToNeedleTip') needleTipToNeedleNode = getNode('NeedleTipToNeedle') # Create needle model needleModelNode = modules.createmodels.logic().CreateNeedle( 80, 1.0, 2.5, 0) needleModelNode.GetDisplayNode().SetColor(0, 1, 1) needleModelNode.SetName("NeedleModel") needleModelNode.GetDisplayNode().SliceIntersectionVisibilityOn() # Set image to RAS hierarchy imageNode.SetAndObserveTransformNodeID(imageToTransducerNode.GetID()) imageToTransducerNode.SetAndObserveTransformNodeID( transducerToProbeNode.GetID()) transducerToProbeNode.SetAndObserveTransformNodeID( probeToTrackerNode.GetID()) probeToTrackerNode.SetAndObserveTransformNodeID( trackerToReferenceNode.GetID()) trackerToReferenceNode.SetAndObserveTransformNodeID( referenceToRasNode.GetID()) # Set needle and tumor to RAS hierarchy needleModelToNeedleTipNode.SetAndObserveTransformNodeID( needleTipToNeedleNode.GetID()) needleModelNode.SetAndObserveTransformNodeID( needleModelToNeedleTipNode.GetID()) needleToTrackerNode.SetAndObserveTransformNodeID( trackerToReferenceNode.GetID()) needleTipToNeedleNode.SetAndObserveTransformNodeID( needleToTrackerNode.GetID()) tumorModelNode.SetAndObserveTransformNodeID( needleToTrackerNode.GetID()) needleModelNode.GetDisplayNode().SetColor(0, 1, 1) needleModelNode.GetDisplayNode().SetSliceIntersectionVisibility(1) tumorModelNode.GetDisplayNode().SetColor(0, 1, 0) tumorModelNode.GetDisplayNode().SetOpacity(0.5) tumorModelNode.GetDisplayNode().SetSliceIntersectionVisibility(1) # Center 3D view layoutManager = app.layoutManager() threeDWidget = layoutManager.threeDWidget(0) threeDView = threeDWidget.threeDView() threeDView.resetFocalPoint() self.showUltrasound(imageNode) logging.info('Set up complete, data ready for evaluation') return True