使用png文件读取视差图

read disparity map using png file

我计算了一个视差图

d = disparity(imgL,imgR, 'Method', 'SemiGlobal', 'BlockSize', 7);

如果我想在图像文件中保存视差图

dis1 = d/63;  imwrite(dis1,'dis.png');

如何在Matlab中读取这个视差图?

我试过了:

disparityMap= single(imread('dis.png')/63);

但它没有给出相同的矩阵。谢谢

使用 imwrite 保存 PNG 文件的问题在于,对于像视差图这样的浮点图像,该函数会在保存前将数据乘以 255 并将数据截断为 8 位无符号整数。因此,如果您尝试重新读取此图像,则需要除以 255 才能将其恢复到之前的状态,但由于截断,您肯定会损失精度。您可以先将 255 除以得到缩放后的视差图,然后您需要 乘以 乘以 63 以撤消之前除以 63 的结果...哦,是的,然后在进行除法之前首先需要转换数据类型的方式,否则您将被截断数据类型,这也是您出错的地方:

disparityMap = single(imread('dis.png'))*(63/255);

请注意,由于除以 63 时以及写入文件时的精度损失,您将无法获得与之前完全相同的结果。除以 63 将使小差异变得更小,因此当您实际按 255 缩放、截断并保存到文件时,当您将文件读回内存时,这些小差异将不可避免地映射到更小的数字。因此,您需要绝对确定这就是您真正想要做的。