kinect中的深度相机有多精确?
特别是我想知道:
我现在正在收集大约一天的数据,但大多数作者都没有说出他们的来源,而且价值似乎差别很大......
man*_*off 25
有传感器开发人员的官方规格,而不是微软.还没有我知道的科学论文.大量的调查和实验(见谷歌).该OpenKinect对这些事情莫过于此网站现在很多更多的讨论.
小智 12
Kinect for Windows SDK提供了一些我一直在使用并且似乎一致的常量.对于范围和分辨率,这些值是:
在默认模式下:
在近模式:
对于彩色相机,您可能具有以下任一分辨率:
对于深度相机,您可能具有以下任一分辨率:
面对来自Avada Kedavra(以及大多数来源的信息)的信息,API给出的视野的值如下:
对于彩色相机:
对于深度相机:
来源:http://msdn.microsoft.com/en-us/library/hh855368
这里真正的问题是关于分辨率和精度.我在这里筹码,因为我发现分辨率和精度不如说明的那么好.深度分辨率的最大输出确实是640x480,然而,这不是有效的分辨率,并且这并不完全是多么精确.
kinect工作的方法基于结构光投影.在相机看到的表面上发射并投射光的图案,然后将来自原点的每条光线三角化,从物体反弹到相机.
问题在于,这种模式仅包含34.749个可以进行三角测量的亮点(http://azttm.wordpress.com/2011/04/03/kinect-pattern-uncovered/).如果我们将其与640x480 = 307.200数据点的分辨率联系起来,我们会发现一个很大的区别.问问自己,数据量是源数据点数量的10倍,是否有效,并且有效采样.我对此表示怀疑.如果你问我kinect的有效分辨率是多少,我猜它是大约240x180的诚实和相当不错的数据.
根据Kinect技术规范,终于透露了深度领域的规格(这些匹配也在Mannimarco发布的官方编程指南中得到证实):
* Horizontal field of view: 57 degrees
* Vertical field of view: 43 degrees
* Physical tilt range: ± 27 degrees
* Depth sensor range: 1.2m - 3.5m
* Resolution depth stream: 320x240 pixels
* Resolution color stream: 640x480 pixels
Run Code Online (Sandbox Code Playgroud)
但根据我自己的经验,深度传感器范围更像是0.8m-4.0m,至少我在这个范围内读得很好.此范围与mankoff在以下评论中发布的Primesense数据表相匹配.
同样重要的是要记住,靠近传感器的深度分辨率远远高于远离传感器的深度分辨率.在3-4米处,分辨率不如1.5米.例如,如果您想要计算曲面的法线,这就变得很重要.结果将更接近传感器而不是更远.
它不是很难自己测试范围.当您超出范围时,官方SDK(当前测试版)将为您提供零(0)深度.所以,你可以用一个简单的标尺对它进行测试,并测试你得到的距离/没有任何大于零的读数.我不知道OpenKinect SDK如何处理超出范围的读数.
关于噪音的评论:我会说深度流中存在相当多的噪音,这使得它更难以使用.例如,如果您计算表面法线,您可以预期它们会有点"跳跃",这当然会对假照明等产生负面影响.此外,由于红外发射器之间的距离,您在深度流中会出现视差问题和接收器.这也很难处理,因为它在深度数据中留下了一个大的"阴影".此YouTube视频演示了此问题并讨论了使用着色器解决问题的方法.这是一个值得关注的视频.