place_recognizer.cpp
Go to the documentation of this file.
00001 #include <vslam_system/place_recognizer.h>
00002 
00003 namespace vslam {
00004 
00005 PlaceRecognizer::PlaceRecognizer(const std::string& tree_file,
00006                                  const std::string& weights_file)
00007   : tree_(tree_file)
00008 {
00009   database_.loadWeights(weights_file);
00010 }
00011 
00012 void PlaceRecognizer::insert(const frame_common::Frame& frame, uint32_t id)
00013 {
00014   vt::Document words(frame.dtors.rows);
00015   for (int i = 0; i < frame.dtors.rows; ++i) {
00016     words[i] = tree_.quantize(frame.dtors.row(i));
00017   }
00018 
00019   vt::DocId doc_id = database_.insert(words);
00020   assert(doc_id == user_ids_.size());
00021   user_ids_.push_back(id);
00022 }
00023 
00024 void PlaceRecognizer::findAndInsert(const frame_common::Frame& frame, uint32_t id,
00025                                     const FrameVector& all_frames, size_t N,
00026                                     std::vector<const frame_common::Frame*>& matches)
00027 {
00028   vt::Document words(frame.dtors.rows);
00029   for (int i = 0; i < frame.dtors.rows; ++i) {
00030     words[i] = tree_.quantize(frame.dtors.row(i));
00031   }
00032 
00033   vt::Matches doc_matches;
00034   vt::DocId doc_id = database_.findAndInsert(words, N, doc_matches);
00035   assert(doc_id == user_ids_.size());
00036   user_ids_.push_back(id);
00037   
00038   matches.resize(doc_matches.size());
00039   for (size_t i = 0; i < matches.size(); ++i) {
00040     matches[i] = &all_frames[ user_ids_[doc_matches[i].id] ];
00041   }
00042 }
00043 
00044 } //namespace vslam


vslam_system
Author(s): Kurt Konolige, Patrick Mihelich, Helen Oleynikova
autogenerated on Thu Jan 2 2014 12:12:31