00001 #ifndef __CSimpleAosOp__
00002 #define __CSimpleAosOp__
00003
00004
00049 #include <stdio.h>
00050
00051 #include "AbsCImageFilter.hpp"
00052
00053 #include "AbsCTriDiagonalLS.hpp"
00054
00055 class CSimpleAosOp : public AbsCImageFilter
00056 {
00057 protected:
00058
00059
00060
00061 int m;
00062
00063 int w, h;
00064
00065 int iterMax;
00066 double tau;
00067 double K,K2;
00068
00069 double theta;
00070
00071 double sigma;
00072 bool iirUsed;
00073
00074 bool nonLinear;
00075
00076 AbsCImageFilter* blurrer;
00077 AbsCImageFilter* gradient;
00078
00079 CImage* Isigma;
00080 CImage* IgradNorme;
00081
00082 AbsCTriDiagonalLS* hCThomasLS;
00083
00084 AbsCTriDiagonalLS* vCThomasLS;
00085
00086 protected:
00087
00088 virtual void init(CImage* im);
00089 virtual void gradientRegularisation(CImage* im);
00090
00091 virtual RComplex g(int i, int j)=0;
00092
00093 public:
00094
00095 CSimpleAosOp(int iterations=8, double t=0.5, double ctheta=0.001,
00096 double k=16.0, double asigma=5.0,
00097 bool iirFlag=false, bool nonLinearFlag=true);
00098 virtual ~CSimpleAosOp(){delete gradient;}
00099
00100
00101 virtual CImage* filter(CImage* src, CImage* dest=0);
00102 virtual CImage* selectedFilter(AnImage* mask, CImage* src, CImage* dest=0);
00103
00104 virtual void report(FILE* file){ fprintf(file,"Complex Simple Aos Operator\n"); }
00105 };
00106
00107
00108 #endif