オブジェクトに6つの既知の点(既知の3D座標、、)がある場合、オブジェクトの座標系に関連するカメラの位置を計算できます。ZX,YZ
最初にいくつかの基本事項。
均一座標は、ユークリッド座標ベクトル表示で、いわゆるスケールファクターを追加して、均一座標が。独自の計算では、をできるだけ頻繁に維持するようにしてください(つまり、均一な座標を最後の要素で除算することにより、均一座標を「正規化」します:)。図2Dは、その点について、我々はまた、均一なプレゼンテーションを使用することができこれらのこと(思い出してくれるを及びω X = ω [ X Y Z 1 ] T ω = 1 X ← X(X,Y,Z)ωX=ω[XYZ1]Tω=1 X=ω[ X Y 1 ]ω、X、YZX←Xωx=ω[XY1]ω,X,YZ2Dまたは3Dポイントであっても、ポイントごとに異なります)。均質な座標表示により、計算が簡単になります。
カメラ行列は、3Dワールドからイメージセンサーへの投影行列です。3×4
x=PX
ここで、はイメージセンサー上のポイント(ピクセル単位)で、は投影された3Dポイントです(単位はミリメートルであるとしましょう)。XxX
2つの3つのベクトル間の外積は、次のような行列とベクトルの乗算として定義できることを覚えています。
v×u=(v)xu=⎡⎣⎢0v3−v2−v30v1v2−v10⎤⎦⎥u
クロスプロダクションあることに注意することも役立ちます。v×v=0
ここで、前の方程式から射影行列を解いてみましょう。左側からの射影方程式にの外積行列を乗算します。Px
(x)xx=(x)xPX=0
ああ!結果はゼロベクトルでなければなりません。ここで方程式を開くと、次のようになります。
⎡⎣⎢0w−y−w0xy−x0⎤⎦⎥⎡⎣⎢P1,1P2,1P3,1P1,2P2,2P3,2P1,3P2,3P3,3P1,4P2,4P3,4⎤⎦⎥X=⎡⎣⎢P3,4Wy−P2,1Xw−P2,2Yw−P2,4Ww+P3,1Xy−P2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1Xw−P3,4Wx+P1,2Yw−P3,1Xx+P1,3Zw−P3,2Yx−P3,3ZxP2,4Wx+P2,1Xx−P1,4Wy−P1,1Xy+P2,2Yx−P1,2Yy+P2,3Zx−P1,3Zy⎤⎦⎥=0
少しのリファクタリングで、射影行列行列の外に取得できます。P
⎡⎣⎢⎢⎢0Xw−Xy0Yw−Yy0Zw−Zy0Ww−Wy−Xw0Xx−Yw0Yx−Zw0Zx−Ww0WxXy−Xx0Yy−Yx0Zy−Zx0Wy−Wx0⎤⎦⎥⎥⎥⎡⎣⎢⎢P1P2P3⎤⎦⎥⎥=0
ここで、は、カメラ行列の番目の行の転置です。前の(大きな)行列方程式の最後の行は、最初の2つの行の線形結合なので、追加の情報はなく、省略できます。PnnP
私たちがタフを集めることができるように、少し休止します。以前の行列方程式は、既知の3D-> 2D対応ごとに形成する必要があることに注意してください(少なくとも6つ必要です)。
次に、各点の対応関係について、上記の行列の最初の2行を計算し、行列を互いに積み重ねると、新しい行列が得られます。2×12A
A⎡⎣⎢P1P2P3⎤⎦⎥=0
12の未知数と(少なくとも)12の方程式があるため、これは解決できます。唯一の問題は、
⎡⎣⎢P1P2P3⎤⎦⎥=0
幸いにも、特異値分解(SVD)を使用して、
∥⎡⎣⎢P1P2P3⎤⎦⎥∥=1
方程式を解くには、行列 SVDを計算し、最小の固有値に対応する特異ベクトルを選択します。このベクトルは、行列Aのヌルベクトルであり、カメラ行列解でもあります。をスタック解除してを形成するだけです。AP[P1P2P3]TP
次に、オブジェクトまでの距離を知りたいと思います。は次のように定義されます。P
P=K[R−RC]
ここで、は、オブジェクトの原点に対するカメラの位置です。 s nullベクトルを計算することにより、から解くことができます。CPP
(ハートレー、ツィッサーマン-コンピュータービジョンの複数ビュージオメトリ)
最後に、2つのフレームのカメラの位置を計算すると、 2つの方程式を解くことで、未知のオブジェクトの位置(またはオブジェクトのいくつかの点の位置)を計算できます。X
x1=P1Xx2=P2X
これは、カメラマトリックスの解決方法とほぼ同じです:
(x1)xP1X=0(x2)xP2X=0
等々。