ステレオカメラの位置と向きを、ワールド座標での以前の位置と比較して決定したいと思います。私はマルハナバチXB3カメラを使用していますが、ステレオペア間の動きは数フィートのオーダーです。
これは正しい方向に進んでいますか?
- 各ペアの修正された画像を取得します
- 特徴点の修正された画像を検出/照合します
- 基本行列を計算する
- エッセンシャルマトリックスの計算
助けてくれてありがとう!
ステレオカメラの位置と向きを、ワールド座標での以前の位置と比較して決定したいと思います。私はマルハナバチXB3カメラを使用していますが、ステレオペア間の動きは数フィートのオーダーです。
これは正しい方向に進んでいますか?
助けてくれてありがとう!
さて、あなたはあなたがやりたいことを公正に理解しているようです!事前に調整されたステレオカメラ(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変位を復元できます。
お役に立てれば!警告の最後の言葉:これは、現実世界のデータの複雑さに対する「解決された問題」ではありません。したがって、進行中の研究です。