web-dev-qa-db-fra.com

Quel est l'ordre de dimension de la forme numpy pour les données d'image?

J'utilise nibabel lib pour charger les données du fichier nii. J'ai lu le document de la bibliothèque sur http://nipy.org/nibabel/gettingstarted.html , et j'ai constaté que

Ces informations sont disponibles sans avoir à charger quoi que ce soit des données d'image principales dans la mémoire. Bien sûr, il y a également accès aux données d'image sous forme de tableau NumPy

Ceci est mon code pour charger les données et il façonne

import nibabel as nib
img = nib.load('example.nii')
data = img.get_data()
data = np.squeeze(data)
data = np.copy(data, order="C")
print data.shape

J'ai le résultat

128, 128, 64

Qu'est-ce que l'ordre de la forme des données? Est-ce WidthxHeightxDepth? Et mon entrée doit être organisée en depth, height, width. Je vais donc utiliser input=data.transpose(2,0,1). Est ce juste? Merci a tous

Mise à jour: J'ai trouvé que le Numpy lira l'image par commande Height x Width x Depth Comme référence http://www.python-course.eu/images/axis.jpeg

11
John

OK, voici mon point de vue:

En utilisant scipy.ndimage.imread('img.jpg', mode='RGB'), le tableau résultant aura toujours cet ordre: (H, W, D) c'est-à-dire (hauteur, largeur, profondeur) en raison de la terminologie utilisée par numpy pour les ndarrays (axis=0, axis=1, axis=2) ou de manière analogue (Y, X, Z) si l'on souhaite visualiser en 3 dimensions.

# read image
In [21]: img = scipy.ndimage.imread('suza.jpg', mode='RGB')

# image shape as (H, W, D)
In [22]: img.shape
Out[22]: (634, 1366, 3)

# transpose to shape as (D, H, W)
In [23]: tr_img = img.transpose((-1, 0, 1))    

In [23]: tr_img.shape
Out[23]: (3, 634, 1366)

Si vous considérez l'img_shape comme un tuple,

#  index    (0,   1,    2)
img_shape = (634, 1366, 3)
# or index  (-3,  -2,  -1)

Choisissez celui qui vous convient le mieux.


[~ # ~] ps [~ # ~] : Il convient également de noter que les bibliothèques comme tensorflow suivent également (presque) la même convention que numpy.

tf.image_decode_jpeg () renvoie:

Un tenseur de type uint8. 3D avec forme [height, width, channels]

16
kmario23