繁体   English   中英

使用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进行缩放,截断并保存到文件时,当您将文件读回内存时,这些小的差异将不可避免地映射为较小的数字。 因此,您需要绝对确保这是您真正想要做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM