Kinect开发学习笔记之(追加)深度距离误差分析
来源:互联网 发布:淘宝店全包 编辑:程序博客网 时间:2024/06/05 04:29
由于最近要研究kinect采集到的深度信息的一些统计特征,所以必须先对kinect深度信息做进一步的了解。这些了解包括kinect的深度值精度,深度值的具体代表的距离是指哪个距离以及kinect深度和颜色扫描范围等。经过查找资料可以解决这些问题,并且后面通过实验也验证了这些问题的答案。
开发环境:开发环境:QtCreator2.5.1+OpenNI1.5.4.0+Qt4.8.2+OpenCV2.4.3
实验基础
首先来看下Kinect性能的基本参数,如下图所示:
Kinect在使用时,微软官方推荐的距离为1220mm(4’)~3810mm(12.5’),网友heresy在他的博文Kinect + OpenNI 的深度值中统计过,kinect在距离为1.0m时其精度大概是3mm,而当距离是3.0m时,其精度大概是3cm,因此当kinect在官方推荐的距离范围内使用是,如果是1.2m时,其精度应该在3mm附近,如果是3.6m时其精度就大于3cm了,因此距离越远,其深度值精度越低。另外,通过OpenNI获取到的深度信息(即z坐标)的单位是mm,这一点在程序编程中要注意,且一般的深度值用12bit(其实是可以用13bit表示的)表示,即最大值为4095,也就是代表4.095m,所以平时我们采集到的深度数据如果需要扩展到灰度图,可以乘以一个因子255/4095(为了加快该结果,一般设置为256/4096,即转换后的灰度值每变化1,代表kinect采集到的深度值变化了16mm,如果当人的距离为1米左右时,本来精度是3mm,现在经过归一化后精度确更加下降了,这时候拿这个距离值来做算法不懂会不会有影响,当然了,拿来做灰度图像的显示肯定是OK的),最后如果其深度值为0表示该位置处侦测不到像素点的深度。
Kinect的侦测范围入下图所示:
可以看出,kinect的水平侦测范围为57度(即以sensor为中心,左右各28.5度)。垂直范围为43度(同理,以sensor为中心,上下各21.5度)。如果人体活动超过了kinect侦测范围,kinect还会自动追焦27度,即马达能够上下旋转27度(因为涉及到专利的问题,OpenNI驱动没有这个功能,微软SDK可以),因此理论上上下扫描的范围应该为97度(27+27+43)。水平方向上虽然有马达,但是只能手动去掰动kinect,因为驱动中并没有对应的水平角度旋转的API,即使是微软的SDK也一样。
Kinect的倾斜角度如下图所示:
下面来解释Kinect采集到的深度值的具体含义:
Openni的原始驱动类中的depth_metadata_其实也是一副图像,图像的坐标表示空间点的投影坐标,图像坐标里存的值是对应空间点投影坐标的深度值。该深度值并不是指空间中对应像素点到深度sensor点之间的距离(即2点直接的距离),而是指空间中对应像素点到kinect传感器所在平面的距离(即是一个垂直距离),因为前面已经提到,kinect是可以上下旋转的。现假设三种情况,第一:我们不上下旋转kinect,即保持kinect传感器平面与水平地面垂直,这时像素点X深度值为a;第二:将kinect往上旋转一个角度(当然了,这个角度值小于27度),这时候同样一个像素点X的深度值为b;第三:将kinect往下旋转一个角度Beta角度,这时候X的深度值为c;你会发现,a,b,c这3者不一定相等。
- Kinect开发学习笔记之(追加)深度距离误差分析
- Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取
- Kinect开发学习笔记之(八)彩色、深度、骨骼和用户抠图结合
- Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取
- Kinect开发学习笔记之(八)彩色、深度、骨骼和用户抠图结合
- Kinect开发学习笔记之(七)带游戏者ID的深度数据的提取
- Kinect开发学习笔记之(九)彩色、深度、骨骼和用户抠图结合
- Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取
- Kinect开发学习笔记之(八)彩色、深度、骨骼和用户抠图结合
- Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取
- 【深度学习:CNN】误差分析
- Kinect开发学习笔记之(二)Kinect开发学习资源整理
- Kinect开发学习笔记之(二)Kinect开发学习资源整理 (转)
- Kinect开发学习笔记之(二)Kinect开发学习资源整理
- Kinect开发学习笔记之(二)Kinect开发学习资源整理
- Kinect开发学习笔记之(二)Kinect开发学习资源整理
- Kinect开发学习笔记之(五)不带游戏者ID的深度数据的提取(转)
- Kinect开发学习笔记之(六)带游戏者ID的深度数据的提取(转)
- initialize方法和init区别详解
- C++_Primer_chapter18 3.类成员的指针
- Ambari——大数据平台的搭建利器
- 线程笔记-杂记
- 屏幕适配的关键点
- Kinect开发学习笔记之(追加)深度距离误差分析
- MarsDaemon实现安卓APP进程常驻笔记
- 实训代码以及经验汇总(后期再给他拆开)
- Spring Boot 快速入门
- 事件定时触发器 MFC(OnTimer,SetTimer,KillTimer)
- linux find命令
- Javascript对象和原型继承的理解
- Linux下启动java程序的通用脚本
- React native 打包发布