Bibliotecas esenciales de Python para procesamiento de imágenes y datos

Palabra clave yield

La palabra clave yield: se utiliza para definir funciones generadoras. Funciones generadoras: permiten generar valores progresivamente durante la iteración, en lugar de devolver todos los valores de una sola vez. La sentencia yield pausa la ejecución de la función y devuelve un valor al lamador. En la siguiente llamada al método next() del generador, la función continúa desde donde se pausó. Funciones generadoras: ahorran memoria, generan valores bajo demanda en lugar de cargar todos los valores en memoria simultáneamente.

Biblioteca openslide

Instalación de openslide en Linux

Muchos entornos virtuales requieren la instalación adicional de la biblioteca openslide, por lo que se documenta el proceso:

cd /home/liusn/00apps
conda activate nombre_entorno

# openslide_bin 4.0.0.5 requiere python>=3.8
pip install openslide_bin-4.0.0.5-py3-none-manylinux_2_27_x86_64.whl
pip install openslide-python==1.3.1


Uso de openslide

  1. La biblioteca openslide es una librería Python para leer y manipular imágenes de microscopio, soporta formatos como .svs, .vms y .tiff.
  2. Soporta formato de pirámide de imágenes: acceder a datos de imagen en diferentes resoluciones.
  3. Puede extraer regiones específicas de la imagen original sin cargar toda la imagen.
  4. Puede acceder a metadatos de la imagen, como nivel de zoom, dimensiones, etc.
import openslide  
# Abrir imagen de microscopio 
diapositiva = openslide.OpenSlide(ruta_wsi)  

# Obtener dimensiones de un nivel específico de pirámide
# level comienza en 0, donde 0 representa la máxima resolución
# ancho, alto representan las dimensiones de ese nivel
ancho, alto = diapositiva.level_dimensions[nivel]  

# Obtener factor de submuestreo del nivel
# Factor de submuestreo: relación entre el tamaño de píxel del nivel específico
# y el tamaño de píxel de máxima resolución
# Si el factor es (2,2), el ancho y alto se reducen a la mitad
factor = diapositiva.level_downsamples[nivel]  
# Leer región específica de la imagen de microscopio
# location: tupla con coordenadas de esquina superior izquierda; nivel: nivel de pirámide
# tamaño: (ancho, alto), tamaño de la región a leer; devuelve un objeto PIL
imagen = diapositiva.read_region(ubicacion, nivel, tamano)


Atributos comunes del objeto openslide

  • self.level_downsamples[nivel]: obtiene el factor de submuestreo del nivel relativo a la máxima resolución.
  • self.level_dimension[nivel]: dimensiones de imagen del nivel.

Biblioteca cv2

import cv2  

# Dibujar polígonos en una imagen
# img: imagen donde dibujar; pts: ndarray con vértices del polígono
# color: color de relleno, (255) representa blanco
cv2.fillPoly(imagen, pts, color)  

# Dibujar texto en una imagen
# img: imagen donde dibujar; texto: cadena de texto a dibujar
cv2.putText(imagen, texto)


Biblioteca numpy

import numpy as np  
# Encontrar índices de elementos que satisfacen una condición
# condition: arreglo booleano, devuelve todas las filas y columnas con valor True
X_idx, Y_idx = np.where(condición)  

# Selección y reemplazo de elementos basado en condición
# Cuando condición es True, devuelve valor1, si no valor2
mapa_inst = np.where(condición, valor1, valor2)  
# Apilar arreglos en dirección de filas
# tup: lista o tupla, devuelve un nuevo arreglo (total_filas, columnas)
# total_filas = suma de filas de todos los arreglos de entrada
np.vstack(tup)  
seleccionado_x[..., 0:1] # ... representa todas las dimensiones anteriores


Biblioteca ASAP-multiresolutionimageinterface

Procesa estructuras de datos de tipo pirámide. Biblioteca Python para imágenes de múltiples resoluciones, adecuada para análisis de imágenes médicas y de microscopio. Soporta acceso y manipulación en diferentes resoluciones.

Instalación de ASAP

Instalación de ASAP en Linux (ubuntu18.04-A6000): https://www.freesion.com/article/4489476959/Pasos para instalar ASAP en Linux (ubuntu22.04-4x3090):

  • Descargar la última versión del sitio web de ASAP: ASAP 2.2, compatible con ubuntu2204.
  • Instalar dependencias de ASAP: usar comando sudo apt-get install. apt-get install es una herramienta de gestión de paquetes para línea de comandos.
  • Instalar manualmente el paquete ASAP: dpkg -i ASAP-2.2-Ubuntu2204.deb, instala archivos deb locales.
  • Ver ubicación de ASAP: dpkg -L asap.
  • Agregar ASAP al PYTHONPATH, luego se puede importar.
PYTHONPATH="/opt/ASAP/bin":"${PYTHONPATH}" 
export PYTHONPATH


Uso de ASAP

ASAP está escrito en C++, por lo que no se puede leer el código fuente. La documentación mínima de Python está en: https://academic.oup.com/gigascience/article/7/6/giy065/5026175

Sitio web de ASAP: https://github.com/computationalpathologygroup/ASAP/releases

Acceder a datos tif mediante Python:

Convertir comentarios XML a imágenes tif, asumiendo que las coordenadas del polígono en los comentarios están basadas en el nivel de máxima resolución.

Código de ejemplo:

import multiresolutionimageinterface as mir  

# Crear interfaz de imagen
lector = mir.MultiResolutionImageReader()  

# Abrir y cargar archivo de imagen de múltiples resoluciones
imagen_mr = lector.open(ruta) 

