2016-06-18 5 views
0

から3D COORDSを回復:C++行列乗算 - Iは問題下記た奥行き画像

Iは、異なる方向から同じ物体の深度画像のセットを持っていると私は、カメラキャリブレーションのためのデータを有しています。今度は、指定された深度値を持つピクセル座標をワールドポイントに変換したいので、それらのポイントをメッシュとして使用できます。

は私はピクセル座標から現実の世界でのポイント Pwのを取得するために知って Pxの次式が成り立つ:

Pwのを= K * [Rトン] * PX

つつ固有行列K = [0 PP F。 0 f pp; 0381]と焦点距離であるppとを用いて、3x3回転行列R *および3x1変換行列tからなる外因性マトリクスと主点とを生成する。

私の質問は次のようになりました: どのように順番に行列を掛けますか?私は、最初外因 = [R * トン]、次いでK * 外因を意味し、マトリックスは右から左に乗算されなければならないことを知っています。または、最初に2次元座標(深さをZとします)にの外因性の -matrixを掛け、Kに結果を掛けます。

また、いくつかのstd関数はありますか?行列行列ベクトル乗算、またはstd :: vector/arrayで実装する必要がありますか?

答えて

0

画像/ピクセルへ世界(Pw)から投影(Px)座標は、以下のように書くことができる。~=は、(透視分割後)「に比例する」である

Px ~= z Px = K (R Pw + t) 

は、またKジャムなおz座標。 RR*は転置(逆)である

Pw = R* (K^-1 z Px - t) 

この式はのように反転させることができます。

ポイントの画像/ピクセル座標と(距離画像からの)その奥行きがわかっている場合、そのワールド座標は最後の式を使用して復元できます。

第2の質問に答えるには、現在、STLでマトリックス計算を行う機能はありません。Eigen libraryは、コンピュータビジョン/グラフィックスアプリケーションでよく使用される候補です。

+0

あなたの答えをありがとう。 あなたは逆の方程式の次元を教えてください。 R *とK^-1は(3x3)行列であり、tは(3x1)であると考えます。 zはちょうど(0、0、z)のベクトルか、それともちょうどzの値ですか? また、この式をどの順序で解くことができますか?最初に括弧内の項はマイナスt ..?私はちょっと遅い思想家です。 – DrSkyer

+0

はい、 'R *'と 'K^-1'は3 x 3の行列で、' t'はベクトルです(3 x 1)。 'z'はスカラーなので、z/depth値自体です。 2番目の方程式を適用するには、カッコ内の項を評価し、その結果に 'R * 'を掛けます。 – user3146587