私は、将来、完全な「最適なアルゴリズム」を実装することを目的として、Hartley&Zissermanの「MultipleView Geometry」(12.2秒)から(比較的単純な)線形同次(DLT)3D三角測量法を実装しようとしています。現在、この質問に基づいて、Matlabで動作させようとしています。後で、C ++とOpenCVに移植して、適合性をテストします。
問題は、自分が持っているデータの使い方がわからないことです。ステレオリグを調整し、2つの固有のカメラ行列、歪み係数の2つのベクトル、2つのカメラに関連する回転行列と平行移動ベクトル、および基本行列と基本行列を取得しました。また、2つの画像の座標系(それぞれ1番目と2番目のカメラで撮影)の単一の3Dポイントの対応であると想定される2つのポイントの2D座標もあります。
このアルゴリズムは、2つの点座標と2つの4x3「カメラ行列」PおよびP'を入力として受け取ります。これらは明らかに、キャリブレーションから得られた固有のカメラ行列(M、M')ではありません。1つは3x3であり、それらを単独で使用した投影では3Dポイントが2つの異なる座標系に配置されるためです。回転/平行移動)データがありません。
H&Zブックには、SVD分解を使用して基本行列または必須行列のいずれかから必要な行列を復元するための情報(第9章)が含まれていますが、それ自体に追加の問題(スケールのあいまいさなど)があります。回転と平行移動が明示的に定義されているので、それは必要ないと思います。
問題は次のとおりです。最初の「カメラ行列」(P = [M | 0])としてゼロの余分な列を持つ最初の固有行列を使用し、次に2番目の固有行列に外部行列を乗算するのは正しいでしょうか。 2番目に必要な「カメラ行列」(P'= M'* [R | t])を取得するための追加の列として、回転行列と変換ベクトルから構成されますか?それとも別の方法で行う必要がありますか?
ありがとう!