Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   Related Pages  

CImage.hpp

00001 #ifndef __CImage__
00002 #define __CImage__
00003 
00004 
00005 
00024 #include <stdio.h>
00025 #include <math.h>
00026 #include <memory.h>
00027 
00028 
00029 #include "RComplex.hpp"
00030 #include "AnImage.hpp"
00031 
00032 #include "AbsLimiter.hpp"
00033 
00034 class CImage 
00035 {
00036 private:
00037         
00038 bool                    normalisation;          // 0..1 range
00039 int                     width;
00040 int                     height;
00041 
00042 int                     channel;
00043 
00044 RComplex*               p1;
00045 RComplex**              data;
00046 
00047 double          PI;
00048 
00049 
00050 public:
00051 
00052 CImage( int w, int h );
00053 CImage( int w, int h , const RComplex& value);
00054 CImage( AnImage* source );
00055 CImage( AnImage* source , int achannel );
00056 CImage( AnImage* source, bool normalized );
00057 CImage( CImage& im);                                                            // copy
00058 
00059 ~CImage(){ delete[] data; delete[] p1; }
00060 
00061 CImage* copy();
00062 CImage* scaleDown(int multiplier=2);
00063 
00064 
00065 RComplex* getData(){return p1;}
00066 
00067 void    set(CImage& im); 
00068 void    set(CImage& im, int n, int* xp, int* yp);
00069 
00070 bool isNormalized(){ return normalisation; }
00071 inline int getWidth(){ return width; }
00072 inline int getHeight(){ return height; }
00073 
00074 
00075 inline RComplex get(int x, int y){ return data[x][y]; }
00076 inline void             set(int x,int y, double value){ data[x][y]= RComplex(value); }
00077 inline void             set(int x,int y, const RComplex& value){ data[x][y]= value; }
00078 
00079 RComplex        getSafe(int x, int y);
00080 void    setSafe(int x,int y, const RComplex& value);
00081 
00082 
00083 // compute simple operations
00084 
00085 void    operator*=( double value );
00086 void    operator/=( double value );
00087 void    operator+=( double value );
00088 void    operator-=( double value );
00089 
00090 void    operator*=( const RComplex& value );
00091 void    operator/=( const RComplex& value );
00092 void    operator+=( const RComplex& value );
00093 void    operator-=( const RComplex& value );
00094 
00095 void    operator+=( CImage& image );
00096 void    operator-=( CImage& image );
00097 
00098 void    mult( double rsat );
00099 
00100 void    convolveHV(int m1, int m2, int m3);                     // near inplace
00101 
00102 void    inverse(double biais=0.0000001);
00103 void    root();
00104 void    sqr();
00105 
00106 RComplex        laplacian(int x, int y);
00107 RComplex        isometricLaplacian(int x, int y);
00108 
00109 
00110 // central differences
00111 RComplex dfX_0(int x, int y);
00112 RComplex dfY_0(int x, int y);
00113 
00114 RComplex dfX_0_div2(int x, int y, int idx, int idy);                    // step demi    by averaging
00115 RComplex dfY_0_div2(int x, int y, int idx, int idy);
00116 
00117 RComplex dfX_0_2(int x, int y);                                                         // step 2
00118 RComplex dfY_0_2(int x, int y);
00119 
00120 // oriented differences
00121 RComplex dfX_p1(int x, int y);
00122 RComplex dfY_p1(int x, int y);
00123 RComplex dfX_m1(int x, int y);
00124 RComplex dfY_m1(int x, int y);
00125 
00126 // second differential
00127 RComplex dfX2(int x, int y);
00128 RComplex dfY2(int x, int y);
00129 RComplex dfXY(int x, int y);
00130 RComplex dfXYc(int x, int y);
00131 
00132 RComplex dfX2_2(int x, int y);          // step 2
00133 RComplex dfY2_2(int x, int y);
00134 RComplex dfXY_2(int x, int y);
00135 
00136 
00137 // derivee 1 along normal
00138 RComplex In(int x, int y);
00139 RComplex In(AbsLimiter* limiter, int x, int y);
00140 RComplex InMinmod(int x, int y);
00141 
00142 // derivee 2 along normal
00143 RComplex Inn(int x, int y);
00144 
00145 // derivee 2 along tangent
00146 RComplex Iee(int x, int y);
00147 
00148 
00149 
00150 };
00151 
00152 #endif
SourceForge.net Logo
Restoreinpaint sourceforge project `C++/Java Image Processing, Restoration, Inpainting Project'.

Bernard De Cuyper: Open Project Leader: Concept, design and development.
Bernard De Cuyper & Eddy Fraiha 2002, 2003. Bernard De Cuyper 2004. Open and free, for friendly usage only.
Modifications on Belgium ground of this piece of artistic work, by governement institutions or companies, must be notified to Bernard De Cuyper.
bern_bdc@hotmail.com