2011-06-06 67 views
2

当我运行此Matlab code获得深度图像时,我得到的结果是一个480x640的矩阵。最小元素值是0,最大元素值是2711. 2711是什么意思?这是从相机到图像最远部分的距离。但是2711的单位是多少?什么是从Kinect收到的深度图像

+0

matlab代码包装OpenNI。我不知道深度图本身,但OpenNI/NITE标准的骨骼,手势等单位是毫米。深度/ z值实际上是距离原点(这是设备本身)的距离 – Artium 2011-06-12 00:35:58

回答

5

我不知道Matlab代码对深度有什么影响,但它可能会对它进行一些处理,因为Kinect发送的深度是11位,所以它不应该高于2048.尝试了解它的功能,或者访问由Kinect发送的原始数据。

由Kinect发送的数据不是一个合适的距离(这是一个“不一致”),所以你必须做一些数学转换为有用的单位。

OpenKinect project wiki(其中包含有关Kinect的有用信息):

从他们的数据,一个基本的一阶 近似为以厘米为单位的原始 11位视差值转换成深度 值是:100 /( - 0.00307 * rawDisparity + 3.33)。这种近似值在距离4米处约为10厘米,距离在2.5米以内不到2厘米。

更好的近似由 斯特凡Magnenat在this post给出: 距离= 0.1236 * TAN(rawDisparity/ 2842.5 + 1.1863)的米。添加-0.037的最终偏移项中心 原始的ROS数据。近似值的平方和为 .33厘米,而1/x近似值约为1.7厘米。

一旦有了使用上述 测定,良好的 近似用于转换(I,J,Z) 到(x,Y,Z)的距离为:

x = (i - w/2) * (z + minDistance) * scaleFactor * (w/h) 
y = (j - h/2) * (z + minDistance) * scaleFactor 
z = z 
Where 
minDistance = -10 
scaleFactor = .0021. 
These values were found by hand. 

你可以在ROS website(以及其他许多!)上找到关于Kinect深度相机及其校准的更多细节。

+0

非常感谢您 – John 2011-06-06 15:11:52

+0

对于rawDisparity>〜1100,tan函数是负值http://www.wolframalpha.com/input/?i= y +%3D + .1236 + * + tan%28x +%2F + 2842.5 +%2B + 1.1863%29 +从+ 300 +到+ 2000。我误解了吗? – 2011-11-17 04:09:47

+0

哦,我看到第一个大致相同 - 然后我只是不明白这些方程的正确使用。 – 2011-11-17 04:14:36

0

如果您将数据映射到米级,它会稍微压缩深度图像。当我试图在映射数据中查找平面时,发现这是一个问题。