MCPcopy Create free account
hub / github.com/AutonomousFieldRoboticsLab/SVIn / queryL1

Method queryL1

pose_graph/ThirdParty/DBoW/TemplatedDatabase.h:587–647  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

585
586template <class TDescriptor, class F>
587void TemplatedDatabase<TDescriptor, F>::queryL1(const BowVector& vec,
588 QueryResults& ret,
589 int max_results,
590 int max_id) const {
591 BowVector::const_iterator vit;
592 typename IFRow::const_iterator rit;
593
594 std::map<EntryId, double> pairs;
595 std::map<EntryId, double>::iterator pit;
596
597 for (vit = vec.begin(); vit != vec.end(); ++vit) {
598 const WordId word_id = vit->first;
599 const WordValue& qvalue = vit->second;
600
601 const IFRow& row = m_ifile[word_id];
602
603 // IFRows are sorted in ascending entry_id order
604
605 for (rit = row.begin(); rit != row.end(); ++rit) {
606 const EntryId entry_id = rit->entry_id;
607 const WordValue& dvalue = rit->word_weight;
608
609 if ((int)entry_id < max_id || max_id == -1) // Modified by Sharmin
610 {
611 // std::cout<<"Entry Id: "<< entry_id <<" MaxId: "<< max_id <<" No enry: "<< m_nentries<<std::endl;
612 double value = fabs(qvalue - dvalue) - fabs(qvalue) - fabs(dvalue);
613
614 pit = pairs.lower_bound(entry_id);
615 if (pit != pairs.end() && !(pairs.key_comp()(entry_id, pit->first))) {
616 pit->second += value;
617 } else {
618 pairs.insert(pit, std::map<EntryId, double>::value_type(entry_id, value));
619 }
620 }
621
622 } // for each inverted row
623 } // for each query word
624
625 // move to vector
626 ret.reserve(pairs.size());
627 for (pit = pairs.begin(); pit != pairs.end(); ++pit) {
628 ret.push_back(Result(pit->first, pit->second));
629 }
630
631 // resulting "scores" are now in [-2 best .. 0 worst]
632
633 // sort vector in ascending order of score
634 std::sort(ret.begin(), ret.end());
635 // (ret is inverted now --the lower the better--)
636
637 // cut vector
638 if (max_results > 0 && (int)ret.size() > max_results) ret.resize(max_results);
639
640 // complete and scale score to [0 worst .. 1 best]
641 // ||v - w||_{L1} = 2 + Sum(|v_i - w_i| - |v_i| - |w_i|)
642 // for all i | v_i != 0 and w_i != 0
643 // (Nister, 2006)
644 // scaled_||v - w||_{L1} = 1 - 0.5 * ||v - w||_{L1}

Callers

nothing calls this directly

Calls 3

ResultClass · 0.85
insertMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected