image - 使用 png 文件读取视差图

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

我计算视差图

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/

相关文章:

java - 尝试将图像插入数据库获取 ORA-01460 : unimplemented or unreasonable conversion requested error

matlab - Matlab中的访问函数

python - fastai - 图像分割的多类度量

python - 计算 OpenCV 中一条线上的白色像素数

image - 用 Mathematica 中的自定义图像替换像素?

javascript - 打印带有图像的 html(每个图像在单独的页面上)

matlab - 从Matlab中的矩阵中删除行和列

algorithm - 购买时给予的最少现金数额

computer-vision - 如何使用Azure自定义视觉服务响应boundingBox绘制形状

image - 是否有任何工具可以对图像执行相当于 "git diff"的操作(看看发生了什么变化?)