Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkCurvatureFlowImageFilter_h
00018 #define __itkCurvatureFlowImageFilter_h
00019
00020 #include "itkDenseFiniteDifferenceImageFilter.h"
00021 #include "itkCurvatureFlowFunction.h"
00022
00023 namespace itk {
00024
00087 template <class TInputImage, class TOutputImage>
00088 class ITK_EXPORT CurvatureFlowImageFilter
00089 : public DenseFiniteDifferenceImageFilter<TInputImage, TOutputImage>
00090 {
00091 public:
00093 typedef CurvatureFlowImageFilter Self;
00094 typedef DenseFiniteDifferenceImageFilter<TInputImage, TOutputImage>
00095 Superclass;
00096 typedef SmartPointer<Self> Pointer;
00097 typedef SmartPointer<const Self> ConstPointer;
00098
00100 itkNewMacro(Self);
00101
00103 itkTypeMacro(CurvatureFlowImageFilter,
00104 DenseFiniteDifferenceImageFilter);
00105
00107 typedef typename Superclass::InputImageType InputImageType;
00108
00110 typedef typename Superclass::OutputImageType OutputImageType;
00111 typedef typename OutputImageType::Pointer OutputImagePointer;
00112
00114 typedef typename Superclass::FiniteDifferenceFunctionType
00115 FiniteDifferenceFunctionType;
00116
00118 typedef CurvatureFlowFunction<OutputImageType>
00119 CurvatureFlowFunctionType;
00120
00123 itkStaticConstMacro(ImageDimension, unsigned int,Superclass::ImageDimension);
00124
00127 typedef typename Superclass::PixelType PixelType;
00128
00130 typedef typename Superclass::TimeStepType TimeStepType;
00131
00133 itkSetMacro(TimeStep, TimeStepType);
00134
00136 itkGetConstMacro(TimeStep, TimeStepType);
00137
00138 #ifdef ITK_USE_CONCEPT_CHECKING
00139
00140 itkConceptMacro(DoubleConvertibleToOutputCheck,
00141 (Concept::Convertible<double, PixelType>));
00142 itkConceptMacro(OutputConvertibleToDoubleCheck,
00143 (Concept::Convertible<PixelType, double>));
00144 itkConceptMacro(OutputDivisionOperatorsCheck,
00145 (Concept::DivisionOperators<PixelType>));
00146 itkConceptMacro(DoubleOutputMultiplyOperatorCheck,
00147 (Concept::MultiplyOperator<double, PixelType, PixelType>));
00148 itkConceptMacro(IntOutputMultiplyOperatorCheck,
00149 (Concept::MultiplyOperator<int, PixelType, PixelType>));
00150 itkConceptMacro(OutputLessThanDoubleCheck,
00151 (Concept::LessThanComparable<PixelType, double>));
00152 itkConceptMacro(OutputDoubleAdditiveOperatorsCheck,
00153 (Concept::AdditiveOperators<PixelType, double>));
00154
00156 #endif
00157
00158 protected:
00159 CurvatureFlowImageFilter();
00160 ~CurvatureFlowImageFilter() {}
00161 void PrintSelf(std::ostream& os, Indent indent) const;
00162
00165 virtual bool Halt()
00166 {
00167 if (this->GetElapsedIterations() == this->GetNumberOfIterations())
00168 {
00169 return true;
00170 }
00171 else
00172 {
00173 return false;
00174 }
00175 }
00177
00180 virtual void InitializeIteration();
00181
00185 virtual void EnlargeOutputRequestedRegion(DataObject *);
00186
00190 virtual void GenerateInputRequestedRegion();
00191
00192 private:
00193 CurvatureFlowImageFilter(const Self&);
00194 void operator=(const Self&);
00195
00196 TimeStepType m_TimeStep;
00197 };
00198
00199 }
00200
00201 #ifndef ITK_MANUAL_INSTANTIATION
00202 #include "itkCurvatureFlowImageFilter.txx"
00203 #endif
00204
00205 #endif
00206