Étiquetage des composants connectés sur les surfaces#

Ce notebook démontre comment différencier les objets selon leur connectivité.

import napari_process_points_and_surfaces as nppas
import pyclesperanto_prototype as cle
import napari_simpleitk_image_processing as nsitk
from skimage.data import cells3d
import stackview

Nous utilisons une image 3D de noyaux…

image = cells3d()[:,1]
stackview.insight(image)
shape(60, 256, 256)
dtypeuint16
size7.5 MB
min0
max65535

… et segmentons les noyaux, ce qui donne une image binaire 3D.

labels = cle.voronoi_otsu_labeling(image, spot_sigma=9)
binary = cle.erode_labels(labels) > 0

stackview.insight(binary)
shape(60, 256, 256)
dtypeuint8
size3.8 MB
min0
max1

Nous convertissons cette image binaire en un ensemble de données de surface.

surface = nppas.all_labels_to_surface(binary)
surface
nppas.SurfaceTuple
origin (z/y/x)[0. 0. 0.]
center of mass(z/y/x)34.703,124.973,131.513
scale(z/y/x)1.000,1.000,1.000
bounds (z/y/x)16.500...59.000
0.000...255.000
0.000...255.000
average size97.003
number of vertices151354
number of faces301006

En appliquant l’étiquetage des composants connectés à la surface, nous pouvons identifier les sommets/faces qui sont connectés et différencier ceux qui ne le sont pas. Le résultat est également un ensemble de données de surface où les valeurs des sommets correspondent à la nème étiquette à laquelle ces objets appartiennent. Ainsi, vous pouvez conclure du nombre maximum de cette surface qu’il y a 38 noyaux dans cette image.

surface_connected_components = nppas.connected_component_labeling(surface)
surface_connected_components.cmap = 'hsv'
surface_connected_components
nppas.SurfaceTuple
origin (z/y/x)[0. 0. 0.]
center of mass(z/y/x)34.703,124.973,131.513
scale(z/y/x)1.000,1.000,1.000
bounds (z/y/x)16.500...59.000
0.000...255.000
0.000...255.000
average size97.003
number of vertices151354
number of faces301006
min0
max38