Zusammenführen von Etiketten#

Grundsätzlich sind alle Segmentierungsalgorithmen begrenzt. Falls die Ergebnisse suboptimal sind und kein besserer Segmentierungsalgorithmus verfügbar ist, kann die Nachbearbeitung von Etiketten eine Option sein. Es stehen einige Funktionen zur Verfügung, um Etiketten entsprechend ihrer Eigenschaften zusammenzuführen, wie zum Beispiel die Intensität entlang der Kante, an der sich Etiketten berühren, oder die Pixelzahl paarweise kombinierter Etiketten.

import pyclesperanto_prototype as cle
from napari_segment_blobs_and_things_with_membranes import local_minima_seeded_watershed
import numpy as np
cle.select_device("TX")
<NVIDIA GeForce RTX 3050 Ti Laptop GPU on Platform: NVIDIA CUDA (1 refs)>

Zusammenführen von sich berührenden Etiketten#

Der einfachste Anwendungsfall könnte das Zusammenführen von markierten Objekten sein, die sich berühren.

blobs = cle.imread("../../data/blobs.tif")
blobs_labels = cle.voronoi_otsu_labeling(blobs, spot_sigma=3)
blobs_labels
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max72.0
cle.merge_touching_labels(blobs_labels)
cle._ image
shape(254, 256)
dtypeuint32
size254.0 kB
min0.0
max61.0

Zusammenführen von Etiketten entsprechend der Randintensität#

Als Beispiel verwenden wir einen zugeschnittenen Ausschnitt des cells3d Beispieldatensatzes in scikit-image.

image = cle.imread("../../data/membranes_2d.tif")[30:130, 0:100]
image
cle._ image
shape(100, 100)
dtypefloat32
size39.1 kB
min1062.0
max20614.0

Im folgenden Beispiel wurde unsere Zelle in der Bildmitte fälschlicherweise als zwei Zellen segmentiert:

labels = local_minima_seeded_watershed(image, spot_sigma=5, outline_sigma=0)
labels
nsbatwm made image
shape(100, 100)
dtypeint32
size39.1 kB
min1
max12

Dies kann korrigiert werden, indem Zellen mit einer Randintensität unterhalb eines bestimmten Schwellenwerts zusammengeführt werden.

merged_labels = cle.merge_labels_with_border_intensity_within_range(image, labels, maximum_intensity=5000)
merged_labels
c:\structure\code\pyclesperanto_prototype\pyclesperanto_prototype\_tier3\_generate_touch_mean_intensity_matrix.py:30: UserWarning: generate_touch_mean_intensity_matrix is supposed to work with images of integer type only.
Loss of information is possible when passing non-integer images.
  warnings.warn("generate_touch_mean_intensity_matrix is supposed to work with images of integer type only.\n" +
cle._ image
shape(100, 100)
dtypeuint32
size39.1 kB
min1.0
max8.0