00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkAnisotropicDiffusionImageFilter_h_
00018 #define __itkAnisotropicDiffusionImageFilter_h_
00019
00020 #include "itkDenseFiniteDifferenceImageFilter.h"
00021 #include "itkAnisotropicDiffusionFunction.h"
00022 #include "itkNumericTraits.h"
00023
00024 #define ITK_LEAN_AND_MEAN
00025
00026 namespace itk {
00027
00071 template <class TInputImage, class TOutputImage>
00072 class ITK_EXPORT AnisotropicDiffusionImageFilter
00073 : public DenseFiniteDifferenceImageFilter<TInputImage, TOutputImage>
00074 {
00075 public:
00077 typedef AnisotropicDiffusionImageFilter Self;
00078 typedef DenseFiniteDifferenceImageFilter<TInputImage, TOutputImage>
00079 Superclass;
00080 typedef SmartPointer<Self> Pointer;
00081 typedef SmartPointer<const Self> ConstPointer;
00082
00084 itkTypeMacro(AnisotropicDiffusionImageFilter,
00085 DenseFiniteDifferenceImageFilter);
00086
00088 typedef typename Superclass::InputImageType InputImageType;
00089 typedef typename Superclass::OutputImageType OutputImageType;
00090 typedef typename Superclass::UpdateBufferType UpdateBufferType;
00091
00094 itkStaticConstMacro(ImageDimension, unsigned int,Superclass::ImageDimension);
00095
00098 typedef typename Superclass::PixelType PixelType;
00099 typedef typename Superclass::TimeStepType TimeStepType;
00100
00102 itkSetMacro(TimeStep, TimeStepType);
00103 itkGetMacro(TimeStep, TimeStepType);
00105
00108 itkSetMacro(ConductanceParameter, double);
00109 itkGetMacro(ConductanceParameter, double);
00111
00114 itkSetMacro(ConductanceScalingUpdateInterval, unsigned int);
00115 itkGetMacro(ConductanceScalingUpdateInterval, unsigned int);
00117
00120 itkSetMacro(ConductanceScalingParameter, double);
00121 itkGetMacro(ConductanceScalingParameter, double);
00123
00131 void SetFixedAverageGradientMagnitude(double a)
00132 {
00133 m_FixedAverageGradientMagnitude= a;
00134 this->Modified();
00135 m_GradientMagnitudeIsFixed = true;
00136 }
00137 itkGetMacro(FixedAverageGradientMagnitude, double);
00139
00140 protected:
00141 AnisotropicDiffusionImageFilter();
00142 ~AnisotropicDiffusionImageFilter() {}
00143 void PrintSelf(std::ostream& os, Indent indent) const;
00144
00147
00148
00150 virtual void InitializeIteration();
00151
00152 bool m_GradientMagnitudeIsFixed;
00153
00154 private:
00155 AnisotropicDiffusionImageFilter(const Self&);
00156 void operator=(const Self&);
00157
00158 double m_ConductanceParameter;
00159 double m_ConductanceScalingParameter;
00160 unsigned int m_ConductanceScalingUpdateInterval;
00161 double m_FixedAverageGradientMagnitude;
00162
00163 TimeStepType m_TimeStep;
00164
00165 };
00166
00167 }
00168
00169 #ifndef ITK_MANUAL_INSTANTIATION
00170 #include "itkAnisotropicDiffusionImageFilter.txx"
00171 #endif
00172
00173 #undef ITK_LEAN_AND_MEAN
00174
00175 #endif
00176