4

ステレオカメラの位置と向きを、ワールド座標での以前の位置と比較して決定したいと思います。私はマルハナバチXB3カメラを使用していますが、ステレオペア間の動きは数フィートのオーダーです。

これは正しい方向に進んでいますか?

  1. 各ペアの修正された画像を取得します
  2. 特徴点の修正された画像を検出/照合します
  3. 基本行列を計算する
  4. エッセンシャルマトリックスの計算

助けてくれてありがとう!

4

1 に答える 1

4

さて、あなたはあなたがやりたいことを公正に理解しているようです!事前に調整されたステレオカメラ(Bumblebeeなど)を使用すると、必要なときにポイントクラウドデータが配信されますが、基本的に同じ画像を使用して視覚オドメトリ(確かに正しい用語)を実行したいようです。 GPSが故障したときに、最後の既知のGPS位置からの絶対方向を提供します。

まず最初に-いくつかのアイデアについて文献をご覧になったことがあるかと思います。相変わらず、それは多くの場合、グーグルで何を探すべきかを知ることだけです。ナビゲーションのための「センサーフュージョン」の全体的なアイデアは、特にGPSが失われた市街地で、研究全体を促しました。したがって、おそらく次の(交差する)研究分野があなたに役立つかもしれません:

これらすべての方法で発生する問題は次のとおりです。

  • 静的シーンと動的シーンの処理(つまり、カメラの動きに基づいて純粋に変化するシーン-シーンで発生する独立した動きの結果として変化する他のシーンを参照:木が動く、車が通り過ぎるなど)。
  • 視覚的な動きの量を実際の動きに関連付ける(私が言及した他の形式の「キャリブレーション」-オブジェクトは小さいか遠いですか?これは、ステレオ情報が非常に便利であることがわかる場所です...)
  • 問題の因数分解/最適化-特に、時間の経過とともにカメラのパスに沿って蓄積されたエラーを処理し、外れ値の機能を使用する場合(バンドル調整、ランサックなどの取引のすべてのトリック)

それで、とにかく、実用的に言えば、Pythonで(OpenCVバインディングを介して)これを実行したいですか?

OpenCV 2.4(C / C ++とPythonの組み合わせ)を使用している場合は、新しいAPIドキュメントがここにあります。

出発点として、次のサンプルを確認することをお勧めします。

/OpenCV-2.4.2/samples/python2/lk_homography.py

これは、関数cv2.findHomographyを使用したオプティカルフローからの基本的なエゴモーション推定の優れたインスタンスを提供します。

もちろん、このホモグラフィHは、ポイントが同一平面上にある場合にのみ適用されます(つまり、同じ射影変換の下で同じ平面上にあるため、平坦な道路のビデオで機能します)。しかし、同じ原理で、代わりに基本行列Fを使用してエピポーラ幾何学の運動を表すことができます。これは、非常によく似た関数cv2.findFundamentalMatによって計算できます。

最終的に、質問で上記を正しく指定すると、Essential行列Eが必要になります。これは実際の物理座標で動作するものであるためです(エピポールに沿ったピクセル間のマッピングだけではありません)。私は常に、ファンダメンタルマトリックスを、カメラの固有キャリブレーション(K)の(必須ではない)知識が省略されたエッセンシャルマトリックスの一般化と考えています。その逆も同様です。

したがって、関係は正式には次のように表すことができます。

E =  K'^T F K

したがって、ステレオカメラのキャリブレーションKについて知っておく必要があります。詳細については、有名なHartley&Zissermanの本を参照してください。

次に、たとえば、関数cv2.decomposeProjectionMatrixを使用して、Essentialマトリックスを分解し、R方向とt変位を復元できます。

お役に立てれば!警告の最後の言葉:これは、現実世界のデータの複雑さに対する「解決された問題」ではありません。したがって、進行中の研究です。

于 2012-09-14T15:59:32.267 に答える