/*========================================================================= Program: Insight Segmentation & Registration Toolkit Module: $RCSfile: itkMaximumWindowImageFilter.h,v $ Language: C++ Date: $Date: 2003/09/10 14:28:51 $ Version: $Revision: 1.4 $ Copyright (c) Insight Software Consortium. All rights reserved. See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details. 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. =========================================================================*/ #ifndef __itkMaximumWindowImageFilter_h #define __itkMaximumWindowImageFilter_h #include "itkImageToImageFilter.h" #include "itkImage.h" namespace itk { /** \class MaximumWindowImageFilter * \brief Applies a windowed maximum filter to an image * * Computes an image where a given pixel is the maximum value of the * the pixels in a neighborhood about the corresponding input pixel. * * This filter requires that the input pixel type provides an operator<() * (LessThan Comparable). * * \sa Image * \sa Neighborhood * \sa NeighborhoodOperator * \sa NeighborhoodIterator * * \ingroup IntensityImageFilters */ template class ITK_EXPORT MaximumWindowImageFilter : public ImageToImageFilter< TInputImage, TOutputImage > { public: /** Extract dimension from input and output image. */ itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension); itkStaticConstMacro(OutputImageDimension, unsigned int, TOutputImage::ImageDimension); /** Convenient typedefs for simplifying declarations. */ typedef TInputImage InputImageType; typedef TOutputImage OutputImageType; /** Standard class typedefs. */ typedef MaximumWindowImageFilter Self; typedef ImageToImageFilter< InputImageType, OutputImageType> Superclass; typedef SmartPointer Pointer; typedef SmartPointer ConstPointer; /** Method for creation through the object factory. */ itkNewMacro(Self); /** Run-time type information (and related methods). */ itkTypeMacro(MaximumWindowImageFilter, ImageToImageFilter); /** Image typedef support. */ typedef typename InputImageType::PixelType InputPixelType; typedef typename OutputImageType::PixelType OutputPixelType; typedef typename InputImageType::RegionType InputImageRegionType; typedef typename OutputImageType::RegionType OutputImageRegionType; typedef typename InputImageType::SizeType InputSizeType; /** Set the radius of the neighborhood used to compute the median. */ itkSetMacro(Radius, InputSizeType); /** Get the radius of the neighborhood used to compute the median */ itkGetConstReferenceMacro(Radius, InputSizeType); /** MedianImageFilter needs a larger input requested region than * the output requested region. As such, MedianImageFilter needs * to provide an implementation for GenerateInputRequestedRegion() * in order to inform the pipeline execution model. * * \sa ImageToImageFilter::GenerateInputRequestedRegion() */ virtual void GenerateInputRequestedRegion() throw(InvalidRequestedRegionError); protected: MaximumWindowImageFilter(); virtual ~MaximumWindowImageFilter() {} void PrintSelf(std::ostream& os, Indent indent) const; /** MaximumWindowImageFilter can be implemented as a multithreaded filter. * Therefore, this implementation provides a ThreadedGenerateData() * routine which is called for each processing thread. The output * image data is allocated automatically by the superclass prior to * calling ThreadedGenerateData(). ThreadedGenerateData can only * write to the portion of the output image specified by the * parameter "outputRegionForThread" * * \sa ImageToImageFilter::ThreadedGenerateData(), * ImageToImageFilter::GenerateData() */ void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, int threadId ); private: MaximumWindowImageFilter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented InputSizeType m_Radius; }; } // end namespace itk #ifndef ITK_MANUAL_INSTANTIATION #include "itkMaximumWindowImageFilter.txx" #endif #endif