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
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]