覚え書きブログ

SLAMの覚え書き(ORB-SLAM)

ORB-SLAMは、ORB特徴量を用いたVisual SLAMの代表的な手法である。ORB-SLAMの論文を読んでみた。
http://webdiis.unizar.es/~raulmur/MurMontielTardosTRO15.pdf

まず、SLAMの構成要素として重要なplace recognitionにおいては、map to mapよりもアピアランスを用いるimage to imageの方がよいとのこと。
http://webdiis.unizar.es/GRPTR/pubs/2008_Williams_RSS_IDA.pdf

ORB(Oriented FAST and Rotated BREIF)特徴量は、ScaleとRotationにinvariantなバイナリ特徴量である。SIFT特徴量の高速版という位置づけで、BRIEF, FASTとそれらを組み合わせたものである。
https://www.willowgarage.com/sites/default/files/orb_final.pdf

ORB_SLAM2のコード:
https://github.com/raulmur/ORB_SLAM2/

ORB_SLAM2を、魚眼レンズおよびマルチカメラに対応したMultiCol-SLAMのコード:
https://github.com/urbste/MultiCol-SLAM


1) FAST detector:
FAST-9を使っている。9は、中心ピクセルとcircular ringの半径ピクセル数(以下の図参照)。FASTのスコアはedgeに高くでる傾向があるので、Harris corner filterを用いて、ソートし、edgeを除去しているとのこと。

これをピラミッド画像のレイヤーごとに行うことにより、スケール不変性に対応。
http://www.edwardrosten.com/work/rosten_2006_machine.pdf

FAST自体の説明は、以下が参考になる。
http://www.vision.cs.chubu.ac.jp/flabresearcharchive/bachelor/B12/Paper/hasegawa.pdf
http://www.kochi-tech.ac.jp/library/ron/2014/13/1150321.pdf

以下は、これらの論文から抜粋。
「高速に特徴点を検出するFeatures from Accelerated Segment Test (FAST)が提案されている.FASTは注目画素を中心とする周囲16画素を参照し,周囲16画素の輝 度が注目画素より明るいまたは暗い画素が連続する場合に注目画素をコーナーとして検 出する.しかし,周囲16画素を全て観測するとコーナーの検出に時間が掛かってしまう ため,FASTでは機械学習により決定木を構築し,その決定木でコーナーを検出する.決 定木を用いることで周囲16画素のうち2~3画素を観測してコーナーを検出するため,リアルタイム処理に適した検出速度が得られる.しかし,FASTでは画像中の自然領域(木 の葉,植え込み等が写り込んでいる領域)のようなテクスチャの複雑な領域からコーナーらしくない点を多く検出してしまい,マッチング等に利用する場合,処理時間に影響する 問題がある.」
f:id:hirotaka_hachiya:20170505104108p:plain

2)BRIEF descriptor:
BRIEFは、パッチ内でランダムに選択した2点x,yの輝度値の大小関係を比較(式5)して、比較回数i分シフト(桁上げ)するこよによりバイナリ列を作る(式6)。
f:id:hirotaka_hachiya:20170504132205p:plain

BRIEFの前にガウシアンフィルターで平滑化する。

3) ORB
BRIEFでは、ランダムに輝度値を比較するピクセルを選んでいたが、ORBでは、「パッチ内であり得る全てのペア候補を列挙し,ビット分散が大きく,かつペア同士の相関が低くなるようなペアを貪欲法で選択して絞り込むことで記述能力の高いバイナリコードを生成している。」
http://www.kochi-tech.ac.jp/library/ron/2014/13/1150321.pdf

BRIEFに、上記のFASTのピラミッド画像対応でスケール不変性を加えている。
また、BRIEFに回転不変性を加えるために、以下の処理を加えている。
f:id:hirotaka_hachiya:20170505184531p:plain
ここで、I(x,y)は、画像パッチ上のピクセルx,yの輝度値で、pqは、モーメントのオーダーを表している。式1M_{pq}は、画像パッチ上の輝度値のx^py^qの重みづけ和に対応する。例えば、M_{00}はパッチ上の輝度値の合計に対応していて、M_{10}は、パッチ上の輝度値のx方向の座標の重み付け和に対応する。この表現を用いることにより、式2のように、画像パッチの輝度値の重心を求めることができる。さらに、式3のようにatan2を用いることにより、パッチの原点を中心とする重心の角度を求めることができる。
f:id:hirotaka_hachiya:20170505223554p:plain
このように求めた角度を用いて、BRIEFの輝度値の比較を行うペアを回転し、マッチングを行うことにより回転不変性を導入している。
f:id:hirotaka_hachiya:20170505224419p:plain

ORB-SLAMでは、このORB特徴量を用いて、tracking, local mappingおよびloop closingを下記の3つのスレッドを回して実gンしている。
f:id:hirotaka_hachiya:20170506105754p:plain