00001 #ifndef __IFVariationalRestorationOp__
00002 #define __IFVariationalRestorationOp__
00003
00026 #include <stdio.h>
00027
00028 #include "IFMultiImageOp.hpp"
00029
00030 #include "Float3CImage.hpp"
00031
00032 #include "SolverTimeScheme.hpp"
00033 #include "Diffusivity.hpp"
00034
00035 class IFVariationalRestorationOp : public IFMultiImageOp
00036 {
00037 private:
00038
00039 SolverTimeScheme family;
00040
00041 int iter;
00042 int innerIter;
00043 double tau;
00044 double sigma;
00045 double contrast;
00046 double beta;
00047
00048 int typeSolver;
00049 float epsilon;
00050
00051 bool cfl;
00052 Diffusivity diffusivity;
00053 int typeGradient;
00054
00055 protected:
00056
00057
00058
00059 virtual AnImage* greyFilter(AnImage* src, AnImage* dest=0);
00060 virtual AnImage* greySelectedFilter(AnImage* mask, AnImage* src, AnImage* dest=0);
00061
00062
00063
00064 virtual Float3CImage* scolorFilter(Float3CImage* src, Float3CImage* dest=0);
00065 virtual Float3CImage* scolorSelectedFilter(AnImage* mask, Float3CImage* src, Float3CImage* dest=0);
00066
00067
00068
00069
00070 virtual Float3CImage* fcolorFilter(Float3CImage* src, Float3CImage* dest=0);
00071 virtual Float3CImage* fcolorSelectedFilter(AnImage* mask, Float3CImage* src, Float3CImage* dest=0);
00072
00073 public:
00074
00075 IFVariationalRestorationOp(int atypeSolver, int outIter=1, int iterMax=8,
00076 float t=5.0, float asigma=2.0, float acontrast=1.0, float abeta=0.0, float eps=1.0e-4, bool colorFlag= false)
00077 :IFMultiImageOp(1,colorFlag)
00078 {family= AFI; typeSolver=atypeSolver; iter= outIter; innerIter= iterMax; tau= t; epsilon=eps;
00079 sigma=asigma; contrast=acontrast; beta= abeta; cfl=true; diffusivity= VarDiff; typeGradient=0; }
00080 IFVariationalRestorationOp(SolverTimeScheme afamily, int atypeSolver, int outIter=1, int iterMax=8,
00081 float t=5.0, float asigma=2.0, float acontrast=1.0, float abeta=0.0,
00082 Diffusivity diff=VarDiff, int typeGrad=0,
00083 bool cflTest=true, float eps=1.0e-4, bool colorFlag= false)
00084 :IFMultiImageOp(1,colorFlag)
00085 {family= afamily; typeSolver=atypeSolver; iter= outIter; innerIter= iterMax; tau= t; epsilon=eps;
00086 sigma=asigma; contrast=acontrast; beta= abeta; cfl= cflTest; diffusivity= diff; typeGradient=typeGrad; }
00087 virtual ~IFVariationalRestorationOp(){}
00088
00089
00090 virtual void report(FILE* file){}
00091 };
00092
00093
00094 #endif