opencvを使用して2台のカメラ(LとRと名付けましょう)のステレオキャリブレーションを行っています。20ペアのチェッカーボード画像を使用し、Lに対するRの変換を計算します。新しいペアの画像を使用し、画像Lの2Dチェッカーボードコーナーを計算し、キャリブレーションに従ってそれらのポイントを変換して、画像Rの対応する変換されたポイントは、その画像のチェッカーボードの角と一致することを期待しています。
2Dポイントを[x、y]から[x、y、1]に変換し、3x3回転行列を乗算し、回転ベクトルを追加してからzで除算するという単純な方法を試しましたが、結果が間違っているため、それほど単純ではないと思います(?)
編集(いくつかのことを明確にするため):
これを実行したい理由は、基本的に、新しいペアの画像でステレオキャリブレーションを検証するためです。したがって、実際には2つの画像間で新しい2D変換を取得したくないので、見つけた3D変換が正しいかどうかを確認したいと思います。
これが私の設定です:
2台のカメラ(E)に関連する回転と平行移動がありますが、各カメラ(E_R、E_L)に関連するオブジェクトの回転と平行移動はありません。
理想的には私がやりたいこと:
- カメラLからの画像の2Dコーナーを選択します(ピクセル単位、たとえば[100,200]など)。
- 私が見つけた行列Eに基づいて、2次元点に対してある種の変換を行います。
- カメラRから画像内の対応する2Dポイントを取得し、それらを描画します。うまくいけば、実際のコーナーと一致します。
しかし、考えれば考えるほど、これは間違っている/できないと確信しています。
私が今試していること:
- カメラの固有パラメーター(たとえば、I_RとI_L)を使用して、2つの最小二乗システムを解いてE_RとE_Lを見つけます。
- カメラLからの画像の2Dコーナーを選択します。
- それらのコーナーを対応する3Dポイント(3d_points_L)に投影します。
- 実行:3d_points_R =(E_L).inverse * E * E_R * 3d_points_L
- 3d_points_Rから2d_points_Rを取得し、それらを描画します。
何か新しいものがあれば更新します