Verbundene Komponenten-Kennzeichnung auf Oberflächen#

Dieses Notebook demonstriert, wie man Objekte anhand ihrer Konnektivität unterscheidet.

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

Wir verwenden ein 3D-Bild von Zellkernen…

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

… und segmentieren die Zellkerne, was zu einem 3D-Binärbild führt.

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

Wir konvertieren dieses Binärbild in einen Oberflächendatensatz.

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

Durch Anwendung der Verbundene Komponenten-Kennzeichnung auf die Oberfläche können wir Scheitelpunkte/Flächen identifizieren, die verbunden sind, und diejenigen unterscheiden, die es nicht sind. Das Ergebnis ist ebenfalls ein Oberflächendatensatz, bei dem die Scheitelpunktwerte dem n-ten Label entsprechen, zu dem diese Objekte gehören. Daraus können Sie schließen, dass es in diesem Bild 38 Zellkerne gibt, basierend auf der maximalen Anzahl dieser Oberfläche.

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