我对如何在MATLAB中处理Kinect v1的深度图像感到有些困惑。我正在使用这些(http://www.mathworks.com/matlabcentral/fileexchange/30242-kinect-matlab)mex文件从已保存的* .oni文件中读取我的深度图像。结果,我得到分辨率640x480或320x240的图像。图像中的值大致在0-4500之间。
我现在在这里处理什么类型的图像?读这个http://www.mathworks.de/de/help/matlab/creating_plots/working-with-8-bit-and-16-bit-images.html我认为它必须是一个索引图像,因为它不是RGB图像,并且值不是线性缩放的。另一方面,我相信图像中的值是以毫米为单位的Kinect焦平面的实际距离,因此具有指数以外的含义。
当我想使用
查看图像时imshow(depthMap);
我只看到黑色。我必须使用像
这样的东西imshow(depthMap, [0 9000])
实际看到的东西。究竟是为什么呢? imshow(depthMap)对值的作用是什么? 您是否认为在我的算法中使用depthMap是正确的,但是使用
查看它imshow(depthMap, [0 9000])
答案 0 :(得分:2)
depthMap
不是索引图像,但正如您所信,每个像素都以mm为单位编码与焦平面的距离。
要使用imshow
显示此类图片,我建议默认情况下使用自动缩放,即imshow(depthMap,[])
,或使用固定比例(正如您当前所做),如果有用的话意味着最小和最大。打开颜色条,通过GUI或调用colorbar()
可视化颜色和深度之间的对应关系。
imshow
会将颜色限制缩放为[0 1],除非图像属于类uint8
,其中颜色限制设置为[0 255]。换句话说,在没有比例参数的情况下,0和更低的值被映射到黑色,1和更高的值被映射到白色。另请参阅caxis
。