Lissage des étiquettes#

Dans ce notebook, nous allons démontrer comment affiner les contours des étiquettes en les lissant. L’opération est liée à l’érosion et à la dilatation des étiquettes. Cependant, ce n’est pas exactement ce que fait l’ouverture. Elle diffère en ne laissant pas de trous derrière mais en les remplissant avec les étiquettes les plus proches.

import numpy as np
import pyclesperanto_prototype as cle
import matplotlib.pyplot as plt

Un cas d’utilisation potentiel est l’affinage des résultats de segmentation cellulaire. Ainsi, nous examinons une segmentation de cellules basée sur les membranes.

membranes = cle.imread("../../data/membranes.tif")
membranes
cle._ image
shape(256, 256)
dtypefloat32
size256.0 kB
min277.0
max44092.0
labels = cle.imread("../../data/membranes_labeled.tif").astype(np.uint32)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min1.0
max28.0

La fonction smooth_labels permet de redresser les contours des étiquettes.

cle.smooth_labels(labels, radius=5)
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min1.0
max27.0

Le bloc de code suivant est une version modifiée du code qui a été utilisé pour générer la vidéo dans ce tweet où nous avons discuté du nom du filtre.

# for r in range(20):
for r in range(0, 20, 5):
    print("radius =", r)
    
    fig, ax = plt.subplots(1,3, figsize=(10,10))
    
    cle.imshow(labels, labels=True, plot=ax[0])
    cle.imshow(cle.opening_labels(labels, radius=r), labels=True, plot=ax[1])
    cle.imshow(cle.smooth_labels(labels, radius=r), labels=True, plot=ax[2])
    
    ax[0].set_title("Original")
    ax[1].set_title("Opening r=" + str(r))
    ax[2].set_title("????ing r=" + str(r))
    # plt.savefig("temp/" + str(r).zfill(2) + ".tif", dpi=300)
    plt.show()
radius = 0
../_images/361a39674a56a5d051e590c8194da01d1a2f14bfdeef27ba9ba0d0d19222fd93.png
radius = 5
../_images/2a2c94ed07e8c47f9dc80a3816d6e911ec7690188780dba0f154324c1e4ee4c3.png
radius = 10
../_images/4ee5ec16565df52055bc5cd952ad14faa90268a66cfd969d9df7349b03e62233.png
radius = 15
../_images/eadac7f05657e79c72483f77d3cb8c69154fb6d66a632f0e94e015b7cf1abb1b.png