2017-01-21 4 views
3

Я использую skimage для преобразования изображений RGB в пространство Lab Lab, но кажется, что skimage использует тип данных float64, в то время как Tensorflow использует float32.Использование 32-разрядных лабораторных изображений в Tensorflow

Есть ли способ конвертировать 64-разрядное лабораторное изображение в 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. 

ответ

3

Использование x.astype(np.float32) вполне приемлемо , Вы редко будете когда-либо нуждаться в таком уровне точности.

Если вы не будете осторожны, вы можете случайно ввести целочисленное изображение (например, беззнаковые байты, исходящие от 0 до 255) в float. Таким образом, самый безопасный подход, который будет масштабировать по мере необходимости, является

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

Использование 'img_as_float (лаборатория) .astype (np.float32)' дает мне ту же ошибку, как с помощью 'np.array (лаборатория) .astype (н.п. .float32) '=>' Образы типа float должны быть между -1 и 1. Вы даже можете попробовать код самостоятельно. – Cypher

+0

Если вы начинаете с массива с плавающей запятой, который не находится между -1 и 1, вы можете столкнуться с этой проблемой. Если вы разместите пример изображения или можете проиллюстрировать вашу проблему на одном из примеров изображений skimage.data, я был бы рад еще раз взглянуть. –

 Смежные вопросы

  • Нет связанных вопросов^_^