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()
Ejemplo n.º 3
0
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')
Ejemplo n.º 4
0
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')
Ejemplo n.º 5
0
 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 _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
Ejemplo n.º 8
0
 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()
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
    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