00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkMinMaxCurvatureFlowImageFilter_h
00018 #define __itkMinMaxCurvatureFlowImageFilter_h
00019
00020 #include "itkCurvatureFlowImageFilter.h"
00021 #include "itkMinMaxCurvatureFlowFunction.h"
00022
00023 namespace itk {
00024
00074 template <class TInputImage, class TOutputImage>
00075 class ITK_EXPORT MinMaxCurvatureFlowImageFilter
00076 : public CurvatureFlowImageFilter<TInputImage, TOutputImage>
00077 {
00078 public:
00080 typedef MinMaxCurvatureFlowImageFilter Self;
00081 typedef CurvatureFlowImageFilter<TInputImage, TOutputImage>
00082 Superclass;
00083 typedef SmartPointer<Self> Pointer;
00084 typedef SmartPointer<const Self> ConstPointer;
00085
00087 itkNewMacro(Self);
00088
00090 itkTypeMacro(MinMaxCurvatureFlowImageFilter,
00091 CurvatureFlowImageFilter);
00092
00094 typedef typename Superclass::FiniteDifferenceFunctionType
00095 FiniteDifferenceFunctionType;
00096 typedef typename Superclass::OutputImageType OutputImageType;
00097
00099 typedef MinMaxCurvatureFlowFunction<OutputImageType>
00100 MinMaxCurvatureFlowFunctionType;
00101
00104 itkStaticConstMacro(ImageDimension, unsigned int,
00105 Superclass::ImageDimension);
00106
00108 typedef typename FiniteDifferenceFunctionType::RadiusType RadiusType;
00109 typedef typename RadiusType::SizeValueType RadiusValueType;
00110
00112 itkSetMacro( StencilRadius, RadiusValueType );
00113 itkGetConstMacro( StencilRadius, RadiusValueType );
00115
00116 #ifdef ITK_USE_CONCEPT_CHECKING
00117
00118 itkConceptMacro(UnsignedLongConvertibleToOutputCheck,
00119 (Concept::Convertible<unsigned long, typename TOutputImage::PixelType>));
00120 itkConceptMacro(OutputLessThanComparableCheck,
00121 (Concept::LessThanComparable<typename TOutputImage::PixelType>));
00122 itkConceptMacro(LongConvertibleToOutputCheck,
00123 (Concept::Convertible<long, typename TOutputImage::PixelType>));
00124 itkConceptMacro(OutputDoubleComparableCheck,
00125 (Concept::Comparable<typename TOutputImage::PixelType, double>));
00126 itkConceptMacro(OutputDoubleMultiplyAndAssignOperatorCheck,
00127 (Concept::MultiplyAndAssignOperator<typename TOutputImage::PixelType,
00128 double>));
00129 itkConceptMacro(OutputGreaterThanUnsignedLongCheck,
00130 (Concept::GreaterThanComparable<typename TOutputImage::PixelType,
00131 unsigned long>));
00132 itkConceptMacro(UnsignedLongOutputAditiveOperatorsCheck,
00133 (Concept::AdditiveOperators<unsigned long,
00134 typename TOutputImage::PixelType>));
00135
00137 #endif
00138
00139 protected:
00140 MinMaxCurvatureFlowImageFilter();
00141 ~MinMaxCurvatureFlowImageFilter() {}
00142 void PrintSelf(std::ostream& os, Indent indent) const;
00143
00146 virtual void InitializeIteration();
00147
00148 private:
00149 MinMaxCurvatureFlowImageFilter(const Self&);
00150 void operator=(const Self&);
00151
00152 RadiusValueType m_StencilRadius;
00153
00154 };
00155
00156 }
00157
00158 #ifndef ITK_MANUAL_INSTANTIATION
00159 #include "itkMinMaxCurvatureFlowImageFilter.txx"
00160 #endif
00161
00162 #endif
00163