Piles d’images multidimensionnelles#
Les données d’images multidimensionnelles peuvent être traitées de manière similaire aux données d’images multi-canaux.
Piles d’images tridimensionnelles#
Il existe également des images avec trois dimensions spatiales : X, Y et Z. On trouve des exemples typiques en microscopie et en imagerie médicale. Examinons un ensemble de données d’Imagerie par Résonance Magnétique (IRM) :
from skimage.io import imread
from pyclesperanto_prototype import imshow
image_stack = imread('../../data/Haase_MRT_tfl3d1.tif')
image_stack.shape
(192, 256, 256)
Nous voyons que les données ont effectivement trois dimensions, dans ce cas 192 plans Z et 256 pixels X et Y. Nous pouvons l’afficher avec imshow de pyclesperanto :
imshow(image_stack)
Cet ensemble de données IRM semble inhabituel, car nous regardons une projection d’intensité maximale qui est la façon par défaut de pyclesperanto de visualiser des données tridimensionnelles.
Découpage d’image#
Nous pouvons examiner des tranches d’image individuelles en spécifiant leur index dans notre tableau numpy 3D et cette fois utiliser imshow de Matplotlib pour la visualisation :
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 3, figsize=(15,15))
# afficher trois images planaires
axs[0].imshow(image_stack[48], cmap='Greys_r')
axs[1].imshow(image_stack[96], cmap='Greys_r')
axs[2].imshow(image_stack[144], cmap='Greys_r');
Comme les trois dimensions sont des dimensions spatiales, nous pouvons également faire des coupes orthogonales au plan de l’image et correspondant aux plans anatomiques. Pour orienter correctement les images, nous pouvons transposer leurs axes en ajoutant .T à la fin.
saggital = image_stack[:,:,128].T
coronal = image_stack[:,128,:].T
transverse = image_stack[96]
fig, axs = plt.subplots(1, 3, figsize=(15,15))
# afficher les plans orthogonaux
axs[0].imshow(saggital, cmap='Greys_r')
axs[0].set_title('Sagittal')
axs[1].imshow(coronal, cmap='Greys_r')
axs[1].set_title('Coronal')
axs[2].imshow(transverse, cmap='Greys_r')
axs[2].set_title('Transverse');
Vidéos#
Si un ensemble de données d’image a une dimension temporelle, nous l’appelons une vidéo. Le traitement des vidéos fonctionne de manière similaire aux images multi-canaux et aux piles d’images. Ouvrons un ensemble de données de microscopie montrant des cellules de levure s’arrondissant au fil du temps. (Données d’image gracieuseté d’Anne Esslinger, laboratoire Alberti, MPI CBG)
video = imread('../../data/rounding_assay.tif')
video.shape
(64, 512, 512)
fig, axs = plt.subplots(1, 4, figsize=(15,15))
# afficher trois images planaires
axs[0].imshow(video[0], cmap='Greys_r')
axs[1].imshow(video[5], cmap='Greys_r')
axs[2].imshow(video[10], cmap='Greys_r')
axs[3].imshow(video[15], cmap='Greys_r');
Données n-dimensionnelles#
Les données de haute dimension sont assez courantes en microscopie. Pour les traiter correctement, il faut étudier attentivement les dimensions d’un ensemble de données d’image. Nous pouvons explorer les possibilités en utilisant l’ensemble de données mitosis :
mitosis = imread('../../data/mitosis.tif')
mitosis.shape
(51, 5, 2, 196, 171)
Conseil : Ouvrez l’ensemble de données dans ImageJ/Fiji pour comprendre ce que ces nombres représentent. Vous pouvez y voir que l’ensemble de données de mitose a
51 images,
5 tranches Z,
2 canaux et
fait 171 x 196 pixels de large.
Nous allons maintenant saisir les canaux 1 et 2 du premier point temporel (index 0) dans le plan central (index 2) :
timepoint = 0
plane = 2
channel1 = mitosis[timepoint, plane, 0]
channel2 = mitosis[timepoint, plane, 1]
fig, axs = plt.subplots(1, 2, figsize=(15,15))
axs[0].imshow(channel1, cmap='Greys_r')
axs[1].imshow(channel2, cmap='Greys_r');
Exercice#
Ouvrez l’ensemble de données de mitose, sélectionnez trois points temporels et affichez-les côte à côte. La figure résultante devrait avoir trois colonnes et deux rangées. Dans la première rangée, le canal1 est affiché et le deuxième canal en dessous.