Prévention des fuites d’étiquettes#

Un problème courant lors de la segmentation des cellules dans des images avec coloration membranaire est la fuite des étiquettes. Lors de l’utilisation d’algorithmes tels que la ligne de partage des eaux avec germes, ces fuites peuvent être évitées en filtrant l’image, par exemple en utilisant un filtre de maximum local.

import napari_segment_blobs_and_things_with_membranes as nsbatwm
from skimage.data import cells3d
import stackview
import pyclesperanto_prototype as cle
import matplotlib.pyplot as plt

À des fins de démonstration, nous utilisons l’image d’exemple cells3d de scikit-image.

image = cells3d()[:,0]
image.shape
(60, 256, 256)

Nous regardons une tranche de celle-ci dans le plan Z-Y. Pour simplifier le code, nous omettons les étiquettes des axes du graphique après cette figure.

cle.imshow(image[:,:,128], max_display_intensity=20000, continue_drawing=True)
plt.xlabel("Y")
plt.ylabel("Z")
Text(0, 0.5, 'Z')
../_images/5fa45f5ed25d6df1d1d1e5eca0e881b1d47ca58bbe1cca0c5add0ba00cfe573f.png

Lorsque nous appliquons l’algorithme de ligne de partage des eaux avec germes à cet ensemble de données (en 3D), nous pouvons voir que certaines étiquettes fuient en Z. Elles fusionnent avec la région à l’extérieur de la couche tissulaire.

reference_labels = nsbatwm.local_minima_seeded_watershed(image, spot_sigma=9)

cle.imshow(reference_labels[:,:,128], labels=True)
../_images/f6048e2e232798c17a508da020dd352d4bc6c7b3785fb2a528f5f348534b9479.png

Le problème peut être réduit en appliquant un filtre maximum à l’image brute. Cela conduira à des membranes plus épaisses, et donc à une probabilité plus faible que l’algorithme de ligne de partage des eaux puisse fuir à travers les trous dans la membrane.

thicker_membranes = nsbatwm.maximum_filter(image, radius=2)

cle.imshow(thicker_membranes[:,:,128], max_display_intensity=20000)
../_images/350917ec65b360445b829ffa2025ab5b612030518b175a660309156e1218c0d6.png

L’image d’étiquettes résultante a moins d’étiquettes fuyantes, mais a également perdu en précision des bordures d’étiquettes dans toutes les directions.

labels1 = nsbatwm.local_minima_seeded_watershed(thicker_membranes, spot_sigma=9)

cle.imshow(labels1[:,:,128], labels=True)
../_images/37f206a6b54e091a596eec8ea4dfe63181e0ae2526100a4a2271d53b901bde9b.png

Les fuites semblent souvent se produire uniquement dans la direction Z, ce qui est un effet de la fonction d’étalement du point des techniques de microscopie courantes. Elle est généralement anisotrope et donc, le microscope ne peut pas capturer les membranes en Z aussi bien qu’en X et Y.

Pour traiter ce problème de fuite d’étiquettes uniquement en X et Y et préserver une partie de la précision en Z, nous devons appliquer un filtre maximum où nous pouvons spécifier différents rayons en X, Y et Z.

thinker_membranes_in_x_y = cle.maximum_sphere(image, radius_x=2, radius_y=2, radius_z=0)

cle.imshow(thinker_membranes_in_x_y[:,:,128], max_display_intensity=20000)
../_images/fbb9a54a49579cffa51f659276b4c70ee612eaac0b78c38ae138127c87e25226.png
labels2 = nsbatwm.local_minima_seeded_watershed(thinker_membranes_in_x_y, spot_sigma=9)

cle.imshow(labels2[:,:,128], labels=True)
../_images/18b2d6c94b8606c09c4827620fb1eb9d050a74b02dc569d5475a4e844feeef5d.png

Exclusion des étiquettes sur les bords de l’image en Z#

Les images de couches tissulaires uniques sont généralement acquises de manière à ce que nous voyions quelques pixels et plus tard des étiquettes segmentées en dehors du haut et du bas du tissu (en Z). Nous pouvons supprimer ces étiquettes tout en gardant celles qui touchent le bord de l’image en X et Y explicitement.

corrected_labels = cle.exclude_labels_on_edges(labels2, 
                                               exclude_in_x=False, 
                                               exclude_in_y=False, 
                                               exclude_in_z=True)

cle.imshow(corrected_labels[:,:,128], labels=True)
../_images/49246fbac963a5fa880bde0c3bbc0426bf6b7e1673588e7c8adf41a3fc4d9951.png

De toute évidence, nous perdons encore une cellule qui fuyait dans la zone sous le tissu. Il pourrait être impossible d’obtenir un résultat parfait cependant.