【问题标题】:read disparity map using png file使用 png 文件读取视差图
【发布时间】:2017-08-01 13:43:12
【问题描述】:

我计算一个视差图

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

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

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

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

我试过了:

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

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

【问题讨论】:

    标签: image matlab computer-vision matlab-cvst stereo-3d


    【解决方案1】:

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

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

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

    【讨论】:

    • 非常感谢@rayryeng​​span>
    猜你喜欢
    • 2015-12-13
    • 2022-01-02
    • 2012-04-18
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    相关资源
    最近更新 更多