00001 #ifndef __IFClassicAnisotropicOp__
00002 #define __IFClassicAnisotropicOp__
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 IFClassicAnisotropicOp : 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 
00047 int                     typeSolver;
00048 float                   epsilon;
00049 
00050 bool                    cfl;
00051 Diffusivity             diffusivity;
00052 int                     typeGradient;
00053 
00054 protected:
00055 
00056 
00057 
00058 virtual AnImage* greyFilter(AnImage* src, AnImage* dest=0);
00059 virtual AnImage* greySelectedFilter(AnImage* mask, AnImage* src, AnImage* dest=0);
00060 
00061 
00062 
00063 virtual Float3CImage* scolorFilter(Float3CImage* src, Float3CImage* dest=0);
00064 virtual Float3CImage* scolorSelectedFilter(AnImage* mask, Float3CImage* src, Float3CImage* dest=0);
00065 
00066 
00067 
00068 
00069 virtual Float3CImage* fcolorFilter(Float3CImage* src, Float3CImage* dest=0);
00070 virtual Float3CImage* fcolorSelectedFilter(AnImage* mask, Float3CImage* src, Float3CImage* dest=0);
00071 
00072 public:
00073         
00074 IFClassicAnisotropicOp(int atypeSolver, int outIter=1, int iterMax=8, 
00075                 float t=5.0, float asigma=2.0, float acontrast=1.0,  float eps=1.0e-4, bool colorFlag= false)
00076                 :IFMultiImageOp(1,colorFlag)
00077         {family= AFI; typeSolver=atypeSolver; iter= outIter; innerIter= iterMax; tau= t; epsilon=eps;
00078         sigma=asigma; contrast=acontrast; cfl=true; diffusivity= PmDiff; typeGradient=0;}
00079 IFClassicAnisotropicOp(SolverTimeScheme afamily, int atypeSolver, int outIter=1, int iterMax=8, 
00080                         float t=5.0, float asigma=2.0, float acontrast=1.0, 
00081                         Diffusivity diff=PmDiff, int typeGrad=0, bool cflTest=true, 
00082                         float eps=1.0e-4, bool colorFlag= false)
00083                 :IFMultiImageOp(1,colorFlag)
00084         {family= afamily; typeSolver=atypeSolver; iter= outIter; innerIter= iterMax; tau= t; epsilon=eps;       
00085         sigma=asigma; contrast=acontrast; cfl= cflTest; diffusivity= diff; typeGradient=typeGrad;}
00086 virtual ~IFClassicAnisotropicOp(){}
00087 
00088 
00089 virtual void report(FILE* file){}
00090 };
00091 
00092 
00093 #endif