我需要将视差图像保存到我的磁盘上。视差图像的数据类型是单精度,并且视差范围是[0 128]。
使用imwrite(disparityMap,file_name)
时,保存的图像显示为二进制。
答案 0 :(得分:1)
当您使用具有浮点精度的imwrite时,matlab会认为您的数据在[0 1]范围内。因此,任何大于1的值都将被视为1.这就是为什么你有一个黑白图像。
来自matlab doc:
如果A是数据类型为double或single的灰度或RGB彩色图像,则imwrite假定动态范围为[0,1]并自动将数据缩放255,然后将其作为8位值写入文件。
然后,你有两个解决方案。我认为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)