Joh*_*ohn 2 matlab color-depth kinect
当我运行这个Matlab代码来获取深度图像时,我得到的结果是480x640的矩阵.min元素值为0,max元素值为2711. 2711是什么意思?这是从相机到图像最远部分的距离.但是2711的单位是多少.那是几米还是几米?
我不知道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深度相机及其校准的更多详细信息.