#============================================================================== # # Project: SharpImage # Module: MorphologicalDilate.py # Language: IronPython # Author: Dan Mueller # Date: $Date: 2007-07-13 06:30:23 +1000 (Fri, 13 Jul 2007) $ # Revision: $Revision: 8 $ # # 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 Morphology library clr.AddReference("ManagedITK.MorphologicalFilters") from itk import * class MorphologicalDilateScript(ImageToImageScriptObject): # ------------------------------------------------------------------------- Name = "MorphologicalDilate" Help = """Computes the grayscale or binary morphological dilation of an image. This script takes the maximum of all pixels within a given structuring element.""" Parameters = """(itkSize) KernelRadius = the radius of the ball. (itkSize(1,1,.)) (itkFlatStructuringElement) Kernel = the structuring element. (Ball) (string) Operation = either "Binary" or "Grayscale". ("Grayscale") (pixel) ForegroundValue = for Operation="Binary", sets the value considered as foreground. (pixel) BackgroundValue = for Operation="Binary", sets the value considered as background.""" KernelRadius = None Kernel = None Operation = "Grayscale" ForegroundValue = None BackgroundValue = None # ------------------------------------------------------------------------- def ThreadedDoWork(self): """ Perform the main functions of the script on a background thread. """ try: self.StartedWork() self.WriteInputName() filterDilate = None if (String.Compare( self.Operation, "Binary", True ) == 0): filterDilate = itkBinaryDilateImageFilter.New( self.Input, self.Output ) if (self.ForegroundValue != None): filterDilate.ForegroundValue = self.ForegroundValue self.WriteLineToConsole( "ForegroundValue=" + filterDilate.ForegroundValue.ToString() ) if (self.BackgroundValue != None): filterDilate.BackgroundValue = self.BackgroundValue self.WriteLineToConsole( "BackgroundValue=" + filterDilate.BackgroundValue.ToString() ) else: filterDilate = itkGrayscaleDilateImageFilter.New( self.Input, self.Output ) self.AddEventHandlersToProcessObject( filterDilate ) filterDilate.SetInput( self.Input ) if (self.KernelRadius == None): self.KernelRadius = itkSize( self.Input.Dimension ) self.KernelRadius.Fill( 1 ) if (self.Kernel == None): self.Kernel = itkFlatStructuringElement.Ball( self.KernelRadius ); self.WriteLineToConsole( "Kernel=" + self.Kernel.ToString() ) filterDilate.Kernel = self.Kernel filterDilate.UpdateLargestPossibleRegion() filterDilate.GetOutput( self.Output ) self.DisconnectInputAndOutput() self.DisposeOfObject( filterDilate ) self.WriteOutputName() self.FinishedWork( True ) except Exception, ex: self.HandleException( ex ) self.FinishedWork( False ) self.Finalise( )