我计算视差图
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、截断并保存到文件时,当您将文件读回内存时,这些小差异将不可避免地映射到更小的数字。因此,您需要绝对确定这就是您真正想要做的事情。
关于image - 使用 png 文件读取视差图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731487/