def RunVectorFieldAnalysis(self, inputWLIO):
        import os, sys, vtk

        loadablePath = os.path.join(
            slicer.modules.plastimatch_slicer_bspline.path, ".." + os.sep + ".." + os.sep + "qt-loadable-modules"
        )
        if loadablePath not in sys.path:
            sys.path.append(loadablePath)
        import vtkSlicerPlastimatchPyModuleLogicPython

        reg = vtkSlicerPlastimatchPyModuleLogicPython.vtkSlicerPlastimatchPyModuleLogic()
        reg.SetMRMLScene(slicer.mrmlScene)

        print "running RunVectorFieldAnalysis"

        # Set input/output images
        reg.SetOutputVolumeID(inputWLIO.outputJacobianNode.GetID())
        reg.SetFixedImageID(inputWLIO.fixedImageNode.GetID())
        reg.SetVFImageID(inputWLIO.vfImageNode.GetID())

        print inputWLIO.vfImageNode.GetID()
        print inputWLIO.outputJacobianNode.GetID()
        print inputWLIO.fixedImageNode.GetID()

        # Run Vector Field statistics
        print "starting RunJacobian"
        reg.RunJacobian()
        print "control went past RunJacobian"

        # return min/max values to caller
        outputWLIO = PlmVectorFieldAnalysisWidgetLogicIO()
        outputWLIO.SetMinJacobian(reg.GetJacobianMinString())
        outputWLIO.SetMaxJacobian(reg.GetJacobianMaxString())

        # Done

        # outputVolume.SetAndObserveImageData(jacobian.GetOutput())
        # make the output volume appear in all the slice views
        # selectionNode = slicer.app.applicationLogic().GetSelectionNode()
        # selectionNode.SetReferenceActiveVolumeID(outputVolume.GetID())
        # slicer.app.applicationLogic().PropagateVolumeSelection(0)

        # return True

        return outputWLIO
Beispiel #2
0
    def RunVectorFieldAnalysis(self, inputWLIO):
        import os, sys, vtk
        loadablePath = os.path.join(
            slicer.modules.plastimatch_slicer_bspline.path,
            '..' + os.sep + '..' + os.sep + 'qt-loadable-modules')
        if loadablePath not in sys.path:
            sys.path.append(loadablePath)
        import vtkSlicerPlastimatchPyModuleLogicPython
        reg = vtkSlicerPlastimatchPyModuleLogicPython.vtkSlicerPlastimatchPyModuleLogic(
        )
        reg.SetMRMLScene(slicer.mrmlScene)

        print "running RunVectorFieldAnalysis"

        #Set input/output images
        reg.SetOutputVolumeID(inputWLIO.outputJacobianNode.GetID())
        reg.SetFixedImageID(inputWLIO.fixedImageNode.GetID())
        reg.SetVFImageID(inputWLIO.vfImageNode.GetID())

        print inputWLIO.vfImageNode.GetID()
        print inputWLIO.outputJacobianNode.GetID()
        print inputWLIO.fixedImageNode.GetID()

        # Run Vector Field statistics
        print "starting RunJacobian"
        reg.RunJacobian()
        print "control went past RunJacobian"

        # return min/max values to caller
        outputWLIO = PlmVectorFieldAnalysisWidgetLogicIO()
        outputWLIO.SetMinJacobian(reg.GetJacobianMinString())
        outputWLIO.SetMaxJacobian(reg.GetJacobianMaxString())

        # Done

        #outputVolume.SetAndObserveImageData(jacobian.GetOutput())
        # make the output volume appear in all the slice views
        #selectionNode = slicer.app.applicationLogic().GetSelectionNode()
        #selectionNode.SetReferenceActiveVolumeID(outputVolume.GetID())
        #slicer.app.applicationLogic().PropagateVolumeSelection(0)

        #return True

        return outputWLIO
Beispiel #3
0
    def RunMismatchError(self, WLIO):
        import os, sys, vtk, math
        loadablePath = os.path.join(
            slicer.modules.plastimatch_slicer_bspline.path,
            '..' + os.sep + '..' + os.sep + 'qt-loadable-modules')
        if loadablePath not in sys.path:
            sys.path.append(loadablePath)
        import vtkSlicerPlastimatchPyModuleLogicPython
        reg = vtkSlicerPlastimatchPyModuleLogicPython.vtkSlicerPlastimatchPyModuleLogic(
        )
        reg.SetMRMLScene(slicer.mrmlScene)

        print "running RunMismatchError"

        # Set landmarks from Slicer
        print "trying to SetFixed/MovingLandmarks"

        fixpoints = vtk.vtkPoints()
        movpoints = vtk.vtkPoints()
        point = [
            0,
        ] * 3

        fixFidNode = WLIO.FixedFiducialsNode  # it is a vtkMRMLMarkupsFiducialNode
        nfix = fixFidNode.GetNumberOfFiducials()
        print("found %s fiducials in fixed" % str(nfix))
        for n in range(nfix):
            fixFidNode.GetNthFiducialPosition(n, point)
            fixpoints.InsertNextPoint(point)
            #print("fix %s:" %  str(point))

        movFidNode = WLIO.MovingFiducialsNode  # it is a vtkMRMLMarkupsFiducialNode
        nmov = movFidNode.GetNumberOfFiducials()
        print("found %s fiducials in moving" % str(nmov))
        for n in range(nmov):
            movFidNode.GetNthFiducialPosition(n, point)
            movpoints.InsertNextPoint(point)
            #print("mov %s:" %  str(point))

        WidgetLogicIO = PlmMismatchErrorWidgetLogicIO(
        )  # this is for output to GUI widget

        p1 = [
            0,
        ] * 3
        p2 = [
            0,
        ] * 3
        counter = 0
        d1sum = 0
        d2sum = 0
        d3sum = 0
        for n in range(nfix):
            fixpoints.GetPoint(n, p1)
            movpoints.GetPoint(n, p2)
            d2 = (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (
                p1[1] - p2[1]) + (p1[2] - p2[2]) * (p1[2] - p2[2])
            d1 = math.sqrt(d2)
            d1sum += d1
            d2sum += d2
            counter += 1
            WidgetLogicIO.landm_distance.append(d1)
            #print (n, d1, d2, d1sum, d2sum)

        average = d1sum / counter

        for n in range(nfix):
            fixpoints.GetPoint(n, p1)
            movpoints.GetPoint(n, p2)
            d2 = (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (
                p1[1] - p2[1]) + (p1[2] - p2[2]) * (p1[2] - p2[2])
            d1 = math.sqrt(d2)
            d3 = (d1 - average) * (d1 - average)
            d3sum += d3
            counter += 1

        variance = d3sum / counter
        stdev = math.sqrt(variance)

        #reg.SetFixedLandmarks( fixpoints)
        #reg.SetMovingLandmarks(movpoints)
        #print "Done SetFixed/MovingLandmarks"
        # Run Mismatch Error
        #print "starting RunMismatchError"
        #reg.RunMismatchError()
        #print "control went past RunMismatchError"
        # Done

        # return error values to caller
        WidgetLogicIO.SetAverage(average)
        WidgetLogicIO.SetVariance(variance)
        WidgetLogicIO.SetStdev(stdev)
        #WidgetLogicIO.SetSeparation(reg.GetSeparationString())

        return WidgetLogicIO
  def RunMismatchError(self, WLIO):
    import os, sys, vtk, math
    loadablePath = os.path.join(slicer.modules.plastimatch_slicer_bspline.path,'..'+os.sep+'..'+os.sep+'qt-loadable-modules')
    if loadablePath not in sys.path:
      sys.path.append(loadablePath)
    import vtkSlicerPlastimatchPyModuleLogicPython
    reg = vtkSlicerPlastimatchPyModuleLogicPython.vtkSlicerPlastimatchPyModuleLogic()
    reg.SetMRMLScene(slicer.mrmlScene)

    print "running RunMismatchError"

    # Set landmarks from Slicer 
    print "trying to SetFixed/MovingLandmarks"

    fixpoints = vtk.vtkPoints()
    movpoints = vtk.vtkPoints()
    point = [0,]*3
 
    fixFidNode = WLIO.FixedFiducialsNode  # it is a vtkMRMLMarkupsFiducialNode 
    nfix = fixFidNode.GetNumberOfFiducials()
    print( "found %s fiducials in fixed" % str(nfix) )
    for n in range(nfix):
      fixFidNode.GetNthFiducialPosition(n, point)
      fixpoints.InsertNextPoint(point)
      #print("fix %s:" %  str(point))

    movFidNode = WLIO.MovingFiducialsNode  # it is a vtkMRMLMarkupsFiducialNode 
    nmov = movFidNode.GetNumberOfFiducials()
    print( "found %s fiducials in moving" % str(nmov) )
    for n in range(nmov):
      movFidNode.GetNthFiducialPosition(n, point)
      movpoints.InsertNextPoint(point)
      #print("mov %s:" %  str(point))

    WidgetLogicIO = PlmMismatchErrorWidgetLogicIO() # this is for output to GUI widget

    p1 = [0,]*3
    p2 = [0,]*3
    counter = 0
    d1sum = 0
    d2sum = 0
    d3sum = 0
    for n in range(nfix):
      fixpoints.GetPoint(n, p1)
      movpoints.GetPoint(n, p2)
      d2 = (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1]) + (p1[2]-p2[2])*(p1[2]-p2[2])
      d1 = math.sqrt(d2)
      d1sum += d1
      d2sum += d2
      counter += 1
      WidgetLogicIO.landm_distance.append(d1)
      #print (n, d1, d2, d1sum, d2sum)

    average = d1sum/counter

    for n in range(nfix):
      fixpoints.GetPoint(n, p1)
      movpoints.GetPoint(n, p2)
      d2 = (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1]) + (p1[2]-p2[2])*(p1[2]-p2[2])
      d1 = math.sqrt(d2)
      d3 = (d1 - average)*(d1 - average)
      d3sum += d3
      counter += 1    
 
    variance = d3sum/counter 
    stdev = math.sqrt(variance)

    #reg.SetFixedLandmarks( fixpoints)
    #reg.SetMovingLandmarks(movpoints)
    #print "Done SetFixed/MovingLandmarks"
    # Run Mismatch Error
    #print "starting RunMismatchError"
    #reg.RunMismatchError()
    #print "control went past RunMismatchError"
    # Done

    # return error values to caller
    WidgetLogicIO.SetAverage(average)
    WidgetLogicIO.SetVariance(variance)
    WidgetLogicIO.SetStdev(stdev)
    #WidgetLogicIO.SetSeparation(reg.GetSeparationString())
    
    return WidgetLogicIO