2

キネクトをプロジェクターに合わせて調整しようとしています。マイクロソフトの研究から、彼らがこれを行う方法に関するいくつかの論文を読みました。

深度カメラとプロジェクター画像の両方で 4 つのポイントを正しく識別しなければなりません。その後、POSIT アルゴリズム [6] を使用してプロジェクターの位置と向きを見つけます。このプロセスには、プロジェクターの焦点距離と投影の中心が必要です。

(これにより、プロジェクターの位置が決まります)

しかし、私はポジトアルゴリズムに精通しておらず、ここでの使用方法も確かによく知りません。Posit アルゴリズムの結果は、並進ベクトルと回転行列です。ここで私の質問は、これをどのように相互作用に使用できるかです。

たとえば、kinect で手を追跡すると、座標 (x,y) が得られます。上記の並進および回転行列を使用して、投影で対応する (x、y) 座標を見つけるにはどうすればよいですか?

4

1 に答える 1

1

基本的に、POSIT アルゴリズムは、少なくとも 4 つの非平面対応点から、カメラに対するオブジェクトの位置を推定します。一方、プロジェクターはカメラと見なすことができるため、投影された画像上の実際のオブジェクトの既知のポイントを特定すると、投影焦点距離が既知になり、相対位置を計算できるはずです。

だからあなたがすべきことは次のようなものです:

  1. プロジェクターの前に置かれたオブジェクトの少なくとも 4 つの点を特定します。kinect を使用してポイント座標を計算できます。

  2. 次に、投影された画像上のこれらの点を、画像座標系で 3 次元の点と同じ順序で特定する必要があります。

  3. カメラに対するオブジェクトのポーズを計算する OpenCV の cvPosit 関数を使用できます。

  4. kinect で測定する 3d 空間内のオブジェクトを指定すると、cvPOSIT によって計算された変換を適用して画像座標を計算できます。

アルゴリズムによって使用されるポイントによって満たされる特定の条件がいくつかある可能性があるため、POSIT の詳細な説明については、次を参照して ください。

以下は、opencv pos 関連のドキュメントへのリンク です。

http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#createpositobject

http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#releasepositobject

ステップ 4 の説明:

元の POSIT 論文からの引用: 「POSIT アルゴリズムは、オブジェクトをカメラ座標系に変換する変換ベクトルと変換行列を見つけて、その特徴点が画像点の視線上に来るようにします」

Kinect 座標系に n 個の 3d ポイント (kPoints) があると仮定します。POSIT からの回転 (r[3][3]) と平行移動 (t[3])、プロジェクターの画像平面の焦点距離があり、最終的に次のことがわかります。 POSIT で使用した最初の 3D ポイント (kOrigin) の座標。次に、ポイントを POSIT 座標系に変換する必要があります。

kPoints[i] = kPoints[i] - kOrigin;
kPoints[i] = Rotate(kPoints[i], r);
kPoints[i] = kPoints[i] + t;
imagePoint[i].x = focalLength * kPoints[i].x/kPoints[i].z
imagePoint[i].y = focalLength * kPoints[i].y/kPoints[i].z
于 2012-02-28T23:24:01.267 に答える