Datos de imagen multicanal#
Más allá de las imágenes bidimensionales que pueden expresarse como una matriz 2D, las imágenes multidimensionales y multicanales también son bastante comunes. Por ejemplo, importemos la imagen hela-cells.tif:
from skimage.io import imread
image = imread('../../data/hela-cells.tif')
image.shape
(512, 672, 3)
Vemos que en lugar de solo filas y columnas de píxeles, ahora tenemos un número adicional que nos indica que tenemos tres planos en nuestros datos. En este caso, cada imagen corresponde a un canal, pero para otros datos podrían ser planos z, puntos de tiempo, etc.
Jugando con las dimensiones#
Reorganizar datos multidimensionales es a menudo necesario para que correspondan a la entrada de una función. Por ejemplo, microshow espera que los canales estén en la primera dimensión, por lo que tenemos que mover el último eje a la primera posición y usar la función de Numpy np.moveaxis para esto:
import numpy as np
image_rolled = np.moveaxis(image, source=2, destination=0)
image_rolled.shape
(3, 512, 672)
Hay muchas otras funciones en Numpy para realizar estas operaciones de movimiento de ejes. Por ejemplo np.swapaxes, np.rollaxis, etc.
Visualización de imágenes multicanal#
La función microshow se encarga de mostrar la imagen con valores predeterminados razonables:
from microfilm.microplot import microshow
microshow(image_rolled);
Por defecto, utiliza una combinación de mapas de colores Cian, Magenta y Amarillo, pero estos también se pueden cambiar:
microshow(image_rolled, cmaps=['pure_red', 'pure_green', 'pure_blue']);
También podemos visualizar estos tres canales de forma independiente dividiéndolos. Además, podemos organizar múltiples imágenes una al lado de la otra usando subplots de matplotlib:
channel1 = image[:,:,0]
channel2 = image[:,:,1]
channel3 = image[:,:,2]
import matplotlib.pyplot as plt
fig, axs = plt.subplots(1, 3, figsize=(15,15))
microshow(channel1, ax=axs[0], cmaps='pure_cyan')
microshow(channel2, ax=axs[1], cmaps='pure_magenta')
microshow(channel3, ax=axs[2], cmaps='pure_yellow');
Ejercicio#
Explora las tablas de búsqueda, también conocidas como mapas de colores en matplotlib y visualiza los tres canales anteriores de la manera más similar posible a cómo se visualiza la imagen en ImageJ.