Étiquetage Gauss-Otsu#

Jusqu’à présent, nous avons traité des images en utilisant des filtres tels que le flou gaussien, des algorithmes de seuillage comme la méthode d’Otsu et nous avons étiqueté des objets en utilisant l’étiquetage des composantes connexes. La combinaison de ces trois algorithmes en particulier est si courante qu’il existe des fonctions pratiques pour exécuter ces trois opérations en une seule fois. Ce flux de travail pour la segmentation d’image est une approche très simple, par exemple pour détecter et segmenter les noyaux dans les images de microscopie à fluorescence. Cela fonctionnera si les objets ne sont pas trop denses.

from skimage.io import imread
import matplotlib.pyplot as plt
import pyclesperanto_prototype as cle

Pour démontrer le flux de travail, nous utilisons des données d’image du Broad Bio Image Challenge : Nous avons utilisé l’ensemble d’images BBBC022v1 Gustafsdottir et al., PLOS ONE, 2013, disponible dans la Collection de référence de bio-images du Broad Institute Ljosa et al., Nature Methods, 2012.

Nous chargeons l’image et, à des fins de visualisation, nous découpons une sous-région :

input_image = imread("../../data/BBBC022/IXMtest_A02_s9.tif")[:,:,0]

input_crop = input_image[0:200, 200:400]

fig, axs = plt.subplots(1, 2, figsize=(15, 15))
cle.imshow(input_image, plot=axs[0])
cle.imshow(input_crop, plot=axs[1])
../_images/bf69dc66f331ad66f2ca4567db95415d6269d30eb08c53f71c25e93ad9d38fa7.png

Application de l’algorithme#

L’étiquetage Gauss-Otsu est une commande dans pyclesperanto et le plugin scriptable napari napari-segment-blobs-and-things-with-membranes. L’opération a un paramètre outline_sigma pour contrôler la précision avec laquelle les objets segmentés sont délimités.

sigma_outline = 1

segmented = cle.gauss_otsu_labeling(input_image, outline_sigma=sigma_outline)
segmented_crop = segmented[0:200, 200:400]

fig, axs = plt.subplots(1, 2, figsize=(15, 15))
cle.imshow(segmented, labels=True, plot=axs[0])
cle.imshow(segmented_crop, labels=True, plot=axs[1])
../_images/c1f27c8e04384d1bf104941eae7d93ce954c476bc2d57fb97dae616877f57ad1.png
sigma_outline = 7

segmented = cle.gauss_otsu_labeling(input_image, outline_sigma=sigma_outline)
segmented_crop = segmented[0:200, 200:400]

fig, axs = plt.subplots(1, 2, figsize=(15, 15))
cle.imshow(segmented, labels=True, plot=axs[0])
cle.imshow(segmented_crop, labels=True, plot=axs[1])
../_images/1d60d721944f56daebfcd0a2b00e77225dc9272a8732e64debc948bba48dfb7f.png

Comme vous pouvez le voir, si les objets sont trop proches, ils seront segmentés ensemble. Dans ces cas, il est recommandé d’essayer l’Étiquetage Voronoi-Otsu.