Ajuste interactivo de parámetros con napari y magicgui#
Una tarea común al procesar imágenes es ajustar manualmente los parámetros hasta que un algoritmo de segmentación funcione bien en un conjunto de datos determinado. El visor napari y magicgui ofrecen la posibilidad de construir automáticamente una interfaz de usuario donde el usuario puede ajustar los parámetros y ver inmediatamente cómo se verá la segmentación correspondiente. Este cuaderno demuestra cómo se puede lograr esto a partir de una simple función de Python que realiza el procesamiento de imágenes.
# Inspired by
# https://github.com/pr4deepr/pyclesperanto_prototype/blob/master/napari_clij_widget.py
import napari
import pyclesperanto_prototype as cle
from magicgui import magicgui
from napari.types import ImageData, LabelsData
Nuestro punto de partida es una función que implementa un cierto flujo de trabajo de procesamiento de imágenes. En este ejemplo, difuminamos una imagen utilizando un filtro Gaussiano, la umbralizamos utilizando el método de Otsu y aplicamos un etiquetado de componentes conectados para diferenciar objetos y etiquetarlos.
@magicgui(auto_call=True)
def process_image(image_input: ImageData, sigma: float = 2) -> LabelsData:
if input is not None:
# process the image
blurred = cle.gaussian_blur(image_input, sigma_x=sigma, sigma_y=sigma)
binary = cle.threshold_otsu(blurred)
labels = cle.connected_components_labeling_box(binary)
return labels
También necesitamos una imagen de ejemplo para demostrar el procedimiento.
# load data
from skimage.io import imread
image = imread('https://samples.fiji.sc/blobs.png')
A continuación, iniciamos el visor napari, agregamos la imagen original y adjuntamos una interfaz de usuario generada automáticamente, un widget acoplable, que nos permite configurar los parámetros de la función proporcionada anteriormente. Además, tomamos una captura de pantalla del visor.
# start up napari
viewer = napari.Viewer()
viewer.add_image(image, name='blobs')
# generate a Graphical User Interface from the function above magically
viewer.window.add_dock_widget(process_image)
# take a screenshot
napari.utils.nbscreenshot(viewer)
Warning: Could not find scikit-tensor which is needed for separable approximations...
If you want to compute separable approximations, please install it with
pip install scikit-tensor-py3