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
|
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkOptMorphologicalGradientImageFilter.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 __itkOptMorphologicalGradientImageFilter_h
#define __itkOptMorphologicalGradientImageFilter_h
#include "itkKernelImageFilter.h"
#include "itkMovingHistogramMorphologicalGradientImageFilter.h"
#include "itkBasicDilateImageFilter.h"
#include "itkBasicErodeImageFilter.h"
#include "itkAnchorErodeImageFilter.h"
#include "itkAnchorDilateImageFilter.h"
#include "itkVanHerkGilWermanDilateImageFilter.h"
#include "itkVanHerkGilWermanErodeImageFilter.h"
#include "itkSubtractImageFilter.h"
#include "itkConstantBoundaryCondition.h"
#include "itkFlatStructuringElement.h"
#include "itkNeighborhood.h"
namespace itk {
/**
* \class MorphologicalGradientImageFilter
* \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 MorphologicalGradientImageFilter :
public KernelImageFilter<TInputImage, TOutputImage, TKernel>
{
public:
/** Standard class typedefs. */
typedef MorphologicalGradientImageFilter 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(MorphologicalGradientImageFilter,
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 MovingHistogramMorphologicalGradientImageFilter< TInputImage, TOutputImage, TKernel >
HistogramFilterType;
typedef BasicDilateImageFilter< TInputImage, TInputImage, TKernel >
BasicDilateFilterType;
typedef BasicErodeImageFilter< TInputImage, TInputImage, TKernel >
BasicErodeFilterType;
typedef AnchorDilateImageFilter< TInputImage, FlatKernelType >
AnchorDilateFilterType;
typedef AnchorErodeImageFilter< TInputImage, FlatKernelType > AnchorErodeFilterType;
typedef VanHerkGilWermanDilateImageFilter< TInputImage, FlatKernelType >
VHGWDilateFilterType;
typedef VanHerkGilWermanErodeImageFilter< TInputImage, FlatKernelType >
VHGWErodeFilterType;
typedef SubtractImageFilter< TInputImage, 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);
/** MorphologicalGradientImageFilter 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;
protected:
MorphologicalGradientImageFilter();
~MorphologicalGradientImageFilter() {};
void PrintSelf(std::ostream& os, Indent indent) const;
void GenerateData();
private:
MorphologicalGradientImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
// the filters used internally
typename HistogramFilterType::Pointer m_HistogramFilter;
typename BasicDilateFilterType::Pointer m_BasicDilateFilter;
typename BasicErodeFilterType::Pointer m_BasicErodeFilter;
typename AnchorDilateFilterType::Pointer m_AnchorDilateFilter;
typename AnchorErodeFilterType::Pointer m_AnchorErodeFilter;
typename VHGWDilateFilterType::Pointer m_VanHerkGilWermanDilateFilter;
typename VHGWErodeFilterType::Pointer m_VanHerkGilWermanErodeFilter;
// and the name of the filter
int m_Algorithm;
}; // end of class
} // end namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkOptMorphologicalGradientImageFilter.txx"
#endif
#endif
|