Terminología#
Este cuaderno sirve para mostrar imágenes e imágenes segmentadas de diferentes tipos para explicar la terminología común.
from skimage.io import imread, imshow
import napari_segment_blobs_and_things_with_membranes as nsbatwm
import stackview
import numpy as np
Imágenes de intensidad#
Comenzamos con imágenes de intensidad, ya que son comúnmente producidas por microscopios.
input_image = imread("../../data/BBBC022/IXMtest_A02_s9.tif")[:,:,0]
cropped_image = input_image[0:200, 200:400]
imshow(cropped_image, cmap='Greys_r')
C:\Users\haase\mambaforge\envs\bio39\lib\site-packages\skimage\io\_plugins\matplotlib_plugin.py:150: UserWarning: Low image data range; displaying image with stretched contrast.
lo, hi, cmap = _get_display_range(image)
<matplotlib.image.AxesImage at 0x2ba68647e20>
Imágenes binarias#
Los algoritmos básicos de segmentación conducen a imágenes binarias. Se caracterizan por tener solo dos intensidades diferentes, como 0 y 1.
binary_image = nsbatwm.threshold_otsu(cropped_image)
binary_image
|
|
nsbatwm made image
|
Segmentación de instancias#
Si cada objeto individual tiene su propia intensidad/color, lo llamamos imagen de etiquetas de segmentación de instancias. Las instancias se etiquetan con números enteros. La intensidad máxima (etiqueta) en esta imagen típicamente corresponde al número de objetos.
instance_segmentation = nsbatwm.voronoi_otsu_labeling(cropped_image,
spot_sigma=5,
outline_sigma=1)
instance_segmentation
|
|
nsbatwm made image
|
Cuando ejecutes este cuaderno localmente, puedes pasar el mouse sobre la imagen e inspeccionar las intensidades de los píxeles.
import stackview
stackview.picker(instance_segmentation)
Segmentación semántica#
Las imágenes de etiquetas de segmentación semántica pueden tener más de dos etiquetas y típicamente etiquetan regiones donde los píxeles tienen el mismo significado, por ejemplo: núcleos, envoltura nuclear y fondo.
semantic_segmentation = binary_image + nsbatwm.maximum_filter(binary_image).astype(np.uint32) + 1
semantic_segmentation
|
|
nsbatwm made made image
|
Anotaciones dispersas#
Las imágenes de etiquetas anotadas son típicamente dibujadas por humanos. Al ejecutar este cuaderno localmente, puedes dibujar algunas anotaciones. Si anotas un par de núcleos con precisión, creas una anotación dispersa de núcleos. Mantén presionada la tecla ALT para borrar una anotación.
sparse_label_annotation = np.zeros_like(cropped_image, dtype=np.uint32)
stackview.annotate(cropped_image, sparse_label_annotation)
stackview.insight(sparse_label_annotation)
|
|
|
También puedes crear una anotación semántica dispersa, por ejemplo, anotando algunos píxeles dentro de los núcleos y algunos píxeles dentro del fondo.
sparse_semantic_annotation = np.zeros_like(cropped_image, dtype=np.uint32)
stackview.annotate(cropped_image, sparse_semantic_annotation)
stackview.insight(sparse_semantic_annotation)
|
|
|