00001 #ifndef __PeronaFabFilter__
00002 #define __PeronaFabFilter__
00003
00025 #include <stdio.h>
00026
00027 #include "AnImage.hpp"
00028 #include "AbsRImageFilter.hpp"
00029
00030 #include "BeltramiFlow.hpp"
00031
00032 class PeronaFabFilter: public AbsRImageFilter
00033 {
00034 protected:
00035
00036 RImage* I0;
00037 RImage* I;
00038
00039 double gsigma;
00040 RImage* gradI0;
00041
00042 int nf;
00043 double kf;
00044
00045
00046 int nb;
00047 double alpha;
00048 double kb;
00049 double wb;
00050
00051 int niterations;
00052 double tau;
00053
00054 RImage* j1;
00055 RImage* j2;
00056
00057 protected:
00058
00059 virtual double g(int i, int j, double s);
00060
00061 virtual void precompute();
00062 virtual void precompute(AnImage& mask);
00063
00064 virtual double divergentJ(int x, int y)
00065 {
00066 return (j1->dfX_0(x,y) + j2->dfY_0(x,y));
00067 }
00068
00069 virtual void operations(RImage& result);
00070 virtual void operations(AnImage& mask, RImage& result);
00071
00072 public:
00073
00074 PeronaFabFilter(int n=16, double dt=0.1,
00075 int nf=4, int nb=2, double gSigma=3.0, double rkf=0.1, double rkb= 6.0, double rw=2.0);
00076 virtual ~PeronaFabFilter(){}
00077
00078
00079 virtual RImage* filter(RImage* src, RImage* dest=0);
00080 virtual RImage* selectedFilter(AnImage* mask, RImage* src, RImage* dest=0);
00081
00082 virtual void report(FILE* file){}
00083 };
00084
00085
00086 #endif