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 "../../Workers/Puma2/ImageMask.h" 00020 #include "../../Workers/Puma2/GrayLevelImage8.h" 00021 00022 #include "KeyPoint.h" 00023 #include "SurfExtractorBase.h" 00024 00025 #include "../../Workers/ParallelSurf/KeyPointDetector.h" 00026 #include "threadpool.hpp" 00027 00028 00029 00035 class ParallelSurfExtractor: public SurfExtractorBase 00036 { 00037 public: 00038 00040 ParallelSurfExtractor( int numThreads=0 ); 00041 00043 ParallelSurfExtractor( const ParallelSurfExtractor& other ); 00044 00046 virtual ~ParallelSurfExtractor(); 00047 00049 ParallelSurfExtractor& operator=( const ParallelSurfExtractor& other ); 00050 00052 virtual void setImage( const puma2::GrayLevelImage8 &pumaImage ); 00053 00055 virtual void setImage( const puma2::ColorImageRGB8 &pumaImage ); 00056 00058 virtual void getKeyPoints ( std::vector< KeyPoint >& keyPoints ); 00059 00060 virtual std::string getName(); 00061 00062 private: 00063 00064 parallelsurf::Image* m_IntegralImage; 00065 00066 boost::threadpool::pool *m_ThreadPool; 00067 00068 // define a Keypoint insertor 00069 class KeyPointVectInsertor : public parallelsurf::KeyPointInsertor 00070 { 00071 public: 00072 00073 KeyPointVectInsertor ( std::vector<parallelsurf::KeyPoint>& keyPoints ) : m_KeyPoints ( keyPoints ) {}; 00074 00075 inline virtual void operator() ( const parallelsurf::KeyPoint &panoKeyPoint ) 00076 { 00077 // std::cout << "."; 00078 m_KeyPoints.push_back ( panoKeyPoint ); 00079 } 00080 00081 private: 00082 00083 std::vector<parallelsurf::KeyPoint>& m_KeyPoints; 00084 }; 00085 }; 00086 00087 00088 #endif 00089