00001 /******************************************************************************* 00002 * SurfExtractor.h 00003 * 00004 * (C) 2008 AG Aktives Sehen <agas@uni-koblenz.de> 00005 * Universitaet Koblenz-Landau 00006 * 00007 *******************************************************************************/ 00008 00009 #ifndef SurfExtractor_H 00010 #define SurfExtractor_H 00011 00012 #include <vector> 00013 #include <string> 00014 00015 00016 #include "Workers/Math/Box2D.h" 00017 #include "Workers/Math/Point2D.h" 00018 00019 #include "KeyPoint.h" 00020 #include "SurfExtractorBase.h" 00021 00022 #include "../ParallelSurf/KeyPointDetector.h" 00023 00024 #include "threadpool.hpp" 00025 00026 00027 00033 class ParallelSurfExtractor: public SurfExtractorBase 00034 { 00035 public: 00036 00038 ParallelSurfExtractor( int numThreads=0 ); 00039 00041 ParallelSurfExtractor( const ParallelSurfExtractor& other ); 00042 00044 virtual ~ParallelSurfExtractor(); 00045 00047 ParallelSurfExtractor& operator=( const ParallelSurfExtractor& other ); 00048 00050 virtual void setImage( const cv::Mat &image ); 00051 00053 virtual void getKeyPoints ( std::vector< KeyPoint >& keyPoints ); 00054 00055 virtual std::string getName(); 00056 00057 private: 00058 00059 parallelsurf::Image* m_IntegralImage; 00060 00061 boost::threadpool::pool *m_ThreadPool; 00062 00063 // define a Keypoint insertor 00064 class KeyPointVectInsertor : public parallelsurf::KeyPointInsertor 00065 { 00066 public: 00067 00068 KeyPointVectInsertor ( std::vector<parallelsurf::KeyPoint>& keyPoints ) : m_KeyPoints ( keyPoints ) {}; 00069 00070 inline virtual void operator() ( const parallelsurf::KeyPoint &panoKeyPoint ) 00071 { 00072 // std::cout << "."; 00073 m_KeyPoints.push_back ( panoKeyPoint ); 00074 } 00075 00076 private: 00077 00078 std::vector<parallelsurf::KeyPoint>& m_KeyPoints; 00079 }; 00080 }; 00081 00082 00083 #endif 00084