00001 #ifndef __RAxiomaticMRInpainter__
00002 #define __RAxiomaticMRInpainter__
00003 
00004 
00005 
00029 #include <stdio.h>
00030 
00031 #include "RImage.hpp"
00032 #include "AbsRImageFilter.hpp"
00033 
00034 class RAxiomaticMRInpainter : public  AbsRImageFilter
00035 {
00036 protected:
00037 
00038 bool                            optimisation;           
00039 
00040 double                          a, b;                           
00041 double                          c;                                      
00042 
00043 double                          aL;
00044 
00045 double                          dt;
00046 
00047 RImage*                         I0;
00048 RImage*                         I;
00049 
00050 double                          lambda;
00051 
00052 RImage*                         guNorme;
00053 RImage*                         k;
00054 
00055 
00056 double                          du_x2, du_y2, k_2;
00057 double                          ux2, uy2, gu2Norme;
00058 double                          ux2Norme, uy2Norme;
00059 
00060 protected:
00061 
00062 virtual void    precompute(AnImage* mask);
00063 
00064 virtual void    computeGradient(int x, int y, int idx, int idy);
00065 virtual void    computeCurvature(int x, int y, int idx, int idy);
00066 
00067 virtual double  getV(int x, int y, int idx, int idy);
00068 
00069 virtual double  divergentV(int x, int y)
00070         { return ( getV(x,y,1,0)-getV(x,y,-1,0) + getV(x,y,0,1)-getV(x,y,0,-1) ); }
00071 
00072 virtual double  operation(int x, int y);
00073 
00074 public:
00075 
00076 RAxiomaticMRInpainter(bool optimised= false, double deltaT=1.0, 
00077                                                 double av=0.2, double bv=0.2, double aLv= 0.2, double lambdav=0.0);
00078 virtual ~RAxiomaticMRInpainter(){}
00079 
00080 virtual void prepare(RImage* src);      
00081 virtual void clear(){ delete guNorme; delete k; }
00082 
00083 
00084 virtual RImage* filter(RImage* src, RImage* dest=0){ return 0; }
00085 virtual RImage* selectedFilter(AnImage* mask, RImage* src, RImage* dest=0);
00086 
00087 virtual void report(FILE* file){ fprintf(file,"Real Axiomatic MR Inpainter\n"); }
00088 };
00089 
00090 
00091 #endif