将图像从float64转换为uint8会使图像看起来更暗

8
我有由GANs生成的float64类型图像,并通过skimage.io.imsave保存。该过程工作正常,保存的图像看起来很好,但我收到以下警告消息:

从float64到uint8的有损转换。范围[-0.9999998807907104, 0.9999175071716309]。在保存之前将图像转换为uint8以抑制此警告。

然后我尝试使用函数skimage.img_as_ubyte将图像转换为uint8以消除此警告。这给我带来了一个明显更暗的图像和一个警告。

UserWarning: 可能会在从float64转换为uint8时出现精度损失 .format(dtypeobj_in, dtypeobj_out))

我也尝试过使用其他函数,例如来自tensorflow的tf.image.convert_image_dtype,然后再保存。它们返回的图像比我直接调用skimage.io.imsave得到的图像更暗。问题出在哪里?
这是通过在保存之前转换为uint8生成的一组图像enter image description here
这是直接保存生成的一组图像
2个回答

10

根据你提供的skimage.img_as_ubyte的文档

负数输入值会被裁剪。正数按比例缩放至0到255之间。

由于你的图像在区间[-1,1]内,其中一半数据将被设置为0,这就是为什么看起来比较暗淡。在调用skimage.img_as_ubyte之前,尝试先将图像缩放到仅有正数范围内,例如添加1。


8
我使用以下方式解决了这个警告:
import numpy as np
import imageio

# suppose that img's dtype is 'float64'
img_uint8 = img.astype(np.uint8)
# and then
imageio.imwrite('filename.jpg', img_uint8)

就是这样!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接