Terminologie#

Dieses Notebook dient dazu, Bilder und segmentierte Bilder verschiedener Art zu zeigen, um gängige Terminologie zu erklären.

from skimage.io import imread, imshow
import napari_segment_blobs_and_things_with_membranes as nsbatwm
import stackview
import numpy as np

Intensitätsbilder#

Wir beginnen mit Intensitätsbildern, wie sie üblicherweise von Mikroskopen erzeugt werden.

input_image = imread("../../data/BBBC022/IXMtest_A02_s9.tif")[:,:,0]

cropped_image = input_image[0:200, 200:400]

imshow(cropped_image, cmap='Greys_r')
C:\Users\haase\mambaforge\envs\bio39\lib\site-packages\skimage\io\_plugins\matplotlib_plugin.py:150: UserWarning: Low image data range; displaying image with stretched contrast.
  lo, hi, cmap = _get_display_range(image)
<matplotlib.image.AxesImage at 0x2ba68647e20>
../_images/7642ae17d367f89fcd614de0e62927e0d15176780e0bae08e20780f0a31028cc.png

Binäre Bilder#

Grundlegende Segmentierungsalgorithmen führen zu binären Bildern. Sie zeichnen sich dadurch aus, dass sie nur zwei verschiedene Intensitäten wie 0 und 1 haben.

binary_image = nsbatwm.threshold_otsu(cropped_image)
binary_image
nsbatwm made image
shape(200, 200)
dtypeint32
size156.2 kB
min0
max1

Instanzsegmentierung#

Wenn jedes einzelne Objekt seine eigene Intensität / Farbe hat, nennen wir es ein Instanzsegmentierungs-Labelbild. Die Instanzen werden mit ganzen Zahlen markiert. Die maximale Intensität (Label) in diesem Bild entspricht typischerweise der Anzahl der Objekte.

instance_segmentation = nsbatwm.voronoi_otsu_labeling(cropped_image, 
                                        spot_sigma=5, 
                                        outline_sigma=1)

instance_segmentation
nsbatwm made image
shape(200, 200)
dtypeint32
size156.2 kB
min0
max12

Wenn Sie dieses Notebook lokal ausführen, können Sie mit der Maus über das Bild fahren und die Pixelintensitäten untersuchen.

import stackview
stackview.picker(instance_segmentation)

Semantische Segmentierung#

Semantische Segmentierungs-Labelbilder können mehr als zwei Labels haben und kennzeichnen typischerweise Regionen, in denen Pixel die gleiche Bedeutung haben, zum Beispiel: Zellkerne, Kernhülle und Hintergrund.

semantic_segmentation = binary_image + nsbatwm.maximum_filter(binary_image).astype(np.uint32) + 1
semantic_segmentation
nsbatwm made made image
shape(200, 200)
dtypeint64
size312.5 kB
min1
max3

Spärliche Annotationen#

Annotierte Labelbilder werden typischerweise von Menschen gezeichnet. Wenn Sie dieses Notebook lokal ausführen, können Sie einige Annotationen zeichnen. Wenn Sie ein paar Zellkerne präzise annotieren, erstellen Sie eine spärliche Zellkernannotation. Halten Sie die ALT-Taste gedrückt, um eine Annotation zu löschen.

sparse_label_annotation = np.zeros_like(cropped_image, dtype=np.uint32)
stackview.annotate(cropped_image, sparse_label_annotation)
stackview.insight(sparse_label_annotation)
shape(200, 200)
dtypeuint32
size156.2 kB
min0
max4

Sie können auch eine spärliche semantische Annotation erstellen, z.B. indem Sie einige Pixel innerhalb der Zellkerne und einige Pixel innerhalb des Hintergrunds annotieren.

sparse_semantic_annotation = np.zeros_like(cropped_image, dtype=np.uint32)
stackview.annotate(cropped_image, sparse_semantic_annotation)
stackview.insight(sparse_semantic_annotation)
shape(200, 200)
dtypeuint32
size156.2 kB
min0
max3