00001 #ifndef __FClassicAnisotropicSpace_H__ 00002 #define __FClassicAnisotropicSpace_H__ 00003 00064 #include "AFSpatialDiscretisation.hpp" 00065 #include "FGradientNormOp.hpp" 00066 00067 #include "AbsFImageFilter.hpp" 00068 00069 00070 class FClassicAnisotropicSpace : public AFSpatialDiscretisation 00071 { 00072 protected: 00073 00074 // computation of g(.) 00075 float sigmaRegularisation; 00076 float contrast; 00077 float contrast2; 00078 int diffusivity; 00079 00080 AbsFImageFilter* blurrer; // LOD Heat flow 00081 FGradientNormOp* gradient; // gradient norm approximation 00082 00083 // temporary results 00084 FImage* uSigma; 00085 FImage* g; // conductivity 00086 00087 protected: 00088 00089 virtual FImage* gValues(FImage* src, FImage* dest=0); 00090 00091 public: 00092 FClassicAnisotropicSpace(double sigma=2.0, double acontrast=1.0, int diffusivity=0, int gradType=0 ); 00093 virtual ~FClassicAnisotropicSpace(){delete gradient;} 00094 00095 virtual void init(FImage* uk); 00096 00097 00098 // A * u(k+1) = u(k) used on unsplitted schemes 00099 // -------------------------------------------- 00100 virtual AFSymMatrix* getA(float tau, FImage* uk, AFSymMatrix* A=0); 00101 00102 // A * u(k+1) = u(k) used on splitted schemes 00103 // ------------------------------------------ 00104 virtual AFSymMatrix* getRowA(float tau, FImage* uk, int row, AFSymMatrix* A1=0); 00105 virtual AFSymMatrix* getColA(float tau, FImage* uk, int col, AFSymMatrix* A2=0); 00106 00107 }; 00108 00109 #endif 00110 00111