Étiquetage Otsu érodé#

Cette opération segmente et étiquette une image en utilisant le floutage, le seuillage d’Otsu, l’érosion binaire et l’étiquetage de Voronoï masqué.

Après le floutage et le seuillage utilisant la méthode d’Otsu, une érosion binaire itérative est appliquée. Les objets dans l’image érodée sont étiquetés en utilisant l’étiquetage des composantes connexes et ces étiquettes sont dilatées pour s’adapter à nouveau à l’image binaire initiale en utilisant l’étiquetage de Voronoï masqué.

Cette fonction est similaire à voronoi_otsu_labeling. Elle est destinée à mieux gérer les cas où les étiquettes des objets s’échangent si les objets sont denses. Comme lors de l’utilisation de l’étiquetage Voronoï-Otsu, les petits objets peuvent disparaître lors de l’application de cette opération.

Cette fonction est inspirée d’une implémentation similaire en Java par Jan Brocher (Biovoxxel) dans la boîte à outils Biovoxxel. Un grand merci Jan !

from skimage.data import cells3d
import pyclesperanto_prototype as cle
import napari_segment_blobs_and_things_with_membranes as nsbatwm
image = cells3d()
image.shape
(60, 2, 256, 256)

Nous découpons simplement une tranche 2D.

nuclei = cle.asarray(image[30, 1])
nuclei
cle._ image
shape(256, 256)
dtypefloat32
size256.0 kB
min1091.0
max58327.0
labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=11, outline_sigma=4)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max17.0

Paramètre : number_of_erosions#

Si le nombre d’érosions spécifié est trop petit, les objets collants seront étiquetés ensemble.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=5, outline_sigma=4)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max16.0

Si trop d’érosions sont configurées, les objets peuvent disparaître.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=20, outline_sigma=4)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max3.0

Paramètre : outline_sigma#

Avec ce contour, vous pouvez contrôler le débruitage avant le seuillage. Si cette valeur est trop basse, les objets peuvent avoir des bords bruités et les trous peuvent conduire à plus de divisions d’objets.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=5, outline_sigma=1)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max37.0

Si cette valeur est trop élevée, les contours des objets peuvent ne plus correspondre aux objets originaux.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=11, outline_sigma=10)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max11.0