找出Kinect在3D空间中的位置,以获得增强现实应用

时间:2011-11-11 00:02:40

标签: opengl camera kinect algebra

我们正在使用kinect进行增强现实应用。

这有一些挑战:

scene diagram

我们将在飞机上放置一堆物体。幸运的是,Kinect可以给我们飞机的法线向量。我们需要知道在哪里设置OpenGL摄像头(理想情况下,这将是Kinect所在的位置)。为此,我们需要知道Kinect在3D空间中的位置,因为这两个位置应该重合。

如果您需要进一步说明,请告诉我。我意识到我的解释可能并不像它需要的那样清晰。

1 个答案:

答案 0 :(得分:1)

假设Kinect位于原点。你也知道距离Kinect的点(在平面上)的距离 - 这就是Kinect给你的距离。你也知道正常。因此,您所要做的就是找到平面的平面方程,将其转换为矩阵并将其反转。

给出点和法向量的平面方程是

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

我们知道r为

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

现在请记住,一架飞机可以表示为

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进行转换。