2

私のキネクトをプロジェクタにキャリブレーションしようとしています。私はマイクロソフトの調査からいくつかの論文を読んだことがあります。プロジェクタとカメラのキャリブレーションにpositアルゴリズムを使用する方法

フォーポイントが正しく、我々は、プロジェクタの位置および向きを見つけるために[6] POSITアルゴリズム を使用した後、プロジェクタ画像における位置、深さカメラと 、両方によって識別されなければなりません。この の処理には、プロジェクタ の焦点距離と投影中心が必要です。

(これは、プロジェクターの位置を与える)

しかし、私は本当にPOSITアルゴリズムに慣れていないんだと、確かにそれはここでは使用されませんか。 Positアルゴリズムの結果は、並進ベクトルと回転行列です。今私の質問は、これがどのように相互作用に使用できるかということです。

たとえば、kinectで手をたどると、座標(x、y)が得られます。どのように変換と回転行列を使用して投影の対応する(x、y)座標を見つけることができますか?

+0

正確な何の行動を達成する必要があります。 はその後、我々は座標系POSITにあるように私たちのポイントを変換する必要がありますか?両方をどのように使いたいかを指定できますか? –

+0

インターフェイスが、ユーザーが前記インターフェイスとやり取りできる表面に投影されている場合。そのため、手の位置を知る必要があります(手の座標は、これがkinectと一緒に集められた深度座標または実世界座標になります)。しかし、投影においてフィードバックを与えるためには、投影座標で手の位置を知る必要がある。このようにして、ユーザがカメラ画像内の例えば(220,210)の投影に触れる場合。 (x、y)の投影に何かが表示されます。これがアイデアを明確にすることを願っています。 – Ojtwist

答えて

1

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

だから何あなたがやるべきことのようなものです:

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

  2. 次に、イメージ座標系で投影されたイメージ上のポイントを3dポイントと同じ順序で識別する必要があります。

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

  4. キネクトで測定する3次元空間のオブジェクトを指定すると、cvPOSITで計算された変換を適用してイメージ座標を計算できます。

ので POSITのより深い説明は以下を参照してください、アルゴリズムによって使用されるポイントが満たすべきいくつかの特定の条件が存在することができます: http://www.cfar.umd.edu/~daniel/daniel_papersfordownload/Pose25Lines.pdf

次は、OpenCVのPOSITへのリンクです関連ドキュメント: http://opencv.willowgarage.com/documentation/camera_calibration_and_3d_reconstruction.html#posit

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

POSITアルゴリズムは、その特徴点が上に落下するように平行移動ベクトルとカメラ上にオブジェクトを変換する変換行列は、座標系見つけ 」:0

ステップ4清澄:オリジナルPOSIT紙から

見積もり画像の点を確認する

Kinect座標系にn個の3d点(kPoints)があり、回転(r [3] [3])と変換(t [3])があるとします。 POSIT、プロジェクタ画像面の焦点距離、最後にPOSITで使用した最初の3D点(kOrigin)の座標がわかります。

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 
+0

こんにちは、私は現在行っていることです:プロジェクト4点を表面に(これらの座標は知られています)。それから私はkinectで座標を特定します。これらの8つの座標を使って私はPOSITアルゴリズムを実行します。これは私に翻訳ベクトルと回転行列を与えます。私はこれらがカメラに対するプロジェクタの位置を記述していると仮定します。そして、この時点から。その回転行列と翻訳ベクトルで何ができますか?これらはあなたが話している変容ですか?または私はステップを逃していますか? – Ojtwist

+0

はい、あなたが得た回転と平行移動はこの変換です。 3D座標にある点があるとしたら、逆変換(回転と平行移動)を適用してカメラの座標系でこの点の座標を取得できるようにする必要があります。それをイメージプレーンに投影して画像を取得します座標。 POSITアルゴリズムに提供されたポイントは、最初のポイントの座標系にあり、kinect座標を何らかの形で変換していることに注意してください。 –

+0

http://opencv.willowgarage.com/wiki/Positいくつかの説明のためにこれを参照してください –

関連する問題