Découpage et recadrage#
Lorsqu’on travaille avec des données d’image plus grandes, il est souvent logique de recadrer des régions et de se concentrer sur elles pour une analyse plus approfondie. Pour recadrer des images, nous utilisons la même syntaxe “:” que nous avons utilisée lors de l’indexation dans les listes et de l’exploration des données d’image multidimensionnelles.
import numpy as np
from skimage.io import imread, imshow
Nous commençons par charger une image 3D et afficher sa taille.
image = imread("../../data/Haase_MRT_tfl3d1.tif")
image.shape
(192, 256, 256)
Découpage#
Pour visualiser des images 3D à l’aide de la fonction imshow de scikit-image, nous devons sélectionner une tranche à visualiser. Par exemple, une tranche Z :
slice_image = image[100]
imshow(slice_image)
<matplotlib.image.AxesImage at 0x2b54f73d340>
Nous pouvons également sélectionner un plan où tous les pixels ont la même position Y. Nous devons juste spécifier que nous souhaitons conserver tous les pixels en Z en utilisant la syntaxe :.
slice_image = image[:, 100]
imshow(slice_image)
<matplotlib.image.AxesImage at 0x2b54f836af0>
Recadrage#
Nous pouvons également sélectionner une sous-pile en utilisant l’indexation dans les crochets carrés.
sub_stack = image[50:150]
sub_stack.shape
(100, 256, 256)
Nous pouvons également sélectionner une sous-région en X. Si nous voulons conserver tous les pixels le long de Z et Y (les deux premières dimensions), nous spécifions simplement : pour tout conserver.
sub_region_x = image[:, :, 100:200]
imshow(sub_region_x[100])
<matplotlib.image.AxesImage at 0x2b54f8ae850>
Pour sélectionner tous les pixels dans une direction au-dessus d’une valeur donnée, nous devons simplement spécifier le début avant :.
sub_region_y = image[:, 100:]
imshow(sub_region_y[100])
<matplotlib.image.AxesImage at 0x2b54f90ae20>
De même, nous pouvons sélectionner tous les pixels jusqu’à une position donnée.
sub_region_x2 = image[:, :, :50]
imshow(sub_region_x2[100])
<matplotlib.image.AxesImage at 0x2b550943d30>
Enfin, voici comment un cube recadré est spécifié.
cropped_cube = image[80:130, 120:170, :50]
cropped_cube.shape
(50, 50, 50)
imshow(cropped_cube[20])
<matplotlib.image.AxesImage at 0x2b5509a4a00>
Et voici à quoi ressemblent les projections d’intensité maximale de ce cube recadré.
maximum_intensity_projection_along_z = np.max(cropped_cube, axis=0)
imshow(maximum_intensity_projection_along_z)
<matplotlib.image.AxesImage at 0x2b550a03f40>
maximum_intensity_projection_along_y = np.max(cropped_cube, axis=1)
imshow(maximum_intensity_projection_along_y)
<matplotlib.image.AxesImage at 0x2b550a5e8e0>