Wavelet and Image class library  1.3.2
Image.hh
Go to the documentation of this file.
00001 /*
00002  * class Image
00003  *
00004  * $Date$
00005  * $Revision$
00006  *
00007  */
00008 
00009 #ifndef IMAGE_HH__
00010 #define IMAGE_HH__
00011 
00012 #include "WImage/ColumnVector.hh"
00013 #include "WImage/RowVector.hh"
00014 #include "WImage/FullVector.hh"
00015 #ifndef _WIN32_WCE
00016 #include "WImage/GreymapReader.hh"
00017 #include "WImage/GreymapWriter.hh"
00018 #endif
00019 #include "WImage/FileName.hh"
00020 
00025 class Image;
00026 
00030 /* abstract */
00031 class ResizeFillFunc {
00032 public:
00036   virtual ~ResizeFillFunc (void) {}
00056   virtual coeff operator() (const Image &scaled, double factor, int y, int x,
00057                             int newY, int newX, int yOffset, int xOffset) = 0;
00058 };
00059 
00064 enum ExtendFunc { ef_mirror, ef_outerBorder };
00065 
00069 /*abstract*/
00070 class
00071 Image
00072 {
00073 public:
00074 
00076   Image (void);
00078   virtual ~Image (void) {}
00079 
00083   inline int rows (void) const { return m_ysize; }
00087   inline int cols (void) const { return m_xsize; }
00091   inline int size (void) const { return m_xysize; }
00092 
00099   inline ColumnVector &col (int x = 0) { m_acol->go (x); return *m_acol; }
00106   inline RowVector &row (int y = 0) { m_arow->go (y); return *m_arow; }
00107 
00114   inline FullVector &full (int xy = 0) { m_afull->go (xy); return *m_afull; }
00115 
00123   virtual coeff at (int y, int x) const = 0;
00129   virtual coeff at (int abs) const = 0;
00139   virtual void to (int y, int x, coeff val) = 0;
00145   virtual void to (int abs, coeff val) = 0;
00146 
00154   virtual int abs (int y, int x) const = 0;
00155 
00164   virtual bool epsilons (Image &img, coeff epsilon) const = 0;
00177   bool epsilonsAt (int y, int x, coeff value, coeff epsilon) const;
00188   bool epsilonsAt (int abs, coeff value, coeff epsilon) const;
00194   virtual bool equals (Image &img) const = 0;
00195 
00204   virtual double iproduct (Image &img) const;
00205 
00209   virtual void normalize (coeff factor);
00210 
00214   virtual void unnormalize (coeff factor);
00215 
00235   virtual void gammaCorrection (double factor, int yoffs = 0, int xoffs = 0,
00236                                 int ysize = -1, int xsize = -1,
00237                                 int norm = 255);
00238 
00262   double gammaCorrectionAuto (int rows, int columns, int yoffs = 0,
00263                               int xoffs = 0, int ysize = -1,int xsize = -1,
00264                               int norm = 255);
00265 
00288   virtual void histEqualization (int yoffs = 0, int xoffs = 0,
00289                                  int ysize = -1, int xsize = -1,
00290                                  int startH = 0, int endH = 255);
00291 
00307   virtual void beautify (int yoffs = 0, int xoffs = 0,
00308                          int ysize = 0, int xsize = 0);
00309 
00318   virtual void truncate (coeff min = 0, coeff max = 255);
00319 
00322   virtual void pixelize (void);
00323 
00325   void valadjust (void);
00326 
00327 #ifndef _WIN32_WCE
00328 
00336   virtual void read (char const *fname, int rawy = 0, int rawx = 0) = 0;
00347   virtual void read (char const *fname, filetype ftype,
00348                      int rawy = 0, int rawx = 0) = 0;
00349 
00356   virtual void write (char const *fname, bool beautify = false) = 0;
00365   virtual void write (char const *fname, filetype ftype,
00366                       bool beautify = false) = 0;
00367 #endif
00368 
00374   virtual void importCoeffs (int rows, int cols, coeff *buf);
00375 
00379   virtual coeff * exportCoeffs (void);
00380 
00386   virtual void importPixels (int rows, int cols, pixel *buf);
00387 
00392   virtual pixel * exportPixels (void) const;
00393 
00398   virtual Image *clone (void) const = 0;
00402   virtual void copy (Image &img);
00403 
00415   Image *crop (int yoffs, int xoffs, int ysize, int xsize) const;
00423   virtual void paste (int yoffs, int xoffs, Image &img);
00429   virtual void shift (int yoffs, int xoffs);
00430 
00434   int anasteps (void) const { return m_asteps; }
00438   int synsteps (void)  const { return m_ssteps; }
00442   void anasteps (int steps) { m_asteps = steps; }
00446   void synsteps (int steps) { m_ssteps = steps; }
00447 
00455   void fill (coeff value, int fromY = 0, int fromX = 0,
00456              int toY = -1, int toX = -1);
00457 
00465   virtual coeff smax (int fromY = 0, int fromX = 0,
00466                       int toY = -1, int toX = -1) const = 0;
00474   virtual coeff smin (int fromY = 0, int fromX = 0,
00475                       int toY = -1, int toX = -1) const = 0;
00483   virtual coeff amax (int fromY = 0, int fromX = 0,
00484                       int toY = -1, int toX = -1) const = 0;
00492   virtual coeff amin (int fromY = 0, int fromX = 0,
00493                       int toY = -1, int toX = -1) const = 0;
00502   virtual coeff saverage (int fromY = 0, int fromX = 0,
00503                           int toY = -1, int toX = -1) const = 0;
00504 
00513   virtual coeff aaverage (int fromY = 0, int fromX = 0,
00514                           int toY = -1, int toX = -1) const = 0;
00515 
00526   virtual coeff sqvariance (int fromY = 0, int fromX = 0,
00527                             int toY = -1, int toX = -1) const;
00528 
00542   virtual coeff variance (int fromY, int fromX, int toY, int toX,
00543                           coeff avg, bool abs) const;
00544 
00555   virtual coeff variance (int fromY = 0, int fromX = 0, int toY = -1,
00556                           int toX = -1, bool abs = false) const;
00557 
00569   virtual coeff sdeviation (int fromY = 0, int fromX = 0, int toY = -1,
00570                             int toX = -1, bool abs = false) const;
00571 
00581   virtual void resize (int rows, int cols) = 0;
00582 
00598   virtual Image *fitInto (int rows, int cols,
00599                           int fill = -1, int function = 0) const;
00600 
00619   virtual Image *fitInto (int rows, int cols, bool mirrorExtend,
00620                           int function = 0) const;
00621 
00638   virtual Image *fitInto (int rows, int cols, ExtendFunc extend,
00639                           int function = 0) const;
00640 
00656   virtual Image *fitInto (int rows, int cols, ResizeFillFunc *fillFunc,
00657                           int function = 0) const;
00658 
00668   virtual Image *scale (double factor, int function = 0) const;
00669 
00681   virtual Image *scale (double yFactor, double xFactor, int function = 0) const;
00682 
00683 #ifdef USE_DEPRECATED_API
00684 
00692   inline bool epsilons (Image *img, coeff epsilon) const
00693   { return this->epsilons (*img, epsilon); }
00699   inline bool equals (Image *img) const { return this->equals (*img); }
00700 #endif
00701 protected:
00704   ColumnVector *m_acol;
00707   RowVector *m_arow;
00710   FullVector *m_afull;
00712   int m_ysize;
00714   int m_xsize;
00716   int m_xysize;
00718   int m_asteps;
00720   int m_ssteps;
00726   void dimcheck (const Image &img) const;
00734   virtual Image *mkImage (int rows = 0, int cols = 0) const = 0;
00735 
00736 }; /* class Image */
00737 
00740 #endif /* IMAGE_HH__ */
00741 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines