00001 #ifndef __RCDDInpainter__
00002 #define __RCDDInpainter__
00003
00026 #include <stdio.h>
00027
00028 #include "RImage.hpp"
00029 #include "AbsRImageFilter.hpp"
00030
00031 class RCDDInpainter : public AbsRImageFilter
00032 {
00033 private:
00034
00035 bool optimisation;
00036
00037 double dt;
00038
00039 RImage* I0;
00040 RImage* I;
00041
00042 RImage* guxNorme;
00043 RImage* guyNorme;
00044
00045
00046 double kX, kY, kNorme;
00047 double ux2, uy2, gu2Norme;
00048 double ux2Norme, uy2Norme;
00049
00050 protected:
00051
00052 void precompute();
00053
00054 void computeGradient(int x, int y, int idx, int idy);
00055 void computeCurvature(int x, int y, int idx, int idy);
00056
00057 double g(double value);
00058 double getJ(int x, int y, int idx, int idy);
00059
00060 double divergentJ(int x, int y)
00061 { return ( getJ(x,y,1,0)-getJ(x,y,-1,0) + getJ(x,y,0,1)-getJ(x,y,0,-1) ); }
00062
00063 public:
00064
00065 RCDDInpainter(bool optimized=false, double deltaT=0.2);
00066 virtual ~RCDDInpainter(){}
00067
00068 virtual void prepare(RImage* src);
00069 virtual void clear(){ delete guxNorme; delete guyNorme; }
00070
00071
00072 virtual RImage* filter(RImage* src, RImage* dest=0){ return 0; }
00073 virtual RImage* selectedFilter(AnImage* mask, RImage* src, RImage* dest=0);
00074
00075 virtual void report(FILE* file){ fprintf(file,"Real Bertalmio Inpainter\n"); }
00076 };
00077
00078
00079 #endif