|
Wavelet and Image class library
1.3.2
|
00001 /* 00002 * class ImageResizer 00003 * 00004 * $Date$ 00005 * $Revision$ 00006 * 00007 */ 00008 00009 #ifndef IMAGE_RESIZER_HH__ 00010 #define IMAGE_RESIZER_HH__ 00011 00012 #include "WImage/ColorImage.hh" 00013 #include "Wave/WaveletTransform.hh" 00014 00026 class ImageResizer 00027 { 00028 public: 00029 00046 ImageResizer (const ColorImage &img, FilterSet &flt, int *fill = NULL, 00047 coeff threshold = 0.001, bool optimizeImage = false, 00048 int scalingStrategy = 0); 00049 00053 ~ImageResizer (void); 00054 00071 ColorImage* resize (int rows, int cols, int steps = 1); 00072 00089 ColorImage* redimension (int rows, int cols, int steps = 1); 00090 00095 inline double getInnerAvgPerSize (void) const { return m_innerAvgPerSize; } 00100 inline double getInnerSDeviation (void) const { return m_innerSDeviation; } 00105 inline int getInnerRegionSize (void) const { return m_innerRegionSize; } 00106 00111 inline double threshold (void) const { return m_threshold; } 00116 inline void threshold (double threshold) { m_threshold = threshold; } 00117 00122 inline void optimizeImage (bool optimizeImage) { m_optimizeImage = optimizeImage; } 00127 inline bool optimizeImage (void) { return m_optimizeImage; } 00128 00129 protected: 00135 void calcDimensions (int rows, int cols); 00136 00146 int fixDimensions (int rows, int cols); 00147 00154 void calcOptimization (void); 00155 00171 void calcOuterStats (coeff &avg, coeff &variance, int firstTop, int firstLeft, 00172 int firstBottom, int firstRight, int secondTop, int secondLeft, 00173 int secondBottom, int secondRight); 00174 00186 void calcInnerStats (coeff &avg, coeff &sDev, 00187 int top, int left, int bottom, int right); 00188 00205 void calcStats (int nRows, int nCols, coeff &outerAvg, 00206 coeff &outerSDev, coeff &innerAvg, coeff &innerSDev); 00207 00212 void genMaxDetail (int steps); 00213 00227 ColorImage* getUnscaledImage (int rows, int cols, int discardRows, int discardCols); 00228 00242 ColorImage* getScaledImage (int rows, int cols, int discardRows, int discardCols); 00243 00255 ColorImage* getCroppedImage (int discardRows, int discardCols); 00256 00276 ColorImage* doResize (int rows, int cols, int steps, bool redimensionOnly); 00277 00278 const ColorImage &m_image; 00279 Image *m_maxDetail; 00280 FilterSet &m_filter; 00281 float m_qRows; 00282 float m_qCols; 00283 int *m_fill; 00284 int m_scalingStrategy; 00285 double m_innerAvgPerSize; 00286 double m_innerSDeviation; 00287 int m_innerRegionSize; 00288 coeff m_threshold; 00289 bool m_optimizeImage; 00290 bool m_optimizationCalculated; 00291 int m_cropMaxRows; 00292 int m_cropMaxCols; 00293 double m_rowsMapping; 00294 double m_colsMapping; 00295 int m_steps; 00296 enum { 00297 CROP_COLS, CROP_ROWS, CROP_BOTH_OR_NONE, CROP_AUTOMATICALLY 00298 } m_cropWhat; 00299 }; 00300 00303 #endif // IMAGE_RESIZER_HH__
1.7.6.1