00001 #ifndef __AbsFRestorationLS__ 00002 #define __AbsFRestorationLS__ 00003 00004 00025 #include <stdio.h> 00026 00027 #include "AbsFImageFilter.hpp" 00028 00029 #include "AFSpatialDiscretisation.hpp" 00030 00031 00032 class AbsFRestorationLS : public AbsFImageFilter 00033 { 00034 protected: 00035 00036 bool pixelNormalisation; 00037 00038 double epsilon; 00039 00040 int outerIterations; 00041 int innerIterations; 00042 00043 float tau; 00044 00045 AFSpatialDiscretisation* spatialModel; 00046 00047 bool nonLinear; // flag to recompute gradient each iteration 00048 00049 00050 protected: 00051 00052 virtual void init(FImage* im); 00053 00054 // U(k+1) <--- U(k) 00055 virtual FImage* solveSingle(FImage* uk, FImage* uk1=0)=0; 00056 00057 public: 00058 00059 AbsFRestorationLS(int outerIter, double t, AFSpatialDiscretisation* smodel, 00060 bool normalized=true, bool nonLinearFlag=true); 00061 AbsFRestorationLS(int outerIter, int innerIter, double t, AFSpatialDiscretisation* smodel, 00062 bool normalized=true, bool nonLinearFlag=true); 00063 virtual ~AbsFRestorationLS(){} 00064 00065 // single shot filtering 00066 virtual FImage* filter(FImage* src, FImage* dest=0); 00067 virtual FImage* selectedFilter(AnImage* mask, FImage* src, FImage* dest=0) 00068 { return filter(src, dest); } 00069 00070 virtual void report(FILE* file){ fprintf(file,"Simple Anisotropic Operator\n"); } 00071 }; 00072 00073 00074 #endif