00001 #ifndef __FSimpleAosOp__
00002 #define __FSimpleAosOp__
00003
00004
00042 #include <stdio.h>
00043
00044 #include "AbsFImageFilter.hpp"
00045
00046 #include "AbsFTriDiagonalLS.hpp"
00047
00048 class FSimpleAosOp : public AbsFImageFilter
00049 {
00050 protected:
00051
00052
00053
00054 int m;
00055
00056 int w, h;
00057
00058 int iterMax;
00059 float tau;
00060 float K, K2;
00061
00062 float sigma;
00063 bool iirUsed;
00064
00065 bool nonLinear;
00066
00067 AbsFImageFilter* blurrer;
00068 AbsFImageFilter* gradient;
00069
00070 FImage* Isigma;
00071 FImage* IgradNorme;
00072
00073 AbsFTriDiagonalLS* hThomasLS;
00074
00075 AbsFTriDiagonalLS* vThomasLS;
00076
00077 protected:
00078
00079 virtual void init(FImage* im);
00080 virtual void gradientRegularisation(FImage* im);
00081
00082 virtual float g(int i, int j)=0;
00083 virtual float gHMin1(int i, int j){return g(i, j-1); }
00084 virtual float gHPlus1(int i, int j){return g(i, j+1); }
00085
00086 public:
00087
00088 FSimpleAosOp(int iterations=8, float t=0.5,
00089 float deltaGradient=16.0, float asigma=5.0,
00090 bool iirFlag=false, bool nonLinearFlag=true);
00091 virtual ~FSimpleAosOp(){delete gradient;}
00092
00093
00094 virtual FImage* filter(FImage* src, FImage* dest=0);
00095 virtual FImage* selectedFilter(AnImage* mask, FImage* src, FImage* dest=0);
00096
00097 virtual void report(FILE* file){ fprintf(file,"Real Simple Aos Operator\n"); }
00098 };
00099
00100
00101 #endif