00001 #ifndef __FImage__
00002 #define __FImage__
00003
00004
00005
00024 #include <stdio.h>
00025 #include <math.h>
00026 #include <memory.h>
00027
00028 #include "AnImage.hpp"
00029
00030 class FImage
00031 {
00032 private:
00033
00034 bool normalisation;
00035 int width;
00036 int height;
00037
00038 int channel;
00039
00040
00041 float* p1;
00042 float** data;
00043
00044 double PI;
00045
00046
00047 public:
00048
00049 FImage( int w, int h );
00050 FImage( int w, int h , float value);
00051 FImage( AnImage* source );
00052 FImage( AnImage* source , int achannel );
00053 FImage( AnImage* source, bool normalized );
00054 FImage( FImage& im);
00055
00056 ~FImage(){ delete[] data; delete[] p1; }
00057
00058 FImage* copy();
00059 FImage* scaleDown(int multiplier=2);
00060
00061 float* getData(){return p1;}
00062
00063 void set(FImage& im);
00064 void set(FImage& im, int n, int* xp, int* yp);
00065
00066 bool isNormalized(){ return normalisation; }
00067 inline int getWidth(){ return width; }
00068 inline int getHeight(){ return height; }
00069
00070
00071 inline float get(int x, int y){ return data[x][y]; }
00072 inline void set(int x,int y, float value){ data[x][y]= value; }
00073
00074 float getSafe(int x, int y);
00075 void setSafe(int x,int y, float value);
00076
00077 void gdistance1( float value );
00078 void gdistance2( float value );
00079
00080
00081
00082 void operator*=( float value );
00083 void operator/=( float value );
00084 void operator+=( float value );
00085 void operator-=( float value );
00086
00087 void operator+=( FImage& image );
00088 void operator-=( FImage& image );
00089
00090 void mult( float rsat );
00091 void limit( float rmin, float rmax );
00092
00093 void convolveHV(int m1, int m2, int m3);
00094
00095 void inverse(float biais=0.0000001);
00096 void ln(float biais=1.0);
00097 void exp();
00098 void root();
00099 void sqr();
00100 void power(float value);
00101
00102 float laplacian(int x, int y);
00103 float isometricLaplacian(int x, int y);
00104 float normeGradient(int x, int y, float epsilon=1e-8);
00105
00106
00107 float meanCurvature(int x, int y);
00108 float curvature(int x, int y);
00109
00110 float gij(int i, int j, int x, int y);
00111 float lambdaPlus(int x,int y);
00112 float lambdaMinus(int x,int y);
00113 float normalDirection(int x, int y);
00114 float tangentDirection(int x, int y){ return (normalDirection(x,y)+PI/2.0); }
00115
00116
00117 float dfX_0(int x, int y);
00118 float dfY_0(int x, int y);
00119
00120 float dfX_0_div2(int x, int y, int idx, int idy);
00121 float dfY_0_div2(int x, int y, int idx, int idy);
00122
00123 float dfX_0_div2MinMod(int x, int y, int idx, int idy);
00124 float dfY_0_div2MinMod(int x, int y, int idx, int idy);
00125
00126 float dfX_0_2(int x, int y);
00127 float dfY_0_2(int x, int y);
00128
00129
00130 float dfX_p1(int x, int y);
00131 float dfY_p1(int x, int y);
00132 float dfX_m1(int x, int y);
00133 float dfY_m1(int x, int y);
00134
00135
00136 float dfX2(int x, int y);
00137 float dfY2(int x, int y);
00138 float dfXY(int x, int y);
00139 float dfXYc(int x, int y);
00140
00141 float dfX2_2(int x, int y);
00142 float dfY2_2(int x, int y);
00143 float dfXY_2(int x, int y);
00144
00145
00146 float dfX3(int x, int y);
00147 float dfY3(int x, int y);
00148
00149
00150
00151 float In(int x, int y);
00152
00153
00154 float Inn(int x, int y);
00155
00156
00157 float Iee(int x, int y);
00158
00159
00160 float g(int x, int y, int p=1);
00161
00162 float peronaMalikOperator(int x, int y);
00163 float meanCurvatureOperator(int x, int y);
00164 float beltramiOperator(int x, int y);
00165
00166 float gradCorrectiveViscosity(int x, int y);
00167
00168 void peronaMalikOperation(FImage& image, float coefficient);
00169 void peronaMalikRestoration(int nIterations, float coefficient);
00170
00171 void geodesicPeronaMalikOperation(FImage& image, float coefficient, float cgeod);
00172 void geodesicPeronaMalikRestoration(int nIterations, float coefficient, float cgeod);
00173
00174 void meanCurvatureOperation(FImage& image, float coefficient);
00175 void meanCurvatureRestoration(int nIterations, float coefficient);
00176
00177 void geodesicMeanCurvatureOperation(FImage& image, float coefficient, float cgeod);
00178 void geodesicMeanCurvatureRestoration(int nIterations, float coefficient, float cgeod);
00179
00180 void beltramiOperation(FImage& image, float coefficient);
00181 void beltramiRestoration(int nIterations, float coefficient);
00182
00183 void geodesicBeltramiOperation(FImage& image, float coefficient, float cgeod);
00184 void geodesicBeltramiRestoration(int nIterations, float coefficient, float cgeod);
00185 };
00186
00187 #endif