def Execute(self):
          
        if self.Image == None:
            self.PrintError('Error: no Image.')

        cast = vtk.vtkImageCast()
        cast.SetInput(self.Image)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()
        self.Image = cast.GetOutput()

        if not self.vmtkRenderer:
            self.vmtkRenderer = vmtkscripts.vmtkRenderer()
            self.vmtkRenderer.Initialize()
            self.OwnRenderer = 1
 
        if not self.ImageSeeder: 
            self.ImageSeeder = vmtkscripts.vmtkImageSeeder()
            self.ImageSeeder.vmtkRenderer = self.vmtkRenderer
            self.ImageSeeder.Image = self.Image
            self.ImageSeeder.Display = 0
            self.ImageSeeder.Execute()
            self.ImageSeeder.Display = 1
            self.ImageSeeder.BuildView()
  
        if not self.SurfaceViewer:
            self.SurfaceViewer = vmtkscripts.vmtkSurfaceViewer()
            self.SurfaceViewer.vmtkRenderer = self.vmtkRenderer
  
        initializationMethods = {
                                '0': self.CollidingFrontsInitialize,
                                '1': self.FastMarchingInitialize,
                                '2': self.ThresholdInitialize,
                                '3': self.IsosurfaceInitialize,
                                '4': self.SeedInitialize
                                }
  
        endInitialization = False
        while not endInitialization:
            queryString = 'Please choose initialization type: (0: colliding fronts; 1: fast marching; 2: threshold; 3: isosurface, 4: seed): '
            initializationType = self.InputText(queryString,self.InitializationTypeValidator)
            initializationMethods[initializationType]()
            self.DisplayLevelSetSurface(self.InitialLevelSets)
            queryString = 'Accept initialization? (y/n): '
            inputString = self.InputText(queryString,self.YesNoValidator)
            if inputString == 'y':
                self.MergeLevelSets()
                self.DisplayLevelSetSurface(self.MergedInitialLevelSets)
            queryString = 'Initialize another branch? (y/n): '
            inputString = self.InputText(queryString,self.YesNoValidator)
            if inputString == 'y':
                endInitialization = False
            elif inputString == 'n':
                endInitialization = True

        self.InitialLevelSets = self.MergedInitialLevelSets
        self.MergedInitialLevelSets = None

        if self.OwnRenderer:
            self.vmtkRenderer.Deallocate()
    def Execute(self):    
        if self.Image == None:
            self.PrintError('Error: no Image.')

        cast = vtk.vtkImageCast()
        cast.SetInputData(self.Image)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()
        self.Image = cast.GetOutput()

        if self.NegateImage:
            scalarRange = self.Image.GetScalarRange()
            negate = vtk.vtkImageMathematics()
            negate.SetInputData(self.Image)
            negate.SetOperationToMultiplyByK()
            negate.SetConstantK(-1.0)
            negate.Update()
            shiftScale = vtk.vtkImageShiftScale()
            shiftScale.SetInputConnection(negate.GetOutputPort())
            shiftScale.SetShift(scalarRange[1]+scalarRange[0])
            shiftScale.SetOutputScalarTypeToFloat()
            shiftScale.Update()
            self.Image = shiftScale.GetOutput()

        if self.Interactive:
            if not self.vmtkRenderer:
                self.vmtkRenderer = vmtkscripts.vmtkRenderer()
                self.vmtkRenderer.Initialize()
                self.OwnRenderer = 1

            self.vmtkRenderer.RegisterScript(self) 
 
            if not self.ImageSeeder: 
                self.ImageSeeder = vmtkscripts.vmtkImageSeeder()
                self.ImageSeeder.vmtkRenderer = self.vmtkRenderer
                self.ImageSeeder.Image = self.Image
                self.ImageSeeder.Display = 0
                self.ImageSeeder.Execute()
                ##self.ImageSeeder.Display = 1
                self.ImageSeeder.BuildView()
  
            if not self.SurfaceViewer:
                self.SurfaceViewer = vmtkscripts.vmtkSurfaceViewer()
                self.SurfaceViewer.vmtkRenderer = self.vmtkRenderer
  
            initializationMethods = {
                                '0': self.CollidingFrontsInitialize,
                                '1': self.FastMarchingInitialize,
                                '2': self.ThresholdInitialize,
                                '3': self.IsosurfaceInitialize,
                                '4': self.SeedInitialize
                                }
  
            endInitialization = False
            while not endInitialization:
                queryString = 'Please choose initialization type: \n 0: colliding fronts;\n 1: fast marching;\n 2: threshold;\n 3: isosurface;\n 4: seed\n '
                initializationType = self.InputText(queryString,self.InitializationTypeValidator)
                initializationMethods[initializationType]()
                self.DisplayLevelSetSurface(self.InitialLevelSets)
                queryString = 'Accept initialization? (y/n): '
                inputString = self.InputText(queryString,self.YesNoValidator)
                if inputString == 'y':
                    self.MergeLevelSets()
                    self.DisplayLevelSetSurface(self.MergedInitialLevelSets)
                queryString = 'Initialize another branch? (y/n): '
                inputString = self.InputText(queryString,self.YesNoValidator)
                if inputString == 'y':
                    endInitialization = False
                elif inputString == 'n':
                    endInitialization = True

            self.InitialLevelSets = self.MergedInitialLevelSets
            self.MergedInitialLevelSets = None

        else:
            if self.Method == "collidingfronts":
                self.CollidingFrontsInitialize()
            elif self.Method == "fastmarching":
                self.FastMarchingInitialize()
            elif self.Method == "threshold":
                self.ThresholdInitialize()
            elif self.Method == "isosurface":
                self.IsosurfaceInitialize()
            elif self.Method == "seeds":
                self.SeedInitialize()

        if self.OwnRenderer:
            self.vmtkRenderer.Deallocate()
    def Execute(self): 
        if self.Image == None:
            self.PrintError('Error: no Image.')

        cast = vtk.vtkImageCast()
        cast.SetInputData(self.Image)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()
        self.Image = cast.GetOutput()

        if not self.InitializationImage:
            self.InitializationImage = self.Image

        if not self.FeatureImage:
            if self.LevelSetsType in ["geodesic", "curves"]:
                imageFeatures = vmtkscripts.vmtkImageFeatures()
                imageFeatures.Image = self.Image
                imageFeatures.FeatureImageType = self.FeatureImageType
                imageFeatures.SigmoidRemapping = self.SigmoidRemapping
                imageFeatures.DerivativeSigma = self.FeatureDerivativeSigma
                imageFeatures.UpwindFactor = self.UpwindFactor
                imageFeatures.FWHMRadius = self.FWHMRadius
                imageFeatures.FWHMBackgroundValue = self.FWHMBackgroundValue
                imageFeatures.Execute()
                self.FeatureImage = imageFeatures.FeatureImage
            elif self.LevelSetsType in ["threshold", "laplacian"]:
                self.FeatureImage = self.Image
            else:
                self.PrintError('Unsupported LevelSetsType')

        if self.NumberOfIterations != 0:
            self.LevelSetsInput = self.InitialLevelSets
            self.LevelSetEvolution()
            self.MergeLevelSet()
            return

        if not self.vmtkRenderer:
            self.vmtkRenderer = vmtkscripts.vmtkRenderer()
            self.vmtkRenderer.Initialize()
            self.OwnRenderer = 1
 
        self.vmtkRenderer.RegisterScript(self)  

        self.ImageSeeder = vmtkscripts.vmtkImageSeeder()
        self.ImageSeeder.vmtkRenderer = self.vmtkRenderer
        #self.ImageSeeder.Image = self.Image
        self.ImageSeeder.Image = self.InitializationImage
        self.ImageSeeder.Display = 0
        self.ImageSeeder.Execute()
        ##self.ImageSeeder.Display = 1
        self.ImageSeeder.BuildView()
 
        self.SurfaceViewer = vmtkscripts.vmtkSurfaceViewer()
        self.SurfaceViewer.vmtkRenderer = self.vmtkRenderer
  
        if self.LevelSets != None:
            self.DisplayLevelSetSurface(self.LevelSets,0.0)
  
        self.vmtkImageInitialization = vmtkscripts.vmtkImageInitialization()
        #self.vmtkImageInitialization.Image = self.Image
        self.vmtkImageInitialization.Image = self.InitializationImage
        self.vmtkImageInitialization.vmtkRenderer = self.vmtkRenderer
        self.vmtkImageInitialization.ImageSeeder = self.ImageSeeder
        self.vmtkImageInitialization.SurfaceViewer = self.SurfaceViewer
        self.vmtkImageInitialization.NegateImage = self.NegateForInitialization
        self.vmtkImageInitialization.OwnRenderer = 0
 
        endSegmentation = 0
        while (endSegmentation == 0):
  
            if self.InitialLevelSets == None:
                self.vmtkImageInitialization.Execute()
                self.LevelSetsInput = self.vmtkImageInitialization.InitialLevelSets
#                self.IsoSurfaceValue = self.vmtkImageInitialization.IsoSurfaceValue
                self.vmtkImageInitialization.InitialLevelSets = None
#                self.vmtkImageInitialization.IsosurfaceValue = 0.0
                self.IsoSurfaceValue = 0.0
            else:
                self.LevelSetsInput = self.InitialLevelSets
                self.InitialLevelSets = None
                self.DisplayLevelSetSurface(self.LevelSetsInput,self.IsoSurfaceValue)
  
            endEvolution = False
            while not endEvolution:
  
                queryString = 'Please input parameters (type return to accept current values, \'e\' to end, \'q\' to quit):\nNumberOfIterations('+str(self.NumberOfIterations)+') [PropagationScaling('+str(self.PropagationScaling)+') CurvatureScaling('+str(self.CurvatureScaling)+') AdvectionScaling('+str(self.AdvectionScaling)+')]: '
                inputString = self.InputText(queryString,self.EvolutionParametersValidator)
  
                if inputString == 'q':
                    return
                elif inputString == 'e':
                    endEvolution = True
                elif inputString != '':
                    splitInputString = inputString.strip().split(' ')
                    if len(splitInputString) == 1:
                        self.NumberOfIterations = int(splitInputString[0])
                    elif len(splitInputString) == 4:
                        self.NumberOfIterations = int(splitInputString[0])
                        self.PropagationScaling = float(splitInputString[1])
                        self.CurvatureScaling = float(splitInputString[2])
                        self.AdvectionScaling = float(splitInputString[3])
                    else:
                        self.PrintLog('Wrong number of parameters.')
                        continue
  
                if endEvolution:
                    break
  
                self.LevelSetEvolution()
                self.DisplayLevelSetSurface(self.LevelSetsOutput)
  
                queryString = 'Accept result? (y/n): '
                inputString = self.InputText(queryString,self.YesNoValidator)
                if inputString == 'y':
                    endEvolution = True
                elif inputString == 'n':
                    endEvolution = False
  
            queryString = 'Merge branch? (y/n): '
            inputString = self.InputText(queryString,self.YesNoValidator)
            if inputString == 'y':
                self.MergeLevelSet()
            elif inputString == 'n':
                pass
 
            if self.LevelSets != None: 
                self.DisplayLevelSetSurface(self.LevelSets)
  
            queryString = 'Segment another branch? (y/n): '
            inputString = self.InputText(queryString,self.YesNoValidator)
            if inputString == 'y':
                endSegmentation = False
            elif inputString == 'n':
                endSegmentation = True
        if self.OwnRenderer:
            self.vmtkRenderer.Deallocate()
Example #4
0
    def Execute(self):

        if self.Image == None:
            self.PrintError('Error: no Image.')

        cast = vtk.vtkImageCast()
        cast.SetInput(self.Image)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()
        self.Image = cast.GetOutput()

        if not self.InitializationImage:
            self.InitializationImage = self.Image

        if not self.FeatureImage:
            if self.LevelSetsType in ["geodesic", "curves"]:
                imageFeatures = vmtkscripts.vmtkImageFeatures()
                imageFeatures.Image = self.Image
                imageFeatures.FeatureImageType = self.FeatureImageType
                imageFeatures.SigmoidRemapping = self.SigmoidRemapping
                imageFeatures.DerivativeSigma = self.FeatureDerivativeSigma
                imageFeatures.UpwindFactor = self.UpwindFactor
                imageFeatures.FWHMRadius = self.FWHMRadius
                imageFeatures.FWHMBackgroundValue = self.FWHMBackgroundValue
                imageFeatures.Execute()
                self.FeatureImage = imageFeatures.FeatureImage
            elif self.LevelSetsType in ["threshold", "laplacian"]:
                self.FeatureImage = self.Image
            else:
                self.PrintError('Unsupported LevelSetsType')

        if self.NumberOfIterations != 0:
            self.LevelSetsInput = self.InitialLevelSets
            self.LevelSetEvolution()
            self.MergeLevelSet()
            return

        if not self.vmtkRenderer:
            self.vmtkRenderer = vmtkscripts.vmtkRenderer()
            self.vmtkRenderer.Initialize()
            self.OwnRenderer = 1

        self.ImageSeeder = vmtkscripts.vmtkImageSeeder()
        self.ImageSeeder.vmtkRenderer = self.vmtkRenderer
        #self.ImageSeeder.Image = self.Image
        self.ImageSeeder.Image = self.InitializationImage
        self.ImageSeeder.Display = 0
        self.ImageSeeder.Execute()
        self.ImageSeeder.Display = 1
        self.ImageSeeder.BuildView()

        self.SurfaceViewer = vmtkscripts.vmtkSurfaceViewer()
        self.SurfaceViewer.vmtkRenderer = self.vmtkRenderer

        if self.LevelSets != None:
            self.DisplayLevelSetSurface(self.LevelSets, 0.0)

        self.vmtkImageInitialization = vmtkscripts.vmtkImageInitialization()
        #self.vmtkImageInitialization.Image = self.Image
        self.vmtkImageInitialization.Image = self.InitializationImage
        self.vmtkImageInitialization.vmtkRenderer = self.vmtkRenderer
        self.vmtkImageInitialization.ImageSeeder = self.ImageSeeder
        self.vmtkImageInitialization.SurfaceViewer = self.SurfaceViewer
        self.vmtkImageInitialization.NegateImage = self.NegateForInitialization
        self.vmtkImageInitialization.OwnRenderer = 0

        endSegmentation = 0
        while (endSegmentation == 0):

            if self.InitialLevelSets == None:
                self.vmtkImageInitialization.Execute()
                self.LevelSetsInput = self.vmtkImageInitialization.InitialLevelSets
                #                self.IsoSurfaceValue = self.vmtkImageInitialization.IsoSurfaceValue
                self.vmtkImageInitialization.InitialLevelSets = None
                #                self.vmtkImageInitialization.IsosurfaceValue = 0.0
                self.IsoSurfaceValue = 0.0
            else:
                self.LevelSetsInput = self.InitialLevelSets
                self.InitialLevelSets = None
                self.DisplayLevelSetSurface(self.LevelSetsInput,
                                            self.IsoSurfaceValue)

            endEvolution = False
            while not endEvolution:

                queryString = 'Please input parameters (type return to accept current values, \'e\' to end, \'q\' to quit):\nNumberOfIterations(' + str(
                    self.NumberOfIterations) + ') [PropagationScaling(' + str(
                        self.PropagationScaling) + ') CurvatureScaling(' + str(
                            self.CurvatureScaling
                        ) + ') AdvectionScaling(' + str(
                            self.AdvectionScaling) + ')]: '
                inputString = self.InputText(queryString,
                                             self.EvolutionParametersValidator)

                if inputString == 'q':
                    return
                elif inputString == 'e':
                    endEvolution = True
                elif inputString != '':
                    splitInputString = inputString.strip().split(' ')
                    if len(splitInputString) == 1:
                        self.NumberOfIterations = int(splitInputString[0])
                    elif len(splitInputString) == 4:
                        self.NumberOfIterations = int(splitInputString[0])
                        self.PropagationScaling = float(splitInputString[1])
                        self.CurvatureScaling = float(splitInputString[2])
                        self.AdvectionScaling = float(splitInputString[3])
                    else:
                        self.PrintLog('Wrong number of parameters.')
                        continue

                if endEvolution:
                    break

                self.LevelSetEvolution()
                self.DisplayLevelSetSurface(self.LevelSetsOutput)

                queryString = 'Accept result? (y/n): '
                inputString = self.InputText(queryString, self.YesNoValidator)
                if inputString == 'y':
                    endEvolution = True
                elif inputString == 'n':
                    endEvolution = False

            queryString = 'Merge branch? (y/n): '
            inputString = self.InputText(queryString, self.YesNoValidator)
            if inputString == 'y':
                self.MergeLevelSet()
            elif inputString == 'n':
                pass

            if self.LevelSets != None:
                self.DisplayLevelSetSurface(self.LevelSets)

            queryString = 'Segment another branch? (y/n): '
            inputString = self.InputText(queryString, self.YesNoValidator)
            if inputString == 'y':
                endSegmentation = False
            elif inputString == 'n':
                endSegmentation = True
        if self.OwnRenderer:
            self.vmtkRenderer.Deallocate()
Example #5
0
    def Execute(self):
        if self.Image == None:
            self.PrintError('Error: no Image.')

        cast = vtk.vtkImageCast()
        cast.SetInput(self.Image)
        cast.SetOutputScalarTypeToFloat()
        cast.Update()
        self.Image = cast.GetOutput()

        if self.NegateImage:
            scalarRange = self.Image.GetScalarRange()
            negate = vtk.vtkImageMathematics()
            negate.SetInput(self.Image)
            negate.SetOperationToMultiplyByK()
            negate.SetConstantK(-1.0)
            negate.Update()
            shiftScale = vtk.vtkImageShiftScale()
            shiftScale.SetInput(negate.GetOutput())
            shiftScale.SetShift(scalarRange[1] + scalarRange[0])
            shiftScale.SetOutputScalarTypeToFloat()
            shiftScale.Update()
            self.Image = shiftScale.GetOutput()

        if self.Interactive:
            if not self.vmtkRenderer:
                self.vmtkRenderer = vmtkscripts.vmtkRenderer()
                self.vmtkRenderer.Initialize()
                self.OwnRenderer = 1

            self.vmtkRenderer.RegisterScript(self)

            if not self.ImageSeeder:
                self.ImageSeeder = vmtkscripts.vmtkImageSeeder()
                self.ImageSeeder.vmtkRenderer = self.vmtkRenderer
                self.ImageSeeder.Image = self.Image
                self.ImageSeeder.Display = 0
                self.ImageSeeder.Execute()
                ##self.ImageSeeder.Display = 1
                self.ImageSeeder.BuildView()

            if not self.SurfaceViewer:
                self.SurfaceViewer = vmtkscripts.vmtkSurfaceViewer()
                self.SurfaceViewer.vmtkRenderer = self.vmtkRenderer

            initializationMethods = {
                '0': self.CollidingFrontsInitialize,
                '1': self.FastMarchingInitialize,
                '2': self.ThresholdInitialize,
                '3': self.IsosurfaceInitialize,
                '4': self.SeedInitialize
            }

            endInitialization = False
            while not endInitialization:
                queryString = 'Please choose initialization type: \n 0: colliding fronts;\n 1: fast marching;\n 2: threshold;\n 3: isosurface;\n 4: seed\n '
                initializationType = self.InputText(
                    queryString, self.InitializationTypeValidator)
                initializationMethods[initializationType]()
                self.DisplayLevelSetSurface(self.InitialLevelSets)
                queryString = 'Accept initialization? (y/n): '
                inputString = self.InputText(queryString, self.YesNoValidator)
                if inputString == 'y':
                    self.MergeLevelSets()
                    self.DisplayLevelSetSurface(self.MergedInitialLevelSets)
                queryString = 'Initialize another branch? (y/n): '
                inputString = self.InputText(queryString, self.YesNoValidator)
                if inputString == 'y':
                    endInitialization = False
                elif inputString == 'n':
                    endInitialization = True

            self.InitialLevelSets = self.MergedInitialLevelSets
            self.MergedInitialLevelSets = None

        else:
            if self.Method == "collidingfronts":
                self.CollidingFrontsInitialize()
            elif self.Method == "fastmarching":
                self.FastMarchingInitialize()
            elif self.Method == "threshold":
                self.ThresholdInitialize()
            elif self.Method == "isosurface":
                self.IsosurfaceInitialize()
            elif self.Method == "seeds":
                self.SeedInitialize()

        if self.OwnRenderer:
            self.vmtkRenderer.Deallocate()