基本的に、POSIT アルゴリズムは、少なくとも 4 つの非平面対応点から、カメラに対するオブジェクトの位置を推定します。一方、プロジェクターはカメラと見なすことができるため、投影された画像上の実際のオブジェクトの既知のポイントを特定すると、投影焦点距離が既知になり、相対位置を計算できるはずです。
だからあなたがすべきことは次のようなものです:
プロジェクターの前に置かれたオブジェクトの少なくとも 4 つの点を特定します。kinect を使用してポイント座標を計算できます。
次に、投影された画像上のこれらの点を、画像座標系で 3 次元の点と同じ順序で特定する必要があります。
カメラに対するオブジェクトのポーズを計算する OpenCV の cvPosit 関数を使用できます。
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