flash – Kinect – 使用深度将(x,y)像素坐标映射到“真实世界”
我正在开发一个项目,该项目使用Kinect和OpenCV将fintertip坐标导出到Flash,以便在游戏和其他程序中使用.目前,我们的设置基于颜色,并以(x,y,z)格式将指尖输出到Flash,其中x和y以像素为单位,z以毫米为单位.
但是,我们希望将那些(x,y)坐标映射到“真实世界”值,例如毫米,使用Flash中的z深度值. 据我了解,Kinect 3D深度是通过沿着摄像机的水平方向投影X轴获得的,它是沿着摄像机垂直方向的Y轴,它的Z轴直接从摄像机的镜头向前移动.然后,深度值是从任何给定对象到XY平面绘制的垂线的长度.请参阅以下链接中的图片(从microsoft的网站获得). Microsoft Depth Coordinate System Example 此外,我们知道Kinect的水平视野以117度角投影. 使用这些信息,我想我可以将任何给定点的深度值投影到x = 0,y = 0线上,并在该点绘制一条平行于XY平面的水平线,与摄像机的视野相交.我最终得到一个三角形,分成两半,有一个物体深度的高度.然后我可以使用一点三角函数求解视场的宽度.我的等式是: W = tan(θ/ 2)* h * 2 哪里: > W =视野宽度 (对不起,我不能发布图片,如果可以,我会发布) 现在,求解1000mm(1米)的深度值,得到约3264mm的值. 然而,当实际看到产生的相机图像时,我得到了不同的值.也就是说,我在距离摄像机1米处放置了一根米棒,发现框架的宽度最多为1.6米,而不是估计的3.264米. 这里有什么我想念的吗?任何帮助,将不胜感激. 解决方法
深度流是正确的.您确实应该获取深度值,然后从Kinect传感器中,您可以轻松找到相对于Kinect的现实世界中的点.这是通过简单的三角法完成的,但是你必须记住深度值是从Kinect“眼睛”到测量点的距离,因此它是长方体的对角线.
实际上,请点击此链接How to get real world coordinates (x,z) from a distinct object using a Kinect 这是没有用的重写,你有正确的答案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |