Fusion d’étiquettes selon les distances de bord à bord#

Dans ce notebook, nous allons fusionner des étiquettes dans une image étiquetée en fonction de leurs distances de bord à bord les unes par rapport aux autres. Les étiquettes proches seront fusionnées.

Voir aussi

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

À des fins de démonstration, nous utilisons une version modifiée des étiquettes dérivées de l’image d’exemple de taches. Nous introduisons artificiellement des écarts entre elles.

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

Tout d’abord, nous dilatons les étiquettes de la moitié de la distance maximale que les bords sont autorisés à avoir.

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

Nous fusionnons ensuite les étiquettes si elles se touchent.

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

Ensuite, nous masquons les étiquettes fusionnées avec la forme des étiquettes originales. Nous convertissons également le résultat de cette opération en entier 32 bits, afin que la visualisation en tant qu’image étiquetée fonctionne.

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