00001 #ifndef __RLysaker2thOrderFilter__ 00002 #define __RLysaker2thOrderFilter__ 00003 00004 00005 00038 #include <stdio.h> 00039 00040 00041 #include "AbsRImageFilter.hpp" 00042 00043 00044 class RLysaker2thOrderFilter : public AbsRImageFilter 00045 { 00046 protected: 00047 00048 RImage* u0; // origin image 00049 RImage* u; // current image 00050 00051 00052 RImage* aDUx; // second order norme 00053 RImage* bDUy; // second order norme 00054 RImage* deltaU; //difference to target to compute dynamicaly lambda 00055 00056 double lambda; // used for linear constrains around the origin 00057 double sigma2; 00058 double epsilon; 00059 00060 double sumI0_2; // cached value for sigma2 00061 00062 int niterations; 00063 double dt; 00064 00065 protected: 00066 00067 virtual void channelConstrain(); 00068 virtual void channelConstrain(AnImage& mask); 00069 00070 virtual double operation(RImage* im, int x, int y); 00071 00072 virtual void operations(RImage* result); 00073 virtual void operations(AnImage& mask, RImage* result); 00074 00075 public: 00076 00077 RLysaker2thOrderFilter(int n, double rdt=0.1); 00078 virtual ~RLysaker2thOrderFilter(){ } 00079 00080 virtual void setMask(int n, int* xp, int* yp){ xm=xp; ym=yp; nMask=n; } 00081 00082 00083 virtual RImage* filter(RImage* src, RImage* dest=0); 00084 virtual RImage* selectedFilter(AnImage* mask, RImage* src, RImage* dest=0); 00085 00086 virtual void report(FILE* file){} 00087 }; 00088 00089 00090 #endif