[英]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.