(image_file_formats:aicsimagio=)
Lectura de archivos con AICSImageIO#
La biblioteca AICSImageIO tiene como objetivo simplificar la lectura de datos de imágenes de microscopía.
Para instalar la biblioteca, necesitas ejecutar este comando.
pip install aicsimageio
En caso de que se deban leer formatos de archivo propietarios específicos, se debe instalar software adicional. Consulta la documentación para más detalles.
from aicsimageio import AICSImage
from skimage.io import imshow
Primero, creamos un objeto AICSImage para ver si entiende nuestro formato de archivo. En el siguiente ejemplo, leemos un archivo OME Tif que fue guardado previamente con ImageJ.
Como ejemplo, estamos usando aquí una imagen compartida por Célia Baroux et al(Universidad de Zurich) que fue guardada nuevamente con fines de demostración.
aics_image = AICSImage("../../data/EM_C_6_c0.ome.tif")
aics_image
Attempted file (C:/structure/code/BioImageAnalysisNotebooks/data/EM_C_6_c0.ome.tif) load with reader: aicsimageio.readers.bfio_reader.OmeTiledTiffReader failed with error: No module named 'bfio'
C:\Users\haase\mambaforge\envs\bio39\lib\site-packages\ome_types\_convenience.py:105: FutureWarning: The default XML parser will be changing from 'xmlschema' to 'lxml' in version 0.4.0. To silence this warning, please provide the `parser` argument, specifying either 'lxml' (to opt into the new behavior), or'xmlschema' (to retain the old behavior).
d = to_dict(os.fspath(xml), parser=parser, validate=validate)
<AICSImage [Reader: OmeTiffReader, Image-is-in-Memory: False]>
Este objeto ya puede darnos información básica como el tamaño/forma de la imagen, las dimensiones y los nombres y orden de las dimensiones.
aics_image.shape
(1, 1, 256, 256, 256)
aics_image.dims
<Dimensions [T: 1, C: 1, Z: 256, Y: 256, X: 256]>
aics_image.dims.order
'TCZYX'
A partir de este objeto, también podemos recuperar píxeles como matrices numpy.
np_image = aics_image.get_image_data("ZYX", T=0)
np_image.shape
(256, 256, 256)
imshow(np_image[128])
<matplotlib.image.AxesImage at 0x158c9b60ac0>
Lectura de metadatos#
Cuando se trabaja con datos de imágenes de microscopía, es importante tener en cuenta los metadatos, por ejemplo, el tamaño del vóxel. Para realizar mediciones de volumen en unidades físicas adecuadas, necesitamos saber cuán grande es un vóxel en X, Y y Z.
aics_image.physical_pixel_sizes
PhysicalPixelSizes(Z=0.16784672897196262, Y=0.16776018346253663, X=0.16776018346253663)
Y se puede definir una función auxiliar para leer el tamaño del vóxel en formato Z/Y/X.
def get_voxel_size_from_aics_image(aics_image):
return (aics_image.physical_pixel_sizes.Z,
aics_image.physical_pixel_sizes.Y,
aics_image.physical_pixel_sizes.X)
get_voxel_size_from_aics_image(aics_image)
(0.16784672897196262, 0.16776018346253663, 0.16776018346253663)
Lectura de archivos CZI#
En caso de que además esté instalada la biblioteca aicspylibczi, también se pueden abrir archivos CZI usando AICSImageIO.
czi_image = AICSImage("../../data/PupalWing.czi")
czi_image.shape
(1, 1, 80, 520, 692)
np_czi_image = czi_image.get_image_data("ZYX", T=0)
np_czi_image.shape
(80, 520, 692)
get_voxel_size_from_aics_image(czi_image)
(1.0, 0.20476190476190476, 0.20476190476190476)
Lectura de archivos LIF#
En caso de que además esté instalada la biblioteca readlif, también se pueden leer imágenes LIF usando AICSImageIO.
lif_image = AICSImage("../../data/y293-Gal4_vmat-GFP-f01.lif")
lif_image.shape
(1, 2, 86, 500, 616)
np_lif_image = lif_image.get_image_data("ZYX", T=0)
np_lif_image.shape
(86, 500, 616)
get_voxel_size_from_aics_image(lif_image)
(1.0070810588235295, 0.46827875751503006, 0.46827869918699183)