从Kinect收到的深度图像是什么?

Joh*_*ohn 2 matlab color-depth kinect

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

Jul*_*éon 5

我不知道Matlab代码究竟对深度做了什么,但它可能会对它进行一些处理,因为Kinect发送的深度是11位,所以它不应该高于2048.试着找出什么它可以访问Kinect发送的原始数据.

Kinect发送的数据不是一个合适的距离(它是一个"差异"),所以你必须做一些数学运算才能将它转换成有用的单位.

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

根据它们的数据,用于将原始11位视差值转换为以厘米为单位的深度值的基本一阶近似是:100 /( - 0.00307*rawDisparity + 3.33).这种近似值在4米远处约为10厘米,在2.5米范围内距离不到2厘米.

StéphaneMagnenat在这篇文章中给出了一个更好的近似值:距离= 0.1236*tan(rawDisparity/2842.5 + 1.1863),以米为单位.添加最终偏移项-0.037使原始ROS数据居中.tan近似的平方差为.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.
Run Code Online (Sandbox Code Playgroud)

您可以在ROS网站(以及其他许多人!)上找到有关Kinect深度相机及其校准的更多详细信息.