00001 #ifndef __IF2DRestorationOp__ 00002 #define __IF2DRestorationOp__ 00003 00041 #include <stdio.h> 00042 00043 #include "IFMultiImageOp.hpp" 00044 00045 #include "Float3CImage.hpp" 00046 00047 #include "IF2DHeatFlowOp.hpp" 00048 00049 class IF2DRestorationOp : public IFMultiImageOp 00050 { 00051 private: 00052 00053 SolverFamily family; 00054 00055 int iter; 00056 double tau; 00057 00058 int typeSolver; 00059 float epsilon; 00060 bool implicitFlag; // false= semi-implicit 00061 00062 protected: 00063 00064 // mono channel 00065 00066 virtual AnImage* greyFilter(AnImage* src, AnImage* dest=0); 00067 virtual AnImage* greySelectedFilter(AnImage* mask, AnImage* src, AnImage* dest=0); 00068 00069 // separate color channels 00070 00071 virtual Float3CImage* scolorFilter(Float3CImage* src, Float3CImage* dest=0); 00072 virtual Float3CImage* scolorSelectedFilter(AnImage* mask, Float3CImage* src, Float3CImage* dest=0); 00073 00074 00075 // separate color channels 00076 00077 virtual Float3CImage* fcolorFilter(Float3CImage* src, Float3CImage* dest=0); 00078 virtual Float3CImage* fcolorSelectedFilter(AnImage* mask, Float3CImage* src, Float3CImage* dest=0); 00079 00080 public: 00081 00083 IF2DRestorationOp(int atypeSolver, bool implicit=false, int iterMax=8, float t=0.5, float eps=1.0e-4, bool colorFlag= false) 00084 :IFMultiImageOp(1,colorFlag) 00085 {family= Full2D; typeSolver=atypeSolver; implicitFlag=implicit; iter= iterMax; tau= t; epsilon=eps;} 00086 IF2DRestorationOp(SolverFamily afamily, int atypeSolver, bool implicit=false, 00087 int iterMax=8, float t=0.5, float eps=1.0e-4, bool colorFlag= false) 00088 :IFMultiImageOp(1,colorFlag) 00089 {family= afamily; typeSolver=atypeSolver; implicitFlag=implicit; iter= iterMax; tau= t; epsilon=eps;} 00090 virtual ~IF2DRestorationOp(){} 00091 00092 00093 virtual void report(FILE* file){} 00094 }; 00095 00096 00097 #endif