在Tensorflow中使用32位Lab图像

时间:2017-01-21 15:49:14

标签: python numpy tensorflow scikit-image

我正在使用skimage将RGB图像转换为Lab颜色空间,但似乎skimage使用float64数据类型,而Tensorflow使用float32

有没有办法将64位Lab图像转换为32位数据类型?文档没有涵盖任何具体的内容,我不确定使用image.astype(np.float32)是否可行,因为它可能会损坏数据精度(或不会)。

以下是代码的一部分:

from skimage import color, io
import numpy as np    

rgb = io.imread('Test.jpg') # Could be any shape
lab = color.rgb2lab(rgb)

converted = np.array(lab).astype(np.float32)
rgb = color.lab2rgb(converted)

最后一行给出错误:

ValueError: Images of type float must be between -1 and 1.

这是堆栈跟踪:

  File "C:\Anaconda3\lib\site-packages\skimage\color\colorconv.py", line 928, in lab2rgb
    return xyz2rgb(lab2xyz(lab))
  File "C:\Anaconda3\lib\site-packages\skimage\color\colorconv.py", line 855, in lab2xyz
    arr = _prepare_colorarray(lab).copy()
  File "C:\Anaconda3\lib\site-packages\skimage\color\colorconv.py", line 153, in _prepare_colorarray
    return dtype.img_as_float(arr)
  File "C:\Anaconda3\lib\site-packages\skimage\util\dtype.py", line 291, in img_as_float
    return convert(image, np.float64, force_copy)
  File "C:\Anaconda3\lib\site-packages\skimage\util\dtype.py", line 195, in convert
    raise ValueError("Images of type float must be between -1 and 1.")
ValueError: Images of type float must be between -1 and 1.

2 个答案:

答案 0 :(得分:3)

使用x.astype(np.float32)是完全可以接受的。你很少需要那种准确度。

但是,如果您不小心,可能会意外地将整数图像(例如,无符号字节,从0到255)转换为float。因此,最安全的方法,将根据需要重新调整,是

from skimage import img_as_float
image = img_as_float(image).astype(np.float32)

答案 1 :(得分:0)

这是一个很难跟踪的错误。

如果您使用的是float32,则将收到所描述的错误;但是,如果改用float64值,错误将消失。

希望有帮助! :)

已知错误源: Scikit-image Issue