# Obtener dimensiones del nivel 6 nivel=2
ancho, alto = imagen_mr.getLevelDimensions(nivel)
ds = imagen_mr.getLevelDownsample(nivel) 

# Obtener un patch del nivel 6, esquina superior izquierda en (0,0), tile es un objeto numpy
tile = imagen.getUCharPatch(0, 0, ancho, alto, 6) 

# Leer un bloque de imagen de 300 pixeles de ancho y 200 de alto, desde coordenadas XY (568, 732) en nivel=2
# ds es el factor de submuestreo, coordenadas en nivel=2 multiplicadas por ds dan coordenadas en nivel=0
tile = imagen.getUCharPatch(int(568 * ds), int(732 * ds), 300, 200, nivel)  
# Almacenar y gestionar datos de anotación relacionados con imágenes de múltiples resoluciones
lista_anotaciones = mir.AnnotationList() 
# Convertir datos de anotación para almacenar en formato xml
repositorio_xml = mir.XmlRepository(lista_anotaciones) 
# Establecer o actualizar ruta de origen del archivo xml repositorio_xml.setSource(ruta) 
# Cargar datos desde archivo xml repositorio_xml.load() 
# Convertir datos de anotación a máscara binaria
máscara_anotacion = mir.AnnotationToMask() 
# Convertir la lista de anotaciones proporcionada a máscara binaria
máscara_anotacion.convert(lista_anotaciones, ruta_salida, dimensiones_imagen, espaciado_imagen)


concurrent.futures.ThreadPoolExecutor

Administra un pool de hilos y ejecuta tareas multitarea de manera eficiente, puede acelerar el procesamiento de tareas intensivas en E/S. Ejecuta operaciones concurrentes mediante envío de tareas.

from concurrent.futures import ThreadPoolExecutor  

# Crear objeto, max_workers especifica el número máximo de hilos
# si no se especifica, Python ajusta según los hilos del sistema
ejecutor = ThreadPoolExecutor(max_workers=3)  

# Usar map() para enviar múltiples tareas
ejecutor.map(tarea, range(5))  

# Cerrar el pool de hilos
ejecutor.shutdown(wait=True)


Biblioetca xml.etree.ElementTree

Analiza y crea documentos xml, utilizado para leer, modificar y generar xml.

import xml.etree.ElementTree as ET  

# Leer datos xml de un archivo específico y analizar como estructura de árbol
árbol = ET.parse(ruta_anotación)  

# Obtener elemento raíz: elemento más externo del documento xml
raíz = árbol.getroot()


Biblioteca skimage

import skimage  

# Generar coordenadas de píxeles de un polígono
# x: arreglo unidimensional, coordenadas de columna del polígono; y: arreglo unidimensional, coordenadas de fila
# shape: especifica la forma de la imagen para las coordenadas de salida
# filas, columnas: coordenadas de fila y columna de píxeles internos del polígono
# interno del polígono significa que todos los polígonos están llenos
filas, columnas = skimage.draw.polygon(x, y, shape)


Biblioteca PIL.Image PIL.Image.Image

from PIL import Image  

imagen = Image.open(ruta)  
# Ver el modo de imagen y número de canales
print(f"Modo de imagen: {imagen.mode}") 
print(f"Número de canales: {len(imagen.getbands())}")  
# Convertir modo máscara = máscara.convert("P")


Biblioteca detectron2

Cargador de datos dataloader

detectron2 proporciona 2 funciones build_detection_train_loader y build_detection_test_loader, que pueden crear un dataloader predeterminado según el archivo de configuración dado.

Aumento de datos

  1. Permite aumentar múltiples tipos de datos simultáneamente, como imágenes, cajas delimitadoras, máscaras.
  2. Permite aplicar una serie de aumentos declarados estáticamente.
  3. Permite agregar nuevos tipos de datos personalizados para aumentar, como cajas delimitadoras rotadas, clips de video.
  4. Manipula y opera las aplicaciones de aumento.

Cómo usar aumentos al escribir un nuevo datataloader, cómo escribir nuevos aumentos. Si se usa el dataloader predeterminado, acepta la lista de aumentos personalizados proporcionada por el usuario.

Clase MaskFormerSemanticDatasetMapper:

  1. Lee la imagen desde file_name
  2. Aplica transformaciones geométricas a imagen y anotación
  3. Busca el recorte apropiado y lo aplica a imagen y anotación
  4. Convierte imagen y anotación a Tensores

Atributos comunes de la clase MetadataCatalog

  1. stuff_classes: lista de nombres de cada categoría stuff, usado para segmentación semántica y segmentación panorámica.
  2. stuff_colors: colores predefinidos (0-255) para cada categoría stuff, para visualización. Si no se especifica, usa colores aleatorios. lista[tupla(r, g, b)].
  3. ignore_label: int, píxeles con esta etiqueta de categoría en gt serán ignorados en evaluación, usado para tareas de segmentación semántica y panorámica.

Biblioteca faiss-agrupamiento

Uso de la biblioteca Faiss:

  1. Los índices faiss incluyen: IndexFlatL2 (conjuntos de datos pequeños), IndexIVFFlat (conjuntos de datos grandes), IndexHNSW (datos de alta dimensión).
  2. Consultar similitud D, I = index.search(features, k). Para cada muestra, consulta similitud con otras muestras, D es la matriz de distancias, I es la matriz de índices, devuelve los k vecinos más cercanos de cada muestra.

Etiquetas: Python openslide opencv NumPy asap

Publicado el 5-31 20:23