Sélectionner les étiquettes en fonction de leur taille#

Après qu’une image a été segmentée et que les objets sont étiquetés, nous pourrions vouloir supprimer les objets qui sont soit trop petits soit trop grands pour être considérés comme des objets, des noyaux par exemple.

import pyclesperanto_prototype as cle

from skimage.io import imread
import matplotlib
import numpy as np
import stackview

# initialize GPU
cle.select_device("GTX")
c:\structure\code\pyclesperanto_prototype\pyclesperanto_prototype\_tier0\_device.py:77: UserWarning: No OpenCL device found with GTX in their name. Using gfx1035 instead.
  warnings.warn(f"No OpenCL device found with {name} in their name. Using {device.name} instead.")
<gfx1035 on Platform: AMD Accelerated Parallel Processing (2 refs)>

Nous commençons avec une version étiquetée de l’image des taches.

# load data
label_image = imread('../../data/blobs_labeled.tif')

stackview.insight(label_image)
shape(254, 256)
dtypeuint32
size254.0 kB
min0
max63

Supposons que nous ne soyons pas intéressés par les très petits objets car ils pourraient être le résultat d’une fausse segmentation de bruit. Nous savons que les objets que nous avons imagés ont une certaine taille minimale. À partir de cette estimation physique, nous devons estimer un nombre de pixels (en 2D) ou de voxels (en 3D) que les objets sont grands. Nous pouvons ensuite utiliser ce nombre comme size_threshold en pixels ou voxels.

size_threshold = 200 # pixels

large_labels_only = cle.exclude_small_labels(label_image, maximum_size=size_threshold)

large_labels_only
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max52.0

Nous pouvons utiliser une fonction similaire pour visualiser les objets qui ont été supprimés ci-dessus dans une image d’étiquettes séparée.

small_labels_only = cle.exclude_large_labels(label_image, minimum_size=size_threshold)

small_labels_only
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max11.0