2Dカメラを使用した3D位置推定


9

カメラ(iPhone)を持っています。画像に3Dコントロールオブジェクトがあり、そのプロパティをよく知っています。(私の制御オブジェクト)。動きのある二次オブジェクトもあります。最終的な目標は、移動するオブジェクトの3D軌道を一定期間確立することです。(追跡)

聞きたいのですが、調べてもらえますか?

  • 制御オブジェクトまでの電話の距離(議論のために、カメラが特定の高さにあり、特定の距離がどちらも不明であるが、カメラは既知の表面に垂直であると仮定しましょう)

  • 後続の各フレームでオブジェクトを配置できるセカンダリオブジェクト。私の目標は、上で示したように、その3D軌跡を推定することです。

おまけの質問、コントロールオブジェクトまでの電話の距離を設定できるようにシステムを作成できます(ただし、推奨されません)。これは2番目の点で役立ちますか?


この分野の文献を知っていますか?そうでない場合、私はいくつかの論文を推奨できますが、警告されます。数学が関係しています。
Emre

@emreいくつかのポインタを提供できればすばらしいでしょう。数学は問題ありません。私たちは数学が大好きです。
Ktuncer 2012年


@emre私はレビューペーパーをざっと見てみました。これは追跡用であり、オブジェクトを簡単に追跡できますが、それは問題ではありません。オブジェクトがどのピクセルにあるかを特定できます。問題は、オブジェクトが3D空間にあることです。これは可能ですか?基本的に、私は3D空間に別のオブジェクトを持っています。これは、参照のフレームとして使用できるプロパティを知っていますが、それがそれです。
Ktuncer

すみません、間違った紙です。おそらく、ビジョンベースの3D軌跡追跡を未知の環境に適合させることができますか[PDF]?彼らはステレオカメラを使用しています。それはあなたのための可能性ですか?
Emre

回答:


15

オブジェクトに6つの既知の点(既知の3D座標、、)がある場合、オブジェクトの座標系に関連するカメラの位置を計算できます。ZX,YZ

最初にいくつかの基本事項。

均一座標は、ユークリッド座標ベクトル表示で、いわゆるスケールファクターを追加して、均一座標が。独自の計算では、をできるだけ頻繁に維持するようにしてください(つまり、均一な座標を最後の要素で除算することにより、均一座標を「正規化」します:)。図2Dは、その点について、我々はまた、均一なプレゼンテーションを使用することができこれらのこと(思い出してくれるを及びω X = ω [ X Y Z 1 ] T ω = 1 XX(X,Y,Z)ωX=ω[XYZ1]Tω=1 X=ω[ X Y 1 ]ωXYZXXωx=ω[XY1]ω,X,YZ2Dまたは3Dポイントであっても、ポイントごとに異なります)。均質な座標表示により、計算が簡単になります。

カメラ行列は、3Dワールドからイメージセンサーへの投影行列です。3×4

x=PX

ここで、はイメージセンサー上のポイント(ピクセル単位)で、は投影された3Dポイントです(単位はミリメートルであるとしましょう)。XxX

2つの3つのベクトル間の外積は、次のような行列とベクトルの乗算として定義できることを覚えています。

v×u=(v)xu=[0v3v2v30v1v2v10]u

クロスプロダクションあることに注意することも役立ちます。v×v=0

ここで、前の方程式から射影行列を解いてみましょう。左側からの射影方程式にの外積行列を乗算します。Px

(x)xx=(x)xPX=0

ああ!結果はゼロベクトルでなければなりません。ここで方程式を開くと、次のようになります。

[0wyw0xyx0][P1,1P1,2P1,3P1,4P2,1P2,2P2,3P2,4P3,1P3,2P3,3P3,4]X=[P3,4WyP2,1XwP2,2YwP2,4Ww+P3,1XyP2,3Zw+P3,2Yy+P3,3ZyP1,4Ww+P1,1XwP3,4Wx+P1,2YwP3,1Xx+P1,3ZwP3,2YxP3,3ZxP2,4Wx+P2,1XxP1,4WyP1,1Xy+P2,2YxP1,2Yy+P2,3ZxP1,3Zy]=0

少しのリファクタリングで、射影行列行列の外に取得できます。P

[0000XwYwZwWwXyYyZyWyXwYwZwWw0000XxYxZxWxXyYyZyWyXxYxZxWx0000][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[RRC]

ここで、は、オブジェクトの原点に対するカメラの位置です。 s nullベクトルを計算することにより、から解くことができます。CPP

(ハートレー、ツィッサーマン-コンピュータービジョンの複数ビュージオメトリ)

最後に、2つのフレームのカメラの位置を計算すると、 2つの方程式を解くことで、未知のオブジェクトの位置(またはオブジェクトのいくつかの点の位置)を計算できます。X

x1=P1Xx2=P2X

これは、カメラマトリックスの解決方法とほぼ同じです:

(x1)xP1X=0(x2)xP2X=0

等々。


カメラの3D位置を計算する方法はOpenCV solvePnpと同等であると言って間違いありませんか?docs.opencv.org/2.4/modules/calib3d/doc/…(ページでsolvePnPを検索します。#を使用してURLを貼り付けることはできません)
gregoiregentil
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.