00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkCurvatureFlowFunction_h_
00018 #define __itkCurvatureFlowFunction_h_
00019
00020 #include "itkFiniteDifferenceFunction.h"
00021 #include "itkMacro.h"
00022
00023 namespace itk {
00024
00039 template <class TImage>
00040 class ITK_EXPORT CurvatureFlowFunction :
00041 public FiniteDifferenceFunction<TImage>
00042 {
00043 public:
00045 typedef CurvatureFlowFunction Self;
00046 typedef FiniteDifferenceFunction<TImage> Superclass;
00047 typedef SmartPointer<Self> Pointer;
00048 typedef SmartPointer<const Self> ConstPointer;
00049
00051 itkNewMacro(Self);
00052
00054 itkTypeMacro( CurvatureFlowFunction,
00055 FiniteDifferenceFunction );
00056
00058 typedef typename Superclass::ImageType ImageType;
00059 typedef typename Superclass::PixelType PixelType;
00060 typedef typename Superclass::RadiusType RadiusType;
00061 typedef PixelType ScalarValueType;
00062 typedef typename Superclass::NeighborhoodType NeighborhoodType;
00063 typedef typename Superclass::FloatOffsetType FloatOffsetType;
00064 typedef typename Superclass::TimeStepType TimeStepType;
00065
00067 itkStaticConstMacro(ImageDimension, unsigned int,Superclass::ImageDimension);
00068
00079 virtual TimeStepType ComputeGlobalTimeStep(void *GlobalData) const;
00080
00086 virtual void *GetGlobalDataPointer() const
00087 {
00088 GlobalDataStruct *ans = new GlobalDataStruct();
00089 ans->m_MaxChange = NumericTraits<ScalarValueType>::Zero;
00090 return ans;
00091 }
00092
00097 virtual void ReleaseGlobalDataPointer(void *GlobalData) const
00098 { delete (GlobalDataStruct *) GlobalData; }
00099
00101 void SetTimeStep( const TimeStepType & t )
00102 { m_TimeStep = t; }
00103
00105 const TimeStepType &GetTimeStep() const
00106 { return m_TimeStep; }
00107
00110 virtual PixelType ComputeUpdate(const NeighborhoodType &neighborhood,
00111 void * globalData,
00112 const FloatOffsetType& offset = FloatOffsetType(0.0)
00113 );
00114
00115 protected:
00116
00119 struct GlobalDataStruct
00120 {
00121 GlobalDataStruct()
00122 {
00123 m_MaxChange = NumericTraits<ScalarValueType>::Zero;
00124 }
00125 ~GlobalDataStruct() {}
00126
00127 ScalarValueType m_MaxChange;
00128 };
00129
00130 CurvatureFlowFunction();
00131 ~CurvatureFlowFunction() {}
00132
00133 private:
00134 CurvatureFlowFunction(const Self&);
00135 void operator=(const Self&);
00136
00137 TimeStepType m_TimeStep;
00138
00139
00140 };
00141
00142 }
00143
00144 #ifndef ITK_MANUAL_INSTANTIATION
00145 #include "itkCurvatureFlowFunction.txx"
00146 #endif
00147
00148 #endif