00001 #ifndef __VOTING_TABLE_H 00002 #define __VOTING_TABLE_H 00003 00004 #include <boost/smart_ptr.hpp> 00005 #include <boost/multi_array.hpp> 00006 #include <boost/numeric/ublas/vector.hpp> 00007 #include <map> 00008 #include <mimas/mm_image.h> 00009 #ifndef NDEBUG 00010 #include <mimas/mm_image_qtoutput.h> 00011 #endif 00012 #include <mimas/mm_object.h> 00013 #include <mimas/mm_xml_reference.h> 00014 #include <utility> 00015 #include <vector> 00016 #include "calibration.hh" 00017 #include "geometric_map.hh" 00018 #include "geometric_voting_statistics.hh" 00019 #include "mi_pose.hh" 00020 00026 class voting_table: public mimas::mm_object 00027 { 00028 public: 00042 voting_table( const calibration_ptr &_calib, 00043 const mimas::mm_xml_reference< XalanElement > 00044 &geometricVotingNode, int _samplingRate, int _fringe, 00045 short int minGradient, geometric_map_ptr _hash_map, 00046 bool _verbose ); 00060 std::vector< std::pair< mi_pose, double > > recognise 00061 ( const mimas::mm_image< bool > &scene_features, 00062 const std::vector< boost::numeric::ublas::vector< int > > &points, 00063 const mi_pose &poseInv, 00064 geometric_voting_statistics *statistic ) const; 00069 double get_z_resolution(void) const { return z_resolution; } 00072 geometric_map_ptr get_hash_map(void) const { return hash_map; } 00073 protected: 00080 mi_pose pose2d( const mi_pose &pose, int x, int y ) const; 00086 int pose_depth( const mi_pose &pose ) const; 00096 mi_pose pose3d( const mi_pose &pose, int x, int y, int z ) const; 00106 bool verification( const mimas::mm_image< bool > &scene_features, 00107 const mi_pose &objectPose, 00108 geometric_voting_statistics *statistic ) const; 00110 calibration_ptr calib; 00112 int sampling_rate; 00114 int fringe; 00117 double min_hits; 00122 double max_misses; 00126 int skip; 00130 double z_resolution; 00134 std::vector< std::vector< boost::numeric::ublas::vector< int > > > 00135 points_stack; 00138 int max_num_features; 00143 boost::multi_array< std::map< int, int >, 2 > hash_table; 00147 std::vector< mi_pose > candidates; 00150 geometric_map_ptr hash_map; 00152 bool verbose; 00153 #ifndef NDEBUG 00154 00155 mutable mimas::mm_image_qtoutput< mimas::mm_rgba< unsigned char > > display; 00156 #endif 00157 }; 00158 00160 typedef boost::shared_ptr< voting_table > voting_table_ptr; 00161 00162 #endif