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 150 151 152 153 154 155 156 157 158 159 160 161 162
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkOptGrayscaleMorphologicalOpeningImageFilter.h
Language: C++
Date: $Date$
Version: $Revision$
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 __itkOptGrayscaleMorphologicalOpeningImageFilter_h
#define __itkOptGrayscaleMorphologicalOpeningImageFilter_h
#include "itkKernelImageFilter.h"
#include "itkMovingHistogramDilateImageFilter.h"
#include "itkMovingHistogramErodeImageFilter.h"
#include "itkBasicDilateImageFilter.h"
#include "itkBasicErodeImageFilter.h"
#include "itkAnchorOpenImageFilter.h"
#include "itkVanHerkGilWermanErodeImageFilter.h"
#include "itkVanHerkGilWermanDilateImageFilter.h"
#include "itkCastImageFilter.h"
#include "itkConstantBoundaryCondition.h"
#include "itkFlatStructuringElement.h"
#include "itkNeighborhood.h"
namespace itk {
/**
* \class GrayscaleMorphologicalOpeningImageFilter
* \brief gray scale dilation of an image
*
* Dilate an image using grayscale morphology. Dilation takes the
* maximum of all the pixels identified by the structuring element.
*
* 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.
*
* \sa MorphologyImageFilter, GrayscaleFunctionDilateImageFilter, BinaryDilateImageFilter
* \ingroup ImageEnhancement MathematicalMorphologyImageFilters
*/
template<class TInputImage, class TOutputImage, class TKernel>
class ITK_EXPORT GrayscaleMorphologicalOpeningImageFilter :
public KernelImageFilter<TInputImage, TOutputImage, TKernel>
{
public:
/** Standard class typedefs. */
typedef GrayscaleMorphologicalOpeningImageFilter Self;
typedef KernelImageFilter<TInputImage,TOutputImage, TKernel> Superclass;
typedef SmartPointer<Self> Pointer;
typedef SmartPointer<const Self> ConstPointer;
/** Standard New method. */
itkNewMacro(Self);
/** Runtime information support. */
itkTypeMacro(GrayscaleMorphologicalOpeningImageFilter,
KernelImageFilter);
/** Image related typedefs. */
itkStaticConstMacro(ImageDimension, unsigned int,
TInputImage::ImageDimension);
/** Image related typedefs. */
typedef TInputImage InputImageType;
typedef TOutputImage OutputImageType;
typedef typename TInputImage::RegionType RegionType;
typedef typename TInputImage::SizeType SizeType;
typedef typename TInputImage::IndexType IndexType;
typedef typename TInputImage::PixelType PixelType;
typedef typename TInputImage::OffsetType OffsetType;
typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
typedef FlatStructuringElement< itkGetStaticConstMacro(ImageDimension) >
FlatKernelType;
typedef MovingHistogramDilateImageFilter< TInputImage, TOutputImage, TKernel >
HistogramDilateFilterType;
typedef MovingHistogramErodeImageFilter< TInputImage, TOutputImage, TKernel >
HistogramErodeFilterType;
typedef BasicErodeImageFilter< TInputImage, TInputImage, TKernel >
BasicErodeFilterType;
typedef BasicDilateImageFilter< TInputImage, TOutputImage, TKernel >
BasicDilateFilterType;
typedef AnchorOpenImageFilter< TInputImage, FlatKernelType > AnchorFilterType;
typedef VanHerkGilWermanErodeImageFilter< TInputImage, FlatKernelType >
VanHerkGilWermanErodeFilterType;
typedef VanHerkGilWermanDilateImageFilter< TInputImage, FlatKernelType >
VanHerkGilWermanDilateFilterType;
typedef CastImageFilter< TInputImage, TOutputImage > SubtractFilterType;
/** Kernel typedef. */
typedef TKernel KernelType;
// typedef typename KernelType::Superclass KernelSuperClass;
// typedef Neighborhood< typename KernelType::PixelType, ImageDimension > KernelSuperClass;
/** Set kernel (structuring element). */
void SetKernel( const KernelType& kernel );
/** Set/Get the backend filter class. */
void SetAlgorithm(int algo );
itkGetConstMacro(Algorithm, int);
/** GrayscaleMorphologicalOpeningImageFilter need to set its internal filters as modified */
virtual void Modified() const;
/** define values used to determine which algorithm to use */
enum {
BASIC = 0,
HISTO = 1,
ANCHOR = 2,
VHGW = 3
} AlgorithmChoice;
/** A safe border is added to input image to avoid borders effects
* and remove it once the closing is done */
itkSetMacro(SafeBorder, bool);
itkGetConstReferenceMacro(SafeBorder, bool);
itkBooleanMacro(SafeBorder);
protected:
GrayscaleMorphologicalOpeningImageFilter();
~GrayscaleMorphologicalOpeningImageFilter() {};
void PrintSelf(std::ostream& os, Indent indent) const;
void GenerateData();
private:
GrayscaleMorphologicalOpeningImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
// the filters used internally
typename HistogramDilateFilterType::Pointer m_HistogramDilateFilter;
typename HistogramErodeFilterType::Pointer m_HistogramErodeFilter;
typename BasicDilateFilterType::Pointer m_BasicDilateFilter;
typename BasicErodeFilterType::Pointer m_BasicErodeFilter;
typename VanHerkGilWermanDilateFilterType::Pointer m_VanHerkGilWermanDilateFilter;
typename VanHerkGilWermanErodeFilterType::Pointer m_VanHerkGilWermanErodeFilter;
typename AnchorFilterType::Pointer m_AnchorFilter;
// and the name of the filter
int m_Algorithm;
bool m_SafeBorder;
}; // end of class
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkOptGrayscaleMorphologicalOpeningImageFilter.txx"
#endif
#endif
|