2017-09-08 10 views
1

Je ne trouve aucune explication claire sur la façon de faire une image à 3 canaux avec tifffile. J'ai essayé (toutes les valeurs sont comprises entre 0 et 1)Comment écrire une image à 3 canaux dans un fichier tiff?

image = [(0.5,0.2145,0), (1,0.214568,0.324586).... ] 
side = int(len(image)**(1/2)) 
R,G,B = zip(*image) 
R = np.array(R).reshape((side,side)) 
G = np.array(G).reshape((side,side)) 
B = np.array(B).reshape((side,side)) 

tiff.imsave("./TIFFs/%s_%s"%(data_class,data_id)+'.tiff', np.concatenate((R,G,B))) 

mais ce que je reçois est 3 images sur une échelle de gris dessus de l'autre représentant les valeurs R, G, B. (http://imgur.com/gallery/ssMD3)

mon objectif est d'obtenir un RGB comme image, mais avec la précision en virgule flottante de tiff

+0

Il semble que votre TIFF soit stocké avec PlanarConfiguration = 2 ("planar") au lieu de PlanarConfiguration = 1 ("chunky"). Voir la spécification TIFF 6.0, page 38, pour une explication technique: https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf Je ne connais pas la bibliothèque TIFF utilisez - il existe peut-être des options pour modifier la configuration de Planar. – SBS

Répondre

0

Je Christoph Gohlke envoyé par courriel, le développeur de Tifffile.py et Heres sa réponse

E.g. tifffile.imsave('rgb.tif', numpy.zeros((256, 256, 3), 'uint16')) 

Pour une raison quelconque, cela n'a pas fonctionné en utilisant une forme (n, n, 3) qui a parfaitement fonctionné (3, n, n). Remarque: les valeurs RVB sont des entiers compris dans la plage [0,65535]. Par conséquent, il perd beaucoup de précision en virgule flottante.