Corte y recorte#
Cuando se trabaja con datos de imágenes más grandes, a menudo tiene sentido recortar regiones y enfocarse en ellas para un análisis más detallado. Para recortar imágenes, usamos la misma sintaxis “:”, que utilizamos al indexar en listas y explorar datos de imágenes multidimensionales.
import numpy as np
from skimage.io import imread, imshow
Comenzamos cargando una imagen 3D e imprimiendo su tamaño.
image = imread("../../data/Haase_MRT_tfl3d1.tif")
image.shape
(192, 256, 256)
Corte#
Para visualizar imágenes 3D usando imshow de scikit-image, necesitamos seleccionar un corte para visualizar. Por ejemplo, un corte en Z:
slice_image = image[100]
imshow(slice_image)
<matplotlib.image.AxesImage at 0x2b54f73d340>
También podemos seleccionar un plano donde todos los píxeles tengan la misma posición Y. Solo necesitamos especificar que nos gustaría mantener todos los píxeles en Z usando la sintaxis :.
slice_image = image[:, 100]
imshow(slice_image)
<matplotlib.image.AxesImage at 0x2b54f836af0>
Recorte#
También podemos seleccionar una sub-pila usando indexación en los corchetes cuadrados.
sub_stack = image[50:150]
sub_stack.shape
(100, 256, 256)
También podemos seleccionar una sub-región en X. Si queremos mantener todos los píxeles a lo largo de Z e Y (las dos primeras dimensiones), simplemente especificamos : para mantener todo.
sub_region_x = image[:, :, 100:200]
imshow(sub_region_x[100])
<matplotlib.image.AxesImage at 0x2b54f8ae850>
Para seleccionar todos los píxeles en una dirección por encima de un valor dado, solo necesitamos especificar el inicio antes de :.
sub_region_y = image[:, 100:]
imshow(sub_region_y[100])
<matplotlib.image.AxesImage at 0x2b54f90ae20>
De manera similar, podemos seleccionar todos los píxeles hasta una posición dada.
sub_region_x2 = image[:, :, :50]
imshow(sub_region_x2[100])
<matplotlib.image.AxesImage at 0x2b550943d30>
Por último, pero no menos importante, así es como se especifica un cubo recortado.
cropped_cube = image[80:130, 120:170, :50]
cropped_cube.shape
(50, 50, 50)
imshow(cropped_cube[20])
<matplotlib.image.AxesImage at 0x2b5509a4a00>
Y así es como se ven las proyecciones de máxima intensidad de este cubo recortado.
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>