2012-06-11 11 views
6

私はx、y、zメーターwrtカメラで仮想オブジェクトを増やしたいと思います。 OpenCVはカメラ較正機能を持っていますが、私は正確にメートルで座標を与えることができません。拡張現実感のためのカメラ行列の発見方法?

私はUnityでカメラをシミュレートしようとしましたが、期待した結果が得られませんでした。

次のように投影行列を設定し、z = 2.415 + 0.5の単位立方体を作成します。 ここで、2.415は、目と投影面(ピンホールカメラモデル)の距離です。 立方体の面が前面のクリッピング面にあり、次元が単位であるため、ビューポート全体を覆ってはいけませんか?

Matrix4x4 m = new Matrix4x4(); 
    m[0, 0] = 1; 
    m[0, 1] = 0; 
    m[0, 2] = 0; 
    m[0, 3] = 0; 

    m[1, 0] = 0; 
    m[1, 1] = 1; 
    m[1, 2] = 0; 
    m[1, 3] = 0; 

m[2, 0] = 0; 
    m[2, 1] = 0; 
    m[2, 2] = -0.01f; 
    m[2, 3] = 0; 

    m[3, 0] = 0; 
    m[3, 1] = 0; 
    m[3, 2] = -2.415f; 
    m[3, 3] = 0; 
+0

m [3,2] = -1/2.415fとm [3,3] = 1の投影行列が正しく動作する場合 –

答えて

4

視野を手動で測定することになりました。 FOVを知ったら、簡単に投影行列を作成できます。最終的に投影が(X * d/Z、Y * d/Z)の形式であるため、ユニットについて心配する必要はありません。 X、Y、Zの単位が何であっても、X/Zの比は同じままです。

5

キャリブレーションのグローバルスケール(つまり、3D空間座標の測定単位)は、使用するキャリブレーションオブジェクトのジオメトリによって決まります。例えば、平らなチェッカーボードの画像を使用してOpenCVで較正すると、較正手順への入力は3DポイントPとその画像pの対応するペア(P、p)、3Dの(X、Y、Z)座標ですポイントは、使用するターゲットのサイズ(およびそれをイメージングする光学系)によって必要とされるmm、cm、インチ、マイルなどで表され、画像の2D座標はピクセル単位です。較正ルーチンの出力は、それらの尺度単位で表現された3D座標をピクセルに「変換する」パラメータのセット(投影行列Pの成分および非線形歪みパラメータk)である。

キャリブレーションターゲットの実際の寸法がわからない場合(または使用したくない場合)、それらのパーヂを変更することはできますが(たとえば、正方形が均等になるようにその側の真の長さは不明かもしれませんが)。この場合、キャリブレーションは未知のグローバルスケールまで決定されます。これは実際には一般的なケースです。ほとんどのバーチャルリアリティアプリケーションでは、結果が画像内で正しく表示されている限り、グローバル規模が何であるかはまったく気にしません。

たとえば、アンジェリーナ・ジョリーのビデオに3Dの唇をぴったりと追加し、元のビデオと合成して、新しい偽の唇がついたままで、彼女の顔に「自然」に見えるようにする場合偽の唇の3Dモデルを再調整して、唇の画像に正しく重なるようにするだけです。モデルが1ヤードであるか、コンポジットをレンダリングするCGカメラから1マイル離れているかは、完全に無関係です。

+1

私は例を気に入っています:) – Ani

+1

私は適切な縮尺でモデルを拡張することはできますが、それが正確なメートルであることを望みます。私はステレオレンダリングを行い、正確な奥行き知覚を与えなければなりません。 –

+0

ステレオレンダリングの場合、メトリックの精度は関係ありません。この場合、気になるのは、2つのカメラの左右差が正しく表示されることです。すべてのサイズと距離の比が正しい限り、実際の地球規模は知覚できません。 –

5

オブジェクトを補強するには、カメラの姿勢と向きを見つける必要があります。これはカメラの外来を見つけることと同じです。また、最初にカメラの組み込み関数(キャリブレーションと呼ばれます)を計算する必要があります。

OpenCVではこれをすべて行うことができますが、自明ではありません。私はあなたに手がかりを与えます、あなたはまずあなたがそれがどのように見えるかを知る必要がありますので、このオブジェクトを分析してカメラの姿勢を計算することができます。先端の基準点から始めることができます。検出が簡単です。

このthreadをご覧ください。

関連する問題