加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

flash – Kinect – 使用深度将(x,y)像素坐标映射到“真实世界”

发布时间:2020-12-15 19:48:28 所属栏目:百科 来源:网络整理
导读:我正在开发一个项目,该项目使用Kinect和OpenCV将fintertip坐标导出到Flash,以便在游戏和其他程序中使用.目前,我们的设置基于颜色,并以(x,y,z)格式将指尖输出到Flash,其中x和y以像素为单位,z以毫米为单位. 但是,我们希望将那些(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 =视野宽度
> theta =水平视野角度(117度)
> h =深度值

(对不起,我不能发布图片,如果可以,我会发布)

现在,求解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

这是没有用的重写,你有正确的答案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读