我计算视差图
d = disparity(imgL,imgR, 'Method', 'SemiGlobal', 'BlockSize', 7);
如果我想在图像文件中保存视差图
dis1 = d/63; imwrite(dis1,'dis.png');
如何在Matlab中阅读此视差图?
我试过了:
disparityMap= single(imread('dis.png')/63);
但它没有给出相同的矩阵。感谢
答案 0 :(得分:3)
使用imwrite
保存PNG文件的问题在于对于浮点图像(例如视差图),该函数将数据乘以255并在保存之前将数据截断为8位无符号整数。因此,如果您尝试重新读取此图像,则需要除以255以使其恢复到之前的状态,但由于截断,您肯定会获得精度损失。您可以通过首先除以255得到缩放的视差图来近似您之前所拥有的,然后您需要乘以 63以将您之前的除法撤消63 ...哦是的,顺便说一下你在进行除法之前需要首先转换数据类型,否则你将被截断数据类型,这也是你出错的地方:
disparityMap = single(imread('dis.png'))*(63/255);
请注意,由于在除以63时以及写入文件时的精度损失,您将无法获得与之前完全相同的结果。除以63会使小的差异更小,这样当你实际缩放255,截断并保存到文件时,当你将文件读回内存时,这些小的差异将不可避免地被映射到一个较小的数字。因此,您需要确保这是您真正想要做的事情。