2017-01-21 1 views
3

J'utilise skimage pour convertir des images RVB en espace de couleurs Lab, mais il semble que skimage utilise le type de données float64 alors que Tensorflow utilise float32.Utilisation d'images de laboratoire 32 bits dans Tensorflow

Existe-t-il un moyen de convertir l'image de laboratoire 64 bits en type de données 32 bits? La documentation ne couvre rien de spécifique à ce sujet et je ne suis pas sûr que l'utilisation de image.astype(np.float32) soit la meilleure solution, car elle pourrait endommager la précision des données (ou non).

est ici une partie du code:

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) 

La dernière ligne donne une erreur:

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

et voici la trace de pile:

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. 

Répondre

3

L'utilisation x.astype(np.float32) est parfaitement acceptable . Vous aurez rarement besoin d'un tel niveau de précision. Cependant, si vous ne faites pas attention, vous pouvez lancer accidentellement une image entière (par exemple, des octets non signés, allant de 0 à 255) dans float. Ainsi, la méthode la plus sûre, qui dimensionne au besoin, est

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

Utiliser 'img_as_float (laboratoire) .astype (np.float32)' me donne la même erreur que l'utilisation 'np.array (laboratoire) .astype (np .float32) '=>' Les images de type float doivent être entre -1 et 1. 'Vous pouvez même essayer le code vous-même. – Cypher

+0

Si vous démarrez avec un tableau à virgule flottante qui n'est pas compris entre -1 et 1, vous pouvez rencontrer ce problème. Si vous postez un exemple d'image ou si vous pouvez illustrer votre problème sur l'une des images d'exemple 'skimage.data', je serais ravi d'y jeter un autre coup d'œil. –