RTAB-Map source code memo
RTAB-Map のソースコードを読んでメモする。
https://introlab.3it.usherbrooke.ca/mediawiki-introlab/images/e/eb/Labbe14-IROS.pdf
A. Loop Closure Detection For global loop closure detection, the bag-of-words approach described in [16] is used. Briefly, this approach uses a bayesian filter to evaluate loop closure hypotheses over all previous images.
bag-of-words
bag-of-words アプローチを使っていると書いてある。
The loop closure detector uses a bag-of-words approach to determinate how likely a new image comes from a previous location or a new location.
bag-of-wordsは、ベイズ統計学の勉強をした時に出てきた。
迷惑メール分類などで使われている。
bag-of-wordsのwordsは自然言語のword(単語)のことのはず。
どのように画像(動画)の同一性の判定に使っているのか気になるので、その辺を重点的に調べてみる(予定)。
よく調べたらbag-of-wordsを画像に対して使うのは結構一般的っぽい。
Visual Wordsを用いた類似画像検索 - 人工知能に関する断創録
git hub ソースコード
https://github.com/introlab/rtabmap/blob/master/corelib/src/Rtabmap.cpp#L806
Main Loop
process関数。
https://github.com/introlab/rtabmap/blob/master/corelib/include/rtabmap/core/Rtabmap.h
Rtabmapクラスのヘッダーファイル。
メンバー変数とメンバー関数の定義。
https://github.com/introlab/rtabmap/blob/master/corelib/src/Memory.cpp#L3116
Signatureという型のデータを生成している箇所と思われる。
https://github.com/introlab/rtabmap/blob/master/corelib/src/Memory.cpp#L3255
平面画像のKeyPointを生成している。
https://github.com/introlab/rtabmap/blob/master/corelib/include/rtabmap/core/Signature.h#L101
//visual words stuff
https://github.com/introlab/rtabmap/blob/master/corelib/include/rtabmap/core/Signature.h#L140
Signatureクラスの定義にある、KeyPointの配列。
std::multimap<int, cv::KeyPoint> _words; // word <id, keypoint>
https://github.com/introlab/rtabmap/blob/master/corelib/src/Signature.cpp#L177
float Signature::compareTo(const Signature & s) const
類似性の比較?
https://github.com/introlab/rtabmap/blob/master/corelib/src/Memory.cpp#L1340
std::map<int, float> Memory::computeLikelihood(const Signature * signature, const std::list
が
Signature::compareTo()を使っている。
https://github.com/introlab/rtabmap/blob/master/corelib/src/Rtabmap.cpp#L1215
Rtabmap.cppのprocess()
1255行目 rawLikelihood = _memory->computeLikelihood(signature, signaturesToCompare);
https://github.com/introlab/rtabmap/blob/master/corelib/src/Features2d.cpp#L724 Surfを使ってKeyPointを抽出している箇所。
http://opencv.jp/opencv-2svn/cpp/features2d_common_interfaces_of_feature_detectors.html
OpenCVのKeyPointクラス。
FeatureDetector
http://docs.ros.org/hydro/api/rtabmap/html/classrtabmap_1_1VisualWord.html
参考URL
http://dsp.stackexchange.com/questions/10423/why-do-we-use-keypoint-descriptors