Fusión de etiquetas según las distancias de borde a borde#

En este notebook fusionaremos etiquetas en una imagen etiquetada de acuerdo con sus distancias de borde a borde entre sí. Las etiquetas cercanas se fusionarán.

Ver también

import pyclesperanto_prototype as cle
from skimage.io import imread
import numpy as np

Para fines de demostración, usamos una versión modificada de las etiquetas derivadas de la imagen de ejemplo de manchas. Introducimos artificialmente espacios entre ellas.

image = imread("../../data/blobs.tif")
image[:, 80:150] = 0
image[80:130, 100:] = 0

image = cle.asarray(image)
labels = cle.voronoi_otsu_labeling(image, spot_sigma=4, outline_sigma=3)
labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max47.0

Primero, dilatamos las etiquetas por la mitad de la distancia máxima que se permite que tengan los bordes.

maximum_distance = 12

dilated_labels = cle.dilate_labels(labels, radius=maximum_distance/2)
dilated_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max47.0

Luego fusionamos las etiquetas si se tocan.

merged_dilated_labels = cle.merge_touching_labels(dilated_labels)
merged_dilated_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max5.0

Después, enmascaramos las etiquetas fusionadas con la forma de la etiqueta original. También convertimos el resultado de esta operación a entero de 32 bits, para que la visualización como imagen de etiquetas funcione.

merged_labels = (merged_dilated_labels * (labels > 0)).astype(np.uint32)
merged_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max5.0