00001 #ifndef __C3CImage__
00002 #define __C3CImage__
00003
00004
00005
00024 #include <stdio.h>
00025 #include <math.h>
00026 #include <memory.h>
00027
00028 #include "CImage.hpp"
00029
00030 class C3CImage
00031 {
00032 private:
00033
00034 bool normalisation;
00035 int width;
00036 int height;
00037
00038 CImage* channel[3];
00039
00040 double PI;
00041
00042 public:
00043
00044 C3CImage( int w, int h , double value=0);
00045 C3CImage( int w, int h , double c1, double c2, double c3);
00046 C3CImage( int w, int h , const RComplex& value);
00047 C3CImage( AnImage* source );
00048 C3CImage( AnImage* source , int achannel );
00049 C3CImage( AnImage* source, bool normalized );
00050 C3CImage( C3CImage& im);
00051
00052 ~C3CImage();
00053
00054 C3CImage* copy();
00055
00056 int getChannels(){ return 3; }
00057
00058 CImage* getChannel(int i){ return channel[i]; }
00059 void setChannel(int i, CImage* image){ channel[i]= image; }
00060
00061 RComplex* getData(int i){return channel[i]->getData();}
00062
00063 void set(C3CImage& im);
00064
00065 bool isNormalized(){ return normalisation; }
00066 int getWidth(){ return width; }
00067 int getHeight(){ return height; }
00068 int numberOfChannels(){ return 3; }
00069
00070 RComplex get(int ch, int x, int y){ return channel[ch]->get(x,y); }
00071 void set(int ch, int x,int y, double value){ channel[ch]->set(x,y,value); }
00072 void set(int ch, int x,int y, const RComplex& value){ channel[ch]->set(x,y,value); }
00073
00074
00075
00076 void operator*=( double value );
00077 void operator/=( double value );
00078 void operator+=( double value );
00079 void operator-=( double value );
00080
00081 void operator*=( const RComplex& value );
00082 void operator/=( const RComplex& value );
00083 void operator+=( const RComplex& value );
00084 void operator-=( const RComplex& value );
00085
00086 void operator+=( C3CImage& image );
00087 void operator-=( C3CImage& image );
00088
00089 void mult( double rsat );
00090
00091 void inverse(double biais=0.0000001);
00092 void root();
00093 void sqr();
00094
00095 RComplex laplacian(int ch, int x, int y)
00096 { return channel[ch]->laplacian(x, y); }
00097 RComplex isometricLaplacian(int ch, int x, int y)
00098 { return channel[ch]->isometricLaplacian(x, y); }
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 RComplex dfX_0(int ch, int x, int y){ return channel[ch]->dfX_0(x, y); }
00119 RComplex dfY_0(int ch, int x, int y){ return channel[ch]->dfY_0(x, y); }
00120
00121 RComplex dfX_0_2(int ch, int x, int y){ return channel[ch]->dfX_0_2(x, y); }
00122 RComplex dfY_0_2(int ch, int x, int y){ return channel[ch]->dfY_0_2(x, y); }
00123
00124
00125 RComplex dfX_p1(int ch, int x, int y){ return channel[ch]->dfX_p1(x, y); }
00126 RComplex dfY_p1(int ch, int x, int y){ return channel[ch]->dfY_p1(x, y); }
00127 RComplex dfX_m1(int ch, int x, int y){ return channel[ch]->dfX_m1(x, y); }
00128 RComplex dfY_m1(int ch, int x, int y){ return channel[ch]->dfY_m1(x, y); }
00129
00130
00131 RComplex dfX2(int ch, int x, int y){ return channel[ch]->dfX2(x, y); }
00132 RComplex dfY2(int ch, int x, int y){ return channel[ch]->dfY2(x, y); }
00133 RComplex dfXY(int ch, int x, int y){ return channel[ch]->dfXY(x, y); }
00134
00135 RComplex dfX2_2(int ch, int x, int y){ return channel[ch]->dfX2_2(x, y); }
00136 RComplex dfY2_2(int ch, int x, int y){ return channel[ch]->dfY2_2(x, y); }
00137 RComplex dfXY_2(int ch, int x, int y){ return channel[ch]->dfXY_2(x, y); }
00138 };
00139
00140 #endif