123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /**
- * @file ImagePyramid.cpp
- * @brief gauss image pyramid
- * @author Erik Rodner
- * @date 02/06/2008
- */
- #include <iostream>
- #include "vislearning/image/ImagePyramid.h"
- using namespace OBJREC;
- using namespace std;
- ImagePyramid::ImagePyramid( const NICE::Image & img,
- int maxLevels,
- double scaleSpacing,
- int max_xsize,
- int max_ysize )
- {
- pyramid.push_back ( NICE::Image(img) );
- for ( int i = 1 ; i < maxLevels ; i++ )
- {
- int old_xsize = pyramid[i-1].width();
- int old_ysize = pyramid[i-1].height();
- double new_xsize = old_xsize / scaleSpacing;
- double new_ysize = old_ysize / scaleSpacing;
- if ( (new_xsize < max_xsize) || (new_ysize < max_ysize) )
- break;
- NICE::Image gauss (old_xsize, old_ysize);
- NICE::FilterT<unsigned char, unsigned char, unsigned char> filter;
- filter.filterGaussSigmaApproximate ( *(&pyramid[i-1]), 1.0, &gauss );
- //deprecated: filterGauss(pyramid[i-1], 2, &gauss);
- NICE::Image newLevel ((int)new_xsize, (int)new_ysize);
- // Trafo trafo;
- // trafo.Scale(0, 0, (new_xsize-1)/(old_xsize-1),
- // (new_ysize-1)/(old_ysize-1));
- // Transform(trafo, gauss, newLevel);
- NICE::scale ( gauss, &newLevel );
- NICE::scale ( gauss, &newLevel );
- pyramid.push_back(newLevel);
- }
- }
- ImagePyramid::~ImagePyramid()
- {
- }
- const NICE::Image & ImagePyramid::getLevel ( int i ) const
- {
- return pyramid[i];
- }
- int ImagePyramid::getNumLevels () const
- {
- return pyramid.size();
- }
- void ImagePyramid::getOriginalCoordinates ( int x, int y, int level, double & xo, double & yo ) const
- {
- int xsize_orig = pyramid[0].width();
- int ysize_orig = pyramid[0].height();
- int xsize = pyramid[level].width();
- int ysize = pyramid[level].height();
- xo = x*(double)(xsize_orig)/xsize;
- yo = y*(double)(ysize_orig)/ysize;
- }
- void ImagePyramid::getLevelCoordinates ( double xo, double yo, int level, double & xl, double & yl ) const
- {
- int xsize_orig = pyramid[0].width();
- int ysize_orig = pyramid[0].height();
- int xsize = pyramid[level].width();
- int ysize = pyramid[level].height();
- xl = xo*(double)(xsize)/xsize_orig;
- yl = yo*(double)(ysize)/ysize_orig;
- }
- void ImagePyramid::show() const
- {
- #ifndef NOVISUAL
- for ( size_t i = 0 ; i < pyramid.size() ; i++ )
- showImage(pyramid[i]);
- /* skipped because of new visualization functions
- GetChar();
- for ( size_t i = 0 ; i < pyramid.size() ; i++ )
- Show(OFF, pyramid[i]);
- */
- #else
- fprintf (stderr, "ImagePyramid::show(): visualization disabled !\n");
- #endif
- }
|