Erodierte Otsu-Kennzeichnung#

Diese Operation segmentiert und kennzeichnet ein Bild unter Verwendung von Unschärfe, Otsu-Schwellenwertbildung, binärer Erosion und maskierter Voronoi-Kennzeichnung.

Nach der Unschärfe und Schwellenwertbildung mit Otsus Methode wird eine iterative binäre Erosion angewendet. Objekte im erodierten Bild werden mittels Zusammenhangskomponenten-Kennzeichnung markiert und diese Kennzeichnungen werden wieder auf die ursprüngliche Größe im Ausgangsbinärbild erweitert, indem eine maskierte Voronoi-Kennzeichnung verwendet wird.

Diese Funktion ähnelt voronoi_otsu_labeling. Sie soll besser mit Fällen umgehen können, in denen sich die Kennzeichnungen von Objekten überschneiden, wenn die Objekte dicht beieinander liegen. Wie bei der Voronoi-Otsu-Kennzeichnung können kleine Objekte bei der Anwendung dieser Operation verschwinden.

Diese Funktion ist inspiriert von einer ähnlichen Implementierung in Java von Jan Brocher (Biovoxxel) in der Biovoxxel Toolbox. Vielen Dank, Jan!

from skimage.data import cells3d
import pyclesperanto_prototype as cle
import napari_segment_blobs_and_things_with_membranes as nsbatwm
image = cells3d()
image.shape
(60, 2, 256, 256)

Wir schneiden einfach eine 2D-Scheibe heraus.

nuclei = cle.asarray(image[30, 1])
nuclei
cle._ image
shape(256, 256)
dtypefloat32
size256.0 kB
min1091.0
max58327.0
labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=11, outline_sigma=4)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max17.0

Parameter: number_of_erosions#

Wenn die angegebene Anzahl der Erosionen zu gering ist, werden zusammenhängende Objekte gemeinsam gekennzeichnet.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=5, outline_sigma=4)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max16.0

Wenn zu viele Erosionen konfiguriert sind, können Objekte verschwinden.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=20, outline_sigma=4)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max3.0

Parameter: outline_sigma#

Mit diesem Umriss können Sie die Rauschunterdrückung vor der Schwellenwertbildung steuern. Wenn dieser Wert zu niedrig ist, können Objekte verrauschte Kanten haben und Löcher führen zu mehr Objekttrennungen.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=5, outline_sigma=1)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max37.0

Wenn dieser Wert zu hoch ist, passen die Objektumrisse möglicherweise nicht mehr zu den ursprünglichen Objekten.

labels = cle.eroded_otsu_labeling(nuclei, number_of_erosions=11, outline_sigma=10)
labels
cle._ image
shape(256, 256)
dtypeuint32
size256.0 kB
min0.0
max11.0