Pilas de imágenes multidimensionales#
Los datos de imágenes multidimensionales se pueden manejar de manera similar a los datos de imágenes multicanal.
Pilas de imágenes tridimensionales#
También existen imágenes con tres dimensiones espaciales: X, Y y Z. Se encuentran ejemplos típicos en microscopía y en imágenes médicas. Echemos un vistazo a un conjunto de datos de Imágenes por Resonancia Magnética (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)
Vemos que los datos tienen efectivamente tres dimensiones, en este caso 192 planos Z y 256 píxeles en X e Y. Podemos mostrarlo con el imshow de pyclesperanto:
imshow(image_stack)
Este conjunto de datos de IRM se ve inusual, porque estamos mirando una proyección de máxima intensidad, que es la forma predeterminada en que pyclesperanto visualiza datos tridimensionales.
Segmentación de imágenes#
Podemos inspeccionar cortes individuales de la imagen especificando su índice en nuestro array 3D de numpy y esta vez usar el imshow de Matplotlib para la visualización:
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 3, figsize=(15,15))
# show three planar images
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');
Como las tres dimensiones son dimensiones espaciales, también podemos hacer cortes ortogonales al plano de la imagen y correspondientes a los Planos Anatómicos. Para orientar las imágenes correctamente, podemos transponer sus ejes agregando .T al final.
saggital = image_stack[:,:,128].T
coronal = image_stack[:,128,:].T
transverse = image_stack[96]
fig, axs = plt.subplots(1, 3, figsize=(15,15))
# show orthogonal planes
axs[0].imshow(saggital, cmap='Greys_r')
axs[0].set_title('Sagital')
axs[1].imshow(coronal, cmap='Greys_r')
axs[1].set_title('Coronal')
axs[2].imshow(transverse, cmap='Greys_r')
axs[2].set_title('Transversal');
Videos#
Si un conjunto de datos de imagen tiene una dimensión temporal, lo llamamos video. El procesamiento de videos funciona de manera similar a las imágenes multicanal y las pilas de imágenes. Vamos a abrir un conjunto de datos de microscopía que muestra células de levadura redondeándose con el tiempo. (Datos de imagen cortesía de Anne Esslinger, laboratorio Alberti, MPI CBG)
video = imread('../../data/rounding_assay.tif')
video.shape
(64, 512, 512)
fig, axs = plt.subplots(1, 4, figsize=(15,15))
# show three planar images
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');
Datos n-dimensionales#
Los datos de alta dimensionalidad son bastante comunes en microscopía. Para procesarlos correctamente, uno debe estudiar cuidadosamente qué dimensiones tiene un conjunto de datos de imagen. Podemos explorar las posibilidades utilizando el conjunto de datos mitosis:
mitosis = imread('../../data/mitosis.tif')
mitosis.shape
(51, 5, 2, 196, 171)
Consejo: Abre el conjunto de datos en ImageJ/Fiji para entender qué significan estos números. Puedes ver allí que el conjunto de datos de mitosis tiene
51 fotogramas,
5 cortes Z,
2 canales y
tiene un tamaño de 171 x 196 píxeles.
Ahora tomamos los canales 1 y 2 del primer punto de tiempo (índice 0) en el plano central (índice 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');
Ejercicio#
Abre el conjunto de datos de mitosis, selecciona tres puntos de tiempo y muéstralos uno al lado del otro. La figura resultante debe tener tres columnas y dos filas. En la primera fila se muestra el canal1 y el segundo canal debajo.