Auswahl von Beschriftungen basierend auf ihrer Größe#

Nachdem ein Bild segmentiert und Objekte beschriftet wurden, möchten wir möglicherweise Objekte entfernen, die entweder zu klein oder zu groß sind, um als Objekte, zum Beispiel Zellkerne, betrachtet zu werden.

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)>

Wir beginnen mit einer beschrifteten Version des Blobs-Bildes.

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

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

Nehmen wir an, wir sind nicht an sehr kleinen Objekten interessiert, da sie möglicherweise das Ergebnis einer falschen Segmentierung von Rauschen sind. Wir wissen, dass die von uns abgebildeten Objekte eine bestimmte Mindestgröße haben. Ausgehend von dieser physikalischen Annahme müssen wir eine Anzahl von Pixeln (in 2D) oder Voxeln (in 3D) schätzen, die die Objekte groß sind. Wir können dann diese Zahl als size_threshold in Pixeln oder Voxeln verwenden.

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

Wir können eine ähnliche Funktion verwenden, um die Objekte, die oben entfernt wurden, in einem separaten Beschriftungsbild zu visualisieren.

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