00001 #ifndef __FVariationalRestorationSpace_H__ 00002 #define __FVariationalRestorationSpace_H__ 00003 00054 #include "FClassicAnisotropicSpace.hpp" 00055 00056 class FVariationalRestorationSpace : public FClassicAnisotropicSpace 00057 { 00058 protected: 00059 00060 // computation of g(.) 00061 float tauRight; 00062 float beta; 00063 00064 FImage* f; // origin image 00065 00066 public: 00067 FVariationalRestorationSpace(double sigma=2.0, double acontrast=1.0, double abeta=0.0, int diffusivity=0, int gradType=0 ); 00068 virtual ~FVariationalRestorationSpace(){} 00069 00070 virtual void setI0(FImage* u0){f=u0;} 00071 virtual FImage* getI0(){return f;} 00072 00073 virtual void setTauRight(float t){tauRight= t;} 00074 virtual float getTauRight(){return tauRight;} 00075 00076 // A * u(k+1) = u(k) used on unsplitted schemes 00077 // -------------------------------------------- 00078 virtual AFSymMatrix* getA(float tau, FImage* uk, AFSymMatrix* A=0); 00079 virtual FloatVector* getB(FImage* ik, FloatVector* uk=0); 00080 00081 // A * u(k+1) = u(k) used on splitted schemes 00082 // ------------------------------------------ 00083 virtual AFSymMatrix* getRowA(float tau, FImage* uk, int row, AFSymMatrix* A1=0); 00084 virtual AFSymMatrix* getColA(float tau, FImage* uk, int col, AFSymMatrix* A2=0); 00085 00086 virtual FloatVector* getRowB(FImage* ik, int row, FloatVector* uk=0); 00087 virtual FloatVector* getColB(FImage* ik, int col, FloatVector* uk=0); 00088 }; 00089 00090 #endif 00091 00092