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>
../_images/7642ae17d367f89fcd614de0e62927e0d15176780e0bae08e20780f0a31028cc.png

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
shape(200, 200)
dtypeint32
size156.2 kB
min0
max1

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
shape(200, 200)
dtypeint32
size156.2 kB
min0
max12

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
shape(200, 200)
dtypeint64
size312.5 kB
min1
max3

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)
shape(200, 200)
dtypeuint32
size156.2 kB
min0
max4

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)
shape(200, 200)
dtypeuint32
size156.2 kB
min0
max3