CV勉強会@関東
CVで使えるツールLT大会
2016/04/17
@peisuke
今日、紹介するツールは・・・
g2o:General Graph Optimization
Graph Optimizationとは?
• エッジの情報を与えると・・・
3.0
3.0
3.0
2.0
1.5
1.5
1.5
エッジ
Graph Optimizationとは?
3.0
3.0
3.0
2.0
1.5
1.5
1.5
(0.0, 0.0)
(2.8, -0.2)
(1.2, 2.4)
(3.0, 2.0)
(4.0, 1.0)
• エッジの情報を与えると・・・ノードの位置が求まる
ノード
eij = d(pi-pj, mij)
拘束条件:
p = argminΣeij
g2oができること
• エッジ情報から、最適なノード位置を算出
• 強み1:広い適用範囲
• 強み2:大規模データの取扱いが可能
• 強み3:ロバスト・高速な最適化計算
g2oができること
• エッジ情報から、最適なノード位置を算出
• 強み1:広い適用範囲
• 強み2:大規模データの取扱いが可能
• 強み3:ロバスト・高速な最適化計算
今日はここに
フォーカス
GraphSLAM
• SLAM:地図作成方法
• レーザ計測で得た周囲の形状データと、作成中の
地図データをマッチング、地図に追記していく
計測データ
2D地図
追記後地図
これを沢山繰り返す
GraphSLAM
• 長い廊下を一周するとマッチング誤差が蓄積して、
スタートとゴールがつながらない
簡単なケース 何週もするコースでは酷いことに
スタート
ゴール
GraphSLAM
• 各計測地点をノード、計測地点間の相対姿勢を
エッジとし・・・
黒線・・・エッジ
(ノードは省略)
GraphSLAM
• ノードの位置を修正することで、
GraphSLAM
• ノードの位置を修正することで、正しい地図ができ
る
何故、このツールを紹介した
かというと・・・
色々な問題に使える!!
曲線フィッティングにも
• データ点を通る曲線パラメータの推定
• 曲線のパラメータ(例えばax3+bx2+cx+dのa~d)を
ノード、データとの誤差をエッジとする
e = d(y, ax3+bx2+cx+d)
拘束条件:
a,b,c,d = argminΣeij
y
x
バンドル調整にも
• 複数枚の画像から、形状の3次元を復元する
• カメラ姿勢と特徴点の位置の推定する問題
バンドル調整にも
• カメラ姿勢、特徴点の3D座標をノードとする
• 逆投影誤差をエッジとする
ノードB: q
ノードA: p
エッジ: e
e = d(u, f(p, q))
拘束条件:
u
f(p, q)
ICPアルゴリズムにも
• 複数セットの点群をマッチングする問題
• 点群の姿勢をノード、対応点間の距離をエッジとする
※点-面対応などの非線形拘束問題で有効
e = d(T(p;x),T(q;y))
拘束条件:
その他、たぶん適用できる例
• カメラキャリブレーション
• 画像ノイズ除去
• 超解像
• オプティカルフロー
• エッジ検出
• 輪郭検出
・
・
・
目的のパラメータを「ノード」、観測を「エッジ」とし、
ノードの良し悪しをエッジで評価できれば何でも良い
どうやって使うの?
※時間の都合のため実装例は省略
• ノード・エッジが定義済みの問題ならば・・・
• ノードの初期位置を入力
• 座標値だけでなく、SE・SIMなども利用可
• ノード間の接続情報を入力
• GraphSLAMやバンドル調整などはデフォルトで用意
• 最適化実行
• 未定義の問題ならば・・・
• 各ノードついて、パラメータを設定するインタフェースを、
各エッジについて観測量を設定するインタフェースと、ヤ
コビアン・評価関数を記述
まとめ
• エッジ情報から、最適なノード位置を算出するライブラリ
「g2o」を紹介
• 強み1:広い適用範囲
• 任意形式のノード/エッジが定義可能
• 強み2:大規模データの取扱いが可能
• 疎行列を容易に扱える
• 強み3:ロバスト・高速な最適化計算
• Levenberg-Marquardt法なども実装済み
ぜひ使ってみてください

G2o