00001 #ifndef __RDistanceAosOp__
00002 #define __RDistanceAosOp__
00003
00004
00042 #include <stdio.h>
00043
00044 #include "AbsRImageFilter.hpp"
00045
00046 #include "AbsTriDiagonalLS.hpp"
00047
00048 class RDistanceAosOp : public AbsRImageFilter
00049 {
00050 protected:
00051
00052
00053
00054 int m;
00055
00056 int w, h;
00057
00058 int iterMax;
00059 double tmin, tmax;
00060 double K,K2;
00061
00062 RImage* distanceMapEdges;
00063
00064 double sigma;
00065 bool iirUsed;
00066
00067 bool nonLinear;
00068
00069 AbsRImageFilter* blurrer;
00070 AbsRImageFilter* gradient;
00071
00072 RImage* Isigma;
00073 RImage* IgradNorme;
00074
00075 AbsTriDiagonalLS* hThomasLS;
00076
00077 AbsTriDiagonalLS* vThomasLS;
00078
00079 protected:
00080
00081 virtual double getTau(int x, int y);
00082
00083 virtual void init(RImage* im);
00084 virtual void gradientRegularisation(RImage* im);
00085
00086 virtual double g(int i, int j)=0;
00087
00088 public:
00089
00090 RDistanceAosOp(RImage* edgeDistance=0, int iterations=8, double t0= 0.0, double tMax=20.0,
00091 double k=16.0, double asigma=5.0,
00092 bool iirFlag=false, bool nonLinearFlag=true);
00093 virtual ~RDistanceAosOp(){delete gradient;}
00094
00095 virtual void setEdgeDistance(RImage* distanceMap){ distanceMapEdges= distanceMap; }
00096
00097
00098 virtual RImage* filter(RImage* src, RImage* dest=0);
00099 virtual RImage* selectedFilter(AnImage* mask, RImage* src, RImage* dest=0);
00100
00101 virtual void report(FILE* file){ fprintf(file,"Real Simple Aos Operator\n"); }
00102 };
00103
00104
00105 #endif