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