簡體   English   中英

在Tensorflow中使用32位Lab圖像

[英]Using 32-bit Lab images in Tensorflow

我正在使用skimage將RGB圖像轉換為Lab顏色空間,但似乎skimage使用float64數據類型,而Tensorflow使用float32

有沒有辦法將64位Lab圖像轉換為32位數據類型? 文檔沒有涵蓋任何具體的內容,我不確定使用image.astype(np.float32)是否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.

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

但是,如果您不小心,可能會意外地將整數圖像(例如,無符號字節,從0到255)轉換為float。 因此,最安全的方法,將根據需要重新調整,是

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

這是一個難以追查的錯誤。

如果你正在使用float32,那么你會得到你所描述的錯誤; 但是,如果您使用float64值,錯誤將消失。

希望有所幫助! :)

已知錯誤來源: Scikit-image問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM