2011-11-11 6 views
1

私たちはkinectを使って拡張現実感アプリケーションを行っています。Kinectが拡張現実感アプリケーションのために3D空間内にある場所を見つける

これは、いくつかの課題があります。

scene diagram

私たちは、平面上に載っているオブジェクトの束を持っています。幸いにも、Kinectは飛行機の法線ベクトルを与えることができます。 OpenGLカメラを設定する場所を知る必要があります(理想的には、これはKinectがある場所です)。そのためには、2つの場所が一致する必要があるため、Kinectが3D空間内のどこにあるかを知る必要があります。

追加の説明が必要な場合は、教えてください。私の説明は、必要とされるほど明確ではないかもしれないことに気づきます。

答えて

1

原点でKinectを仮定します。また、Kinectからの(飛行機上の)点の距離も知っています。これは、Kinectがあなたにこの点の距離として与えるものです。あなたはまた、正常を知っています。だから、あなたがしなければならないことは、飛行機の飛行方程式を見つけてそれを行列に変換し、それを逆転させることだけです。

点および法線ベクトルを所与の平面方程式は

n·(r-r_0) = 0 ; r_0 = 0 
n·r = 0 

で我々は

r = (0, 0, -distance_at(kinect_depth_image_width/2, kinect_depth_image_height/2)) 

、Rは今面が

p(s,t) = r + u * s + v * t 

Uとして表現することができることに注意してください知っています、vは平面の基底ベクトルです。だから我々は

u_x v_x n_x r_x 
u_y v_y n_y r_y 
u_z v_z n_z r_z 
    0 0 0 1 

行列としてUを、これを書き換えることができ、vは任意の「アップ」を選択することによって、決定することができ、および「右」ベクターは、私はあなたが使用することをお勧めY =(0,1,0)とX = (1,0,0)を計算し、既知の法線nに対して正則化を実行してuとvを生成する

この行列を反転することによって、平面上のゼロ点からkinectへの変換が得られます。

関連する問題