00001 #ifndef __IPeronaProximityFabOp__ 00002 #define __IPeronaProximityFabOp__ 00003 00004 00005 00028 #include <stdio.h> 00029 00030 #include "IMultiImageOp.hpp" 00031 #include "Real3CImage.hpp" 00032 00033 00034 class IPeronaProximityFabOp : public IMultiImageOp 00035 { 00036 private: 00037 00038 double gsigma; // blurring of the gradient 00039 00040 int nf; // order of (s/kf)^n 00041 double kf; // old lambda, used for linear constrains around the origin 00042 00043 00044 int nb; 00045 double alpha; // credit of backward diffusion 00046 double kb; // backward component 00047 double wb; // backward window 00048 00049 double tau; 00050 00051 double limitDistance; 00052 RImage* distanceMapEdges; 00053 00054 protected: 00055 00056 // mono channel 00057 virtual AnImage* greyFilter(AnImage* src, AnImage* dest=0); 00058 virtual AnImage* greySelectedFilter(AnImage* mask, AnImage* src, AnImage* dest=0); 00059 00060 // separate color channels 00061 virtual Real3CImage* scolorFilter(Real3CImage* src, Real3CImage* dest=0); 00062 virtual Real3CImage* scolorSelectedFilter(AnImage* mask, Real3CImage* src, Real3CImage* dest=0); 00063 00064 public: 00065 IPeronaProximityFabOp(int iter=16, double dt=0.1, RImage* dmap=0, double dlimit=5.0, 00066 int Nf=4, int Nb=2, double gSigma=3.0, double rkf=0.1, double rkb= 6.0, double rw=2.0, 00067 bool colorFlag= false):IMultiImageOp(iter,colorFlag) 00068 { 00069 limitDistance=dlimit; 00070 distanceMapEdges=dmap; 00071 00072 tau= dt; 00073 00074 nf= Nf; 00075 nb= Nb; 00076 gsigma=gSigma; 00077 kf= rkf; 00078 kb= rkb; 00079 wb= rw; 00080 } 00081 virtual ~IPeronaProximityFabOp(){} 00082 00083 void setEdgeDistance(RImage* distanceMap){ distanceMapEdges= distanceMap; } 00084 00085 virtual void report(FILE* file){} 00086 }; 00087 00088 00089 #endif