00001 #ifndef __CombinedDericheFilter__ 00002 #define __CombinedDericheFilter__ 00003 00004 00005 00027 #include <stdio.h> 00028 00029 #include "AnImage.hpp" 00030 #include "RImage.hpp" 00031 00032 #include "ARColorImageFilter.hpp" 00033 00034 #include "ShockFlow.hpp" 00035 00036 class CombinedDericheFilter : public ARColorImageFilter 00037 { 00038 protected: 00039 00040 int niterations; 00041 00042 double alphaDiffusion; 00043 double sigma1; 00044 00045 double alphaEnhancement; 00046 double sigma2; 00047 00048 double lambda; 00049 00050 Real3CImage* I0; // origin image 00051 Real3CImage* I; // current image 00052 00053 RImage* Nxy; // sqrt de (lambda+) (Shapiro norme) 00054 00055 ShockFlow shock; 00056 00057 protected: 00058 00059 virtual double g(double indicator, double sigma); 00060 00061 virtual void computeIndicator(Real3CImage& image); 00062 virtual void computeIndicator(AnImage& mask, Real3CImage& image); 00063 00064 virtual double operation(RImage& channel, int c, int x, int y); 00065 00066 virtual void operations(Real3CImage& result, Real3CImage& image); 00067 virtual void operations(AnImage& mask, Real3CImage& result, Real3CImage& image); 00068 00069 public: 00070 00071 CombinedDericheFilter(int n=50, double dalpha=0.05, double atau1=0.1, double ealpha=0.05, double atau2=0.1); 00072 virtual ~CombinedDericheFilter(){} 00073 00074 00075 // single shot filtering 00076 virtual Real3CImage* filter(Real3CImage* src, Real3CImage* dest=0); 00077 virtual Real3CImage* selectedFilter(AnImage* mask, Real3CImage* src, Real3CImage* dest=0); 00078 00079 00080 00081 virtual void report(FILE* file){} 00082 }; 00083 00084 00085 #endif