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.Surface == None: self.PrintError('Error: no Surface.') if not self.vmtkRenderer: self.vmtkRenderer = vmtkrenderer.vmtkRenderer() self.vmtkRenderer.Initialize() self.OwnRenderer = 1 self.vmtkRenderer.RegisterScript(self) triangleFilter = vtk.vtkTriangleFilter() triangleFilter.SetInputData(self.Surface) triangleFilter.Update() self.Surface = triangleFilter.GetOutput() self.tagviewer = vmtkscripts.vmtkSurfaceViewer() self.tagviewer.Surface = self.Surface self.tagviewer.vmtkRenderer = self.vmtkRenderer self.tagviewer.Representation = 'edges' self.tagviewer.Opacity = self.Opacity self.tagviewer.Execute() self.ContourWidget = vtk.vtkContourWidget() self.ContourWidget.SetInteractor(self.vmtkRenderer.RenderWindowInteractor) rep = vtk.vtkOrientedGlyphContourRepresentation.SafeDownCast(self.ContourWidget.GetRepresentation()) rep.GetLinesProperty().SetColor(1, 0, 0) rep.GetLinesProperty().SetLineWidth(4.0) pointPlacer = vtk.vtkPolygonalSurfacePointPlacer() pointPlacer.AddProp(self.tagviewer.Actor) pointPlacer.GetPolys().AddItem(self.Surface) rep.SetPointPlacer(pointPlacer) self.Interpolator = vtk.vtkPolygonalSurfaceContourLineInterpolator() self.Interpolator.GetPolys().AddItem(self.Surface) rep.SetLineInterpolator(self.Interpolator) self.InputInfo("Building loop ...\n") self.vmtkRenderer.AddKeyBinding('space','Generate loop',self.LoopCallback) self.vmtkRenderer.AddKeyBinding('d','Delete contour',self.DeleteContourCallback) self.vmtkRenderer.AddKeyBinding('i','Start/stop contour drawing',self.InteractCallback) self.Display() 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.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()
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()
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()