Fusion des étiquettes annotées#

Dans ce notebook, nous démontrons comment une image d’étiquettes peut être post-traitée en annotant les étiquettes qui doivent être fusionnées.

import apoc
from skimage.io import imread, imshow, imsave
import pyclesperanto_prototype as cle
import numpy as np

Notre point de départ est une image d’étiquettes (synthétique) sur-segmentée.

oversegmented = cle.asarray(imread('../../data/syntetic_cells.tif')).astype(np.uint32)
oversegmented
cle._ image
shape(512, 512)
dtypeuint32
size1024.0 kB
min0.0
max49.0

De plus, nous avons besoin d’une annotation où l’intensité des pixels = 1 implique que les étiquettes doivent être fusionnées.

annotation = cle.asarray(imread('../../data/syntetic_cells_merge_annotation.tif')).astype(np.uint32)

# binarize the image
annotation = annotation == 1

annotation
cle._ image
shape(512, 512)
dtypeuint8
size256.0 kB
min0.0
max1.0

À des fins de visualisation, nous superposons les deux.

cle.imshow(oversegmented, labels=True, continue_drawing=True)
cle.imshow(annotation, alpha=0.5)
../_images/2f1880ffefc1b3184e3c73ac9a2031afdeb0d774ebde96a8cd77f3e78e8c3b1d.png

Nous pouvons maintenant fusionner toutes les cellules dont les bordures sont annotées.

result = cle.merge_annotated_touching_labels(oversegmented, annotation)
result
cle._ image
shape(512, 512)
dtypeuint32
size1024.0 kB
min0.0
max18.0

Comment cela fonctionne-t-il ?#

En coulisses, il y a une fonction pour générer une matrice de contact à partir de l’image d’étiquettes et de l’annotation, et une fonction pour fusionner les étiquettes selon une matrice de contact.

should_touch_matrix = cle.generate_should_touch_matrix(oversegmented, annotation)
should_touch_matrix
cle._ image
shape(50, 50)
dtypefloat32
size9.8 kB
min0.0
max1.0
result = cle.merge_labels_according_to_touch_matrix(oversegmented, should_touch_matrix)
result
cle._ image
shape(512, 512)
dtypeuint32
size1024.0 kB
min0.0
max18.0