0

我需要将视差图像保存到我的磁盘。视差图像的数据类型为单精度,视差范围为[0 128]。使用imwrite(disparityMap,file_name)时,保存的图像似乎是二进制的。

4

1 回答 1

1

当您使用浮点精度的 imwrite 时,matlab 认为您的数据在 [0 1] 范围内。所以任何高于 1 的值都将被视为 1。这就是为什么你有一张黑白图像。

来自matlab 文档

如果 A 是数据类型为 double 或 single 的灰度或 RGB 彩色图像,则 imwrite 假定动态范围为 [0,1] 并在将数据作为 8 位值写入文件之前自动将数据缩放 255。

然后,您有两个解决方案。我正在考虑 128 是您数据中的最大值,并且您想要一个从黑色到白色的颜色图。我会

第一个解决方案,标准化您的数据,以便 matlab 进行正确的转换:

% Normalize your data between 0 and 1
disparityMap = disparityMap/128;

% write the image
imwrite(disparityMap,file_name)

第二种方案,自己做转换,直接把图片写成uint8:

% Normalize your data between 0 and 255 and convert to uint8
disparityMapU8 = uint8(disparityMap*255/128);

% write the image as uint8
imwrite(disparityMapU8,file_name)
于 2016-12-14T16:40:34.870 回答