我们正在使用kinect进行增强现实应用。
这有一些挑战:
我们将在飞机上放置一堆物体。幸运的是,Kinect可以给我们飞机的法线向量。我们需要知道在哪里设置OpenGL摄像头(理想情况下,这将是Kinect所在的位置)。为此,我们需要知道Kinect在3D空间中的位置,因为这两个位置应该重合。
如果您需要进一步说明,请告诉我。我意识到我的解释可能并不像它需要的那样清晰。
答案 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进行转换。