00001 #ifndef __IVariationalRetinexOp__ 00002 #define __IVariationalRetinexOp__ 00003 00027 #include <stdio.h> 00028 00029 #include "IMultiImageOp.hpp" 00030 #include "Real3CImage.hpp" 00031 00032 class IVariationalRetinexOp: public IMultiImageOp 00033 { 00034 private: 00035 00036 double gamma; 00037 double alpha; 00038 double beta; 00039 int maxLevels; 00040 00041 protected: 00042 00043 // mono channel 00044 00045 virtual AnImage* greyFilter(AnImage* src, AnImage* dest=0); 00046 virtual AnImage* greySelectedFilter(AnImage* mask, AnImage* src, AnImage* dest=0); 00047 00048 // separate color channels 00049 00050 virtual Real3CImage* scolorFilter(Real3CImage* src, Real3CImage* dest=0); 00051 virtual Real3CImage* scolorSelectedFilter(AnImage* mask, Real3CImage* src, Real3CImage* dest=0); 00052 00053 00054 // separate color channels 00055 00056 virtual Real3CImage* fcolorFilter(Real3CImage* src, Real3CImage* dest=0); 00057 virtual Real3CImage* fcolorSelectedFilter(AnImage* mask, Real3CImage* src, Real3CImage* dest=0); 00058 00059 public: 00060 00061 IVariationalRetinexOp(double agamma=1.6, double aalpha=0.03, double abeta=0.25, int maxlevels=5, bool colorFlag= false) 00062 :IMultiImageOp(1,colorFlag) 00063 {gamma= agamma; alpha=aalpha; beta=abeta; maxLevels= maxlevels;} 00064 virtual ~IVariationalRetinexOp(){} 00065 00066 virtual void setAlpha(double aalpha){ alpha= aalpha;} 00067 virtual void setBeta(double abeta){ beta= abeta;} 00068 virtual void setGamma(double agamma){ gamma= agamma;} 00069 00070 virtual void report(FILE* file){} 00071 }; 00072 00073 00074 #endif