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
|
#ifndef __itkReconstructionByErosionImageFilter_h
#define __itkReconstructionByErosionImageFilter_h
#include "itkReconstructionImageFilter.h"
#include "itkNumericTraits.h"
namespace itk {
/** \class ReconstructionByErosionImageFilter
* \brief grayscale reconstruction by erosion of an image
*
* Reconstruction by erosion operates on a "marker" image and a "mask"
* image, and is defined as the erosion of the marker image with
* respect to the mask image iterated until stability.
*
* The marker image must be less than or equal to the mask image
* (on a pixel by pixel basis).
*
* Geodesic morphology is described in Chapter 6.2 of Pierre Soille's
* book "Morphological Image Analysis: Principles and Applications",
* Second Edition, Springer, 2003.
*
* Algorithm implemented in this filter is based on algorithm described
* by Kevin Robinson and Paul F. Whelan in "Efficient Morphological
* Reconstruction: A Downhill Filter", Pattern Recognition Letters, Volume
* 25, Issue 15, November 2004, Pages 1759-1767.
*
* The algorithm, a description of the transform and some applications
* can be found in "Morphological Grayscale Reconstruction in Image Analysis:
* Applications and Efficient Algorithms", Luc Vincent, IEEE Transactions on
* image processing, Vol. 2, April 1993.
*
* \author Richard Beare. Department of Medicine, Monash University,
* Melbourne, Australia.
*
* \sa MorphologyImageFilter, GrayscaleDilateImageFilter, GrayscaleFunctionDilateImageFilter, BinaryDilateImageFilter, ReconstructionByErosionImageFilter,
OpeningByReconstructionImageFilter, ClosingByReconstructionImageFilter, ReconstructionImageFilter
* \ingroup ImageEnhancement MathematicalMorphologyImageFilters
* \ingroup MathematicalMorphologyImageFilters
*/
template <class TInputImage, class TOutputImage>
class ITK_EXPORT ReconstructionByErosionImageFilter :
public ReconstructionImageFilter<TInputImage, TOutputImage, std::less<typename TOutputImage::PixelType> >
{
public:
typedef ReconstructionByErosionImageFilter Self;
typedef ReconstructionImageFilter<TInputImage, TOutputImage, std::less<typename TOutputImage::PixelType> > Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** Some convenient typedefs. */
typedef TInputImage MarkerImageType;
typedef TInputImage MaskImageType;
typedef TOutputImage OutputImageType;
typedef typename MarkerImageType::Pointer MarkerImagePointer;
typedef typename MarkerImageType::ConstPointer MarkerImageConstPointer;
typedef typename MarkerImageType::RegionType MarkerImageRegionType;
typedef typename MarkerImageType::PixelType MarkerImagePixelType;
typedef typename MaskImageType::Pointer MaskImagePointer;
typedef typename MaskImageType::ConstPointer MaskImageConstPointer;
typedef typename MaskImageType::RegionType MaskImageRegionType;
typedef typename MaskImageType::PixelType MaskImagePixelType;
typedef typename OutputImageType::Pointer OutputImagePointer;
typedef typename OutputImageType::ConstPointer OutputImageConstPointer;
typedef typename OutputImageType::RegionType OutputImageRegionType;
typedef typename OutputImageType::PixelType OutputImagePixelType;
/** ImageDimension constants */
itkStaticConstMacro(MarkerImageDimension, unsigned int,
TInputImage::ImageDimension);
itkStaticConstMacro(MaskImageDimension, unsigned int,
TInputImage::ImageDimension);
itkStaticConstMacro(OutputImageDimension, unsigned int,
TOutputImage::ImageDimension);
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Runtime information support. */
itkTypeMacro(ReconstructionByErosionImageFilter,
ReconstructionImageFilter);
protected:
ReconstructionByErosionImageFilter()
{
this->m_MarkerValue = NumericTraits<ITK_TYPENAME TOutputImage::PixelType>::max();
}
virtual ~ReconstructionByErosionImageFilter() {}
private:
ReconstructionByErosionImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
}; // end ReconstructionByErosionImageFilter
}
#endif
|