#============================================================================== # # Project: SharpImage # Module: ImpulseNoise.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 ImpulseNoiseScript(ImageToImageScriptObject): # ------------------------------------------------------------------------- Name = "ImpulseNoise" Help = """Adds impulse noise to the input image.""" Parameters = """(double) Probability = the probability [0,1] that a given pixel has noise. (0.01) (pixel) OutputMinimum = the output image minimum. (min) (pixel) OutputMaximum = the output image maximum. (max)""" Probability = 0.01 OutputMinimum = None OutputMaximum = None # ------------------------------------------------------------------------- def Initialise(self): """ Initialise the environment for running this script. """ """ NOTE: This function is invoked on the main UI thread. """ ImageToImageScriptObject.Initialise(self) # Setup the output min/max image = self.Renderer.Inputs[0] if (self.OutputMinimum != None and self.OutputMaximum != None): # Do nothing - keep the user specified values self.OutputMinimum self.OutputMaximum elif (image.Metadata.ContainsKey("MinimumValueAsD") and image.Metadata.ContainsKey("MaximumValueAsD")): # Use the image min/max values self.OutputMinimum = image.Metadata["MinimumValueAsD"] self.OutputMaximum = image.Metadata["MaximumValueAsD"] else: # Use the pixel min/max values self.OutputMinimum = image.PixelType.MinValue self.OutputMaximum = image.PixelType.MaxValue def ThreadedDoWork(self): """ Perform the main functions of the script. """ """ NOTE: This function is invoked on a background thread. """ try: self.StartedWork() self.WriteInputName() filterNoise = itkImpulseNoiseImageFilter.New( self.Input ) self.AddEventHandlersToProcessObject( filterNoise ) filterNoise.SetInput( self.Input ) filterNoise.Probability = self.Probability filterNoise.OutputMinimum = itkPixel( self.Input.PixelType, self.OutputMinimum ) filterNoise.OutputMaximum = itkPixel( self.Input.PixelType, self.OutputMaximum ) filterNoise.UpdateLargestPossibleRegion() filterNoise.GetOutput( self.Output ) self.DisconnectInputAndOutput() self.DisposeOfObject( filterNoise ) self.WriteOutputName() self.FinishedWork( True ) except Exception, ex: self.HandleException( ex ) self.FinishedWork( False ) self.Finalise( )