Python: archivos y formatos de archivo#

Cuando se trata de trabajar con imágenes en Python, existen varios paquetes importantes. Es posible que solo necesites utilizar uno, pero es útil conocer la existencia de los demás.

Para evitar agregar muchas dependencias adicionales a este libro, no todos los paquetes se instalan aquí.

# First, our usual default imports
import sys
sys.path.append('../../../')

from helpers import *
import matplotlib.pyplot as plt
import numpy as np

Paquetes útiles de Python#

Pillow#

Los autores de Pillow lo describen como “la bifurcación PIL amigable”, donde PIL es la Biblioteca de imágenes de Python o Python Imaging Library.

De hecho, es bastante amigable y hace mucho más que simplemente leer y escribir imágenes, incluso admite funciones para dibujar en imágenes.

La principal desventaja de Pillow es que no funciona directamente con matrices NumPy. Por lo tanto, si lo que deseas es una matriz NumPy, deberás agregar algunas líneas adicionales de código para convertir las imágenes.

# Get an image path
path = find_image('happy_cell.tif')[0]

# Read an image and convert to a NumPy array
from PIL import Image
with open(path, 'rb') as f:
    image = Image.open(f)
    im = np.asarray(image)

print(f'I don\'t have a simple NumPy array - instead I have this:\n  {image}')
print(f'\nBut I can convert it to an NumPy array if I need to:\n{im}')

print(f'Print the mean for comparison: {im.mean()}')

plt.imshow(image)
plt.axis(False)
plt.title('Read with Pillow')
plt.show()
I don't have a simple NumPy array - instead I have this:
  <PIL.TiffImagePlugin.TiffImageFile image mode=F size=250x240 at 0x7FF4F817CE20>

But I can convert it to an NumPy array if I need to:
[[2. 2. 2. ... 2. 2. 2.]
 [2. 2. 2. ... 2. 2. 2.]
 [2. 2. 2. ... 2. 2. 2.]
 ...
 [2. 2. 2. ... 2. 2. 2.]
 [2. 2. 2. ... 2. 2. 2.]
 [2. 2. 2. ... 2. 2. 2.]]
Print the mean for comparison: 23.03144645690918
../../../_images/827851648cf33b03b2cd8b8c6b8b374b4521de5dfeaec08c8a253894a51a2e2c.png

ImagenIO#

imageio es mi paquete Python preferido para la lectura de imágenes más sencilla, y el principal que he usado en este libro.

También es la [alternativa recomendada a la función imread obsoleta de SciPy](https://docs.scipy.org/doc/scipy-1.1.0/reference/generated/scipy.misc.imread.html#scipy .misc.imread).

imageio.imread(path) devuelve una matriz NumPy automáticamente. Esto facilita su uso para cosas sencillas, especialmente cuando se trabaja con imágenes 2D (de un solo canal o RGB).

imageio puede usar diferentes backends, que incluyen Pillow and tifffile , por lo que potencialmente puedes obtener las ventajas de ambos mediante el uso de imageio, mientras escribes menos código tu mismo.

from imageio.v3 import imread

# Just one line!
im = imread(path)

print(f'Print the mean for comparison: {im.mean()}')
Print the mean for comparison: 23.03144645690918

tifffile (archivo tiff)#

tifffile es un pequeño paquete[^fn_tf] que es muy útil si necesitas entrar en detalles sobre la lectura y escritura de imágenes TIFF.

import tifffile

im = tifffile.imread(path)

print(f'Print the mean for comparison: {im.mean()}')
Print the mean for comparison: 23.03144645690918

AICSImageIO#

AICSImageIO es un paquete excelente para leer muchos formatos de imágenes en Python, y es particularmente sólido cuando se trata de leer imágenes y metadatos multidimensionales.

Incluso puedes manejar una variedad de formatos de microscopía y, opcionalmente, utilizar Bio-Formats.

Estas características, junto con su forma consistente de manejar los tamaños y dimensiones de los píxeles, lo convierten en mi principal opción para imágenes científicas.

OpenSlide#

OpenSlide se utiliza ampliamente en el mundo de la patología digital. Está limitado a datos RGB 2D, pero su gran ventaja es que admite una variedad de imágenes de diapositivas completas piramidales.

Dask#

Dask es un proyecto que debes conocer si estás trabajando con grandes conjuntos de datos en Python.

Dask no es un paquete de lectura de imágenes, pero dask-image incluye una función imread que puede usarse si sabes que quieres que tu imagen esté en una matriz dask al final.

Napari#

Finalmente, Napari tampoco es una biblioteca de lectura de imágenes; más bien, es un fantástico visor de imágenes multidimensional, extensible y de código abierto para Python.

Napari puede unir todo: trabajar con matrices de datos y leer imágenes con complementos, como napari-aicsimageio y napari-lazy-openslide.