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
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
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