2

当我运行这个Matlab 代码来获取深度图像时,我得到的结果是一个 480x640 的矩阵。最小元素值为0,最大元素值为2711。2711是什么意思?是从相机到图像最远部分的距离。但是 2711 的单位是什么。是英尺还是米??

4

2 回答 2

5

我不知道 Matlab 代码对深度到底做了什么,但它可能对它做了一些处理,因为 Kinect 发送的深度是 11 位的,所以它不应该高于 2048。试着找出什么它确实如此,或者访问 Kinect 发送的原始数据。

Kinect 发送的数据不是适当的距离(它是“差异”),因此您必须进行一些数学运算才能将其转换为有用的单位。

来自OpenKinect 项目 wiki(其中包含有关 Kinect 的有用信息):

根据他们的数据,将原始 11 位视差值转换为以厘米为单位的深度值的基本一阶近似值是:100/(-0.00307 * rawDisparity + 3.33)。这个近似值在 4 m 处大约偏离 10 cm,在 2.5 m 内偏离小于 2 cm。

Stéphane Magnenat 在这篇文章中给出了一个更好的近似值:距离 = 0.1236 * tan(rawDisparity / 2842.5 + 1.1863) 以米为单位。添加 -0.037 的最终偏移项使原始 ROS 数据居中。tan 近似值的平方和差为 0.33 cm,而 1/x 近似值约为 1.7 cm。

使用上述测量获得距离后,将 (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 网站(以及许多其他网站!)上找到有关 Kinect 深度相机及其校准的更多详细信息。

于 2011-06-06T15:01:09.393 回答
0

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

于 2011-12-30T01:30:12.327 回答