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 137 138 139 140 141 142 143 144 145 146 147 148 149
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkBinaryErodeImageFilter.h,v $
Language: C++
Date: $Date: 2007-09-12 09:20:29 $
Version: $Revision: 1.20 $
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 __itkBinaryErodeImageFilter_h
#define __itkBinaryErodeImageFilter_h
#include <vector>
#include <queue>
#include "itkBinaryMorphologyImageFilter.h"
#include "itkImage.h"
#include "itkNumericTraits.h"
#include "itkNeighborhoodIterator.h"
#include "itkConstNeighborhoodIterator.h"
#include "itkNeighborhood.h"
#include "itkImageBoundaryCondition.h"
#include "itkImageRegionIterator.h"
#include "itkConceptChecking.h"
namespace itk
{
/**
* \class BinaryErodeImageFilter
* \brief Fast binary erosion
*
* BinaryErodeImageFilter is a binary erosion
* morphologic operation. This implementation is based on the papers:
*
* L.Vincent "Morphological transformations of binary images with
* arbitrary structuring elements", and
*
* N.Nikopoulos et al. "An efficient algorithm for 3d binary
* morphological transformations with 3d structuring elements
* for arbitrary size and shape". IEEE Transactions on Image
* Processing. Vol. 9. No. 3. 2000. pp. 283-286.
*
* Gray scale images can be processed as binary images by selecting a
* "ErodeValue". Pixel values matching the dilate value are
* considered the "foreground" and all other pixels are
* "background". This is useful in processing segmented images where
* all pixels in segment #1 have value 1 and pixels in segment #2 have
* value 2, etc. A particular "segment number" can be processed.
* ErodeValue defaults to the maximum possible value of the
* PixelType. The eroded pixels will receive the BackgroundValue
* (defaults to 0).
*
* 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. A
* reasonable choice of structuring element is
* itk::BinaryBallStructuringElement.
*
* \sa ImageToImageFilter BinaryDilateImageFilter BinaryMorphologyImageFilter
*/
template <class TInputImage, class TOutputImage, class TKernel>
class ITK_EXPORT BinaryErodeImageFilter :
public BinaryMorphologyImageFilter< TInputImage, TOutputImage, TKernel >
{
public:
/** Extract dimension from input and output image. */
itkStaticConstMacro(InputImageDimension, unsigned int,
TInputImage::ImageDimension);
itkStaticConstMacro(OutputImageDimension, unsigned int,
TOutputImage::ImageDimension);
/** Extract the dimension of the kernel */
itkStaticConstMacro(KernelDimension, unsigned int,
TKernel::NeighborhoodDimension);
/** Convenient typedefs for simplifying declarations. */
typedef TInputImage InputImageType;
typedef TOutputImage OutputImageType;
typedef TKernel KernelType;
/** Standard class typedefs. */
typedef BinaryErodeImageFilter Self;
typedef BinaryMorphologyImageFilter<InputImageType, OutputImageType,
KernelType> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(BinaryErodeImageFilter, BinaryMorphologyImageFilter);
/** Kernel (structuring element) iterator. */
typedef typename KernelType::ConstIterator KernelIteratorType;
/** Image typedef support. */
typedef typename InputImageType::PixelType InputPixelType;
typedef typename OutputImageType::PixelType OutputPixelType;
typedef typename NumericTraits<InputPixelType>::RealType InputRealType;
typedef typename InputImageType::OffsetType OffsetType;
typedef typename InputImageType::IndexType IndexType;
typedef typename InputImageType::RegionType InputImageRegionType;
typedef typename OutputImageType::RegionType OutputImageRegionType;
typedef typename InputImageType::SizeType InputSizeType;
/** Set the value in the image to consider as "foreground". Defaults to
* maximum value of PixelType. This is an alias to the
* ForegroundValue in the superclass. */
void SetErodeValue(const InputPixelType& value)
{ this->SetForegroundValue( value ); }
/** Get the value in the image considered as "foreground". Defaults to
* maximum value of PixelType. This is an alias to the
* ForegroundValue in the superclass. */
InputPixelType GetErodeValue() const
{ return this->GetForegroundValue(); }
protected:
BinaryErodeImageFilter();
virtual ~BinaryErodeImageFilter(){}
void PrintSelf(std::ostream& os, Indent indent) const;
void GenerateData();
// type inherited from the superclass
typedef typename Superclass::NeighborIndexContainer NeighborIndexContainer;
private:
BinaryErodeImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
};
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkBinaryErodeImageFilter.txx"
#endif
#endif
|