#============================================================================== # # Project: SharpImage # Module: CurvatureAnisotropicDiffusion.py # Language: IronPython # Author: Dan Mueller # Date: $Date: 2007-07-06 10:57:00 +1000 (Fri, 06 Jul 2007) $ # Revision: $Revision: 2 $ # # Copyright (c) Queensland University of Technology (QUT) 2007. # All rights reserved. # # This software is distributed WITHOUT ANY WARRANTY; without even # the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR # PURPOSE. See the above copyright notices for more information. # #============================================================================== # Import the base script class import ImageToImageScript from ImageToImageScript import * # Add reference and import Denoising library clr.AddReference("ManagedITK.NoiseFilters") from itk import * class CurvatureAnisotropicDiffusionScript(ImageToImageScriptObject): # ----------------------------------------------------------------------- Name = "CurvatureAnisotropicDiffusion" Help = """Performs anisotropic diffusion on a scalar input image using the modified curvature diffusion equation (MCDE). The TimeStep should be below 0.1250 for 2D, and 0.0625 for 3D images.""" Parameters = """(double) Conductance = controls the sensitivity in the diffusion equation. (1.0) (double) TimeStep = the time step in the finite difference equation. (0.5^N) (int) Iterations = the number of iterations. (2)""" Conductance = 1.0 TimeStep = None Iterations = 2 # ----------------------------------------------------------------------- def ThreadedDoWork(self): """ Perform script functions on a background thread. """ try: self.StartedWork() self.WriteInputName() FilterType = itkCurvatureAnisotropicDiffusionImageFilter filterDiffusion = FilterType.New( self.Input, self.Output ) self.AddEventHandlersToProcessObject( filterDiffusion ) filterDiffusion.SetInput( self.Input ) filterDiffusion.ConductanceParameter = self.Conductance filterDiffusion.NumberOfIterations = self.Iterations if (self.TimeStep != None): filterDiffusion.TimeStep = self.TimeStep self.WriteLineToConsole( "Conductance=" + filterDiffusion.ConductanceParameter.ToString() ) self.WriteLineToConsole( "TimeStep=" + filterDiffusion.TimeStep.ToString() ) self.WriteLineToConsole( "Iterations=" + filterDiffusion.NumberOfIterations.ToString() ) filterDiffusion.UpdateLargestPossibleRegion() filterDiffusion.GetOutput( self.Output ) self.DisconnectInputAndOutput() self.DisposeOfObject( filterDiffusion ) self.WriteOutputName() self.FinishedWork( True ) except Exception, ex: self.HandleException( ex ) self.FinishedWork( False ) self.Finalise( )