示例#1
0
    def ExecuteGeodesic(self, origInVolumeNode, inVolumeNode,
                        numberOfIterations, propagationScaling,
                        curvatureScaling, advectionScaling,
                        calculateFeatureImage):

        self._helper.debug("Starting execution of Geodesic..")

        if not inVolumeNode or not origInVolumeNode:
            slicer.Application.ErrorMessage(
                "Not enough information!!! Aborting Geodesic..\n")
            return
        else:

            cast = slicer.vtkImageCast()
            cast.SetInput(origInVolumeNode.GetImageData())
            cast.SetOutputScalarTypeToFloat()
            cast.Update()

            origImage = cast.GetOutput()
            image = inVolumeNode.GetImageData()

            levelSets = slicer.vtkvmtkGeodesicActiveContourLevelSetImageFilter(
            )
            if calculateFeatureImage == 1:
                levelSets.SetFeatureImage(
                    self.BuildGradientBasedFeatureImage(origImage))
            else:
                levelSets.SetFeatureImage(origImage)
            levelSets.SetDerivativeSigma(self.FeatureDerivativeSigma)
            levelSets.SetAutoGenerateSpeedAdvection(1)
            levelSets.SetPropagationScaling(propagationScaling)
            levelSets.SetCurvatureScaling(curvatureScaling)
            levelSets.SetAdvectionScaling(advectionScaling)

            levelSets.SetInput(image)
            levelSets.SetNumberOfIterations(numberOfIterations)
            levelSets.SetIsoSurfaceValue(self.IsoSurfaceValue)
            levelSets.SetMaximumRMSError(self.MaximumRMSError)
            levelSets.SetInterpolateSurfaceLocation(1)
            levelSets.SetUseImageSpacing(1)
            levelSets.Update()

            matrix = slicer.vtkMatrix4x4()
            inVolumeNode.GetIJKToRASMatrix(matrix)

            outVolumeData = slicer.vtkImageData()
            outVolumeData.DeepCopy(levelSets.GetOutput())
            outVolumeData.Update()

            outVolumeNode = slicer.vtkMRMLScalarVolumeNode()
            outVolumeNode.SetAndObserveImageData(outVolumeData)
            outVolumeNode.SetIJKToRASMatrix(matrix)

            outputContainer = SlicerVMTKLevelSetContainer(outVolumeNode, 0.0)

            return outputContainer
    def ExecuteGeodesic(self,origInVolumeNode,inVolumeNode,numberOfIterations,propagationScaling,curvatureScaling,advectionScaling,calculateFeatureImage):

        self._helper.debug("Starting execution of Geodesic..")

        if not inVolumeNode or not origInVolumeNode:
            slicer.Application.ErrorMessage("Not enough information!!! Aborting Geodesic..\n")
            return
        else:

            cast = slicer.vtkImageCast()
            cast.SetInput(origInVolumeNode.GetImageData())
            cast.SetOutputScalarTypeToFloat()
            cast.Update()

            origImage = cast.GetOutput()
            image = inVolumeNode.GetImageData()

            levelSets = slicer.vtkvmtkGeodesicActiveContourLevelSetImageFilter()
            if calculateFeatureImage==1:
                levelSets.SetFeatureImage(self.BuildGradientBasedFeatureImage(origImage))
            else:
                levelSets.SetFeatureImage(origImage)
            levelSets.SetDerivativeSigma(self.FeatureDerivativeSigma)
            levelSets.SetAutoGenerateSpeedAdvection(1)
            levelSets.SetPropagationScaling(propagationScaling)
            levelSets.SetCurvatureScaling(curvatureScaling)
            levelSets.SetAdvectionScaling(advectionScaling)


            levelSets.SetInput(image)
            levelSets.SetNumberOfIterations(numberOfIterations)
            levelSets.SetIsoSurfaceValue(self.IsoSurfaceValue)
            levelSets.SetMaximumRMSError(self.MaximumRMSError)
            levelSets.SetInterpolateSurfaceLocation(1)
            levelSets.SetUseImageSpacing(1)
            levelSets.Update()


            matrix = slicer.vtkMatrix4x4()
            inVolumeNode.GetIJKToRASMatrix(matrix)

            outVolumeData = slicer.vtkImageData()
            outVolumeData.DeepCopy(levelSets.GetOutput())
            outVolumeData.Update()

            outVolumeNode = slicer.vtkMRMLScalarVolumeNode()
            outVolumeNode.SetAndObserveImageData(outVolumeData)
            outVolumeNode.SetIJKToRASMatrix(matrix)

            outputContainer = SlicerVMTKLevelSetContainer(outVolumeNode,0.0)

            return outputContainer
    def ExecuteGAC(self, origImage, segmentationImage, numberOfIterations,
                   propagationScaling, curvatureScaling, advectionScaling,
                   method):

        self._parentClass.GetHelper().debug("Starting GAC..")

        calculateFeatureImage = 1

        cast = slicer.vtkImageCast()
        cast.SetInput(origImage)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()

        if method == 'curves':
            levelSets = slicer.vtkvmtkCurvesLevelSetImageFilter()
        else:
            levelSets = slicer.vtkvmtkGeodesicActiveContourLevelSetImageFilter(
            )

        if calculateFeatureImage == 1:
            levelSets.SetFeatureImage(
                self.BuildGradientBasedFeatureImage(origImage))
        else:
            levelSets.SetFeatureImage(origImage)
        levelSets.SetDerivativeSigma(self._featureDerivativeSigma)
        levelSets.SetAutoGenerateSpeedAdvection(1)
        levelSets.SetPropagationScaling(propagationScaling)
        levelSets.SetCurvatureScaling(curvatureScaling)
        levelSets.SetAdvectionScaling(advectionScaling)
        levelSets.SetInput(segmentationImage)
        levelSets.SetNumberOfIterations(numberOfIterations)
        levelSets.SetIsoSurfaceValue(self._isoSurfaceValue)
        levelSets.SetMaximumRMSError(self._maximumRMSError)
        levelSets.SetInterpolateSurfaceLocation(1)
        levelSets.SetUseImageSpacing(1)
        levelSets.Update()

        outVolumeData = slicer.vtkImageData()
        outVolumeData.DeepCopy(levelSets.GetOutput())
        outVolumeData.Update()

        self._parentClass.GetHelper().debug("End of GAC..")

        return outVolumeData
    def ExecuteGAC(self,origImage,segmentationImage,numberOfIterations,propagationScaling,curvatureScaling,advectionScaling,method):

        self._parentClass.GetHelper().debug("Starting GAC..")

        calculateFeatureImage = 1

        cast = slicer.vtkImageCast()
        cast.SetInput(origImage)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()

        if method=='curves':
            levelSets = slicer.vtkvmtkCurvesLevelSetImageFilter()
        else:
            levelSets = slicer.vtkvmtkGeodesicActiveContourLevelSetImageFilter()

        if calculateFeatureImage==1:
            levelSets.SetFeatureImage(self.BuildGradientBasedFeatureImage(origImage))
        else:
            levelSets.SetFeatureImage(origImage)
        levelSets.SetDerivativeSigma(self._featureDerivativeSigma)
        levelSets.SetAutoGenerateSpeedAdvection(1)
        levelSets.SetPropagationScaling(propagationScaling)
        levelSets.SetCurvatureScaling(curvatureScaling)
        levelSets.SetAdvectionScaling(advectionScaling)
        levelSets.SetInput(segmentationImage)
        levelSets.SetNumberOfIterations(numberOfIterations)
        levelSets.SetIsoSurfaceValue(self._isoSurfaceValue)
        levelSets.SetMaximumRMSError(self._maximumRMSError)
        levelSets.SetInterpolateSurfaceLocation(1)
        levelSets.SetUseImageSpacing(1)
        levelSets.Update()

        outVolumeData = slicer.vtkImageData()
        outVolumeData.DeepCopy(levelSets.GetOutput())
        outVolumeData.Update()

        self._parentClass.GetHelper().debug("End of GAC..")

        return outVolumeData