1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkGrayscaleMorphologicalClosingImageFilter.h,v $
Language: C++
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 __itkGrayscaleMorphologicalClosingImageFilter_h
#define __itkGrayscaleMorphologicalClosingImageFilter_h
#include "itkImageToImageFilter.h"
namespace itk {
/**
* \class GrayscaleMorphologicalClosingImageFilter
* \brief gray scale morphological closing of an image.
*
* This filter removes small (i.e., smaller than the structuring
* element)holes and tube like structures in the interior or at the
* boundaries of the image. The morphological closing of an image
* "f" is defined as:
* Closing(f) = Erosion(Dilation(f)).
*
* The structuring element is assumed to be composed of binary
* values (zero or one). Only elements of the structuring element
* having values > 0 are candidates for affecting the center pixel.
*
*
* \author Lino Ramirez. Dept. of Electrical and Computer Engineering. University of Alberta. Canada
*
* \sa MorphologyImageFilter, GrayscaleDilateImageFilter, GrayscaleErodeImageFilter
* \ingroup ImageEnhancement MathematicalMorphologyImageFilters
*/
template<class TInputImage, class TOutputImage, class TKernel>
class ITK_EXPORT GrayscaleMorphologicalClosingImageFilter :
public ImageToImageFilter<TInputImage, TOutputImage>
{
public:
/** Standard class typedefs. */
typedef GrayscaleMorphologicalClosingImageFilter Self;
typedef ImageToImageFilter<TInputImage, TOutputImage> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** Standard New method. */
itkNewMacro(Self);
/** Runtime information support. */
itkTypeMacro(GrayscaleMorphologicalClosingImageFilter,
ImageToImageFilter);
typedef TInputImage InputImageType;
typedef TOutputImage OutputImageType;
typedef typename InputImageType::Pointer InputImagePointer;
typedef typename OutputImageType::RegionType OutputImageRegionType;
/** Declaration of pixel type. */
typedef typename TInputImage::PixelType PixelType ;
/** Kernel typedef. */
typedef TKernel KernelType;
/** Set kernel (structuring element). */
itkSetMacro(Kernel, KernelType);
/** Get the kernel (structuring element). */
itkGetConstReferenceMacro(Kernel, KernelType);
/** ImageDimension constants */
itkStaticConstMacro(InputImageDimension, unsigned int,
TInputImage::ImageDimension);
itkStaticConstMacro(OutputImageDimension, unsigned int,
TOutputImage::ImageDimension);
itkStaticConstMacro(KernelDimension, unsigned int,
TKernel::NeighborhoodDimension);
#ifdef ITK_USE_CONCEPT_CHECKING
/** Begin concept checking */
itkConceptMacro(SameTypeCheck,
(Concept::SameType<PixelType, typename TOutputImage::PixelType>));
itkConceptMacro(SameDimensionCheck1,
(Concept::SameDimension<InputImageDimension, OutputImageDimension>));
itkConceptMacro(SameDimensionCheck2,
(Concept::SameDimension<InputImageDimension, KernelDimension>));
itkConceptMacro(InputLessThanComparableCheck,
(Concept::LessThanComparable<PixelType>));
itkConceptMacro(InputGreaterThanComparableCheck,
(Concept::GreaterThanComparable<PixelType>));
itkConceptMacro(KernelGreaterThanIntCheck,
(Concept::GreaterThanComparable<typename TKernel::PixelType, int>));
/** End concept checking */
#endif
protected:
GrayscaleMorphologicalClosingImageFilter();
~GrayscaleMorphologicalClosingImageFilter() {};
void PrintSelf(std::ostream& os, Indent indent) const;
/** GrayscaleMorphologicalClosingImageFilter needs the entire input be
* available. Thus, it needs to provide an implementation of
* GenerateInputRequestedRegion(). */
void GenerateInputRequestedRegion() ;
/** GrayscaleMorphologicalClosingImageFilter will produce the entire output. */
void EnlargeOutputRequestedRegion(DataObject *itkNotUsed(output));
/** Single-threaded version of GenerateData. This filter delegates
* to GrayscaleDilateImageFilter GrayscaleErodeImageFilter. */
void GenerateData ();
private:
GrayscaleMorphologicalClosingImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
/** kernel or structuring element to use. */
KernelType m_Kernel ;
} ; // end of class
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkGrayscaleMorphologicalClosingImageFilter.txx"
#endif
#endif
|