将Matlab视差图像从单精度转换为uint8

时间:2016-12-10 08:27:48

标签: matlab disparity-mapping

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

1 个答案:

答案 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)