Terminologie#
Ce notebook sert à montrer des images et des images segmentées de différents types pour expliquer la terminologie courante.
from skimage.io import imread, imshow
import napari_segment_blobs_and_things_with_membranes as nsbatwm
import stackview
import numpy as np
Images d’intensité#
Nous commençons par les images d’intensité telles qu’elles sont couramment produites par les microscopes.
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 binaires#
Les algorithmes de segmentation de base conduisent à des images binaires. Elles se caractérisent par le fait qu’elles n’ont que deux intensités différentes, comme 0 et 1.
binary_image = nsbatwm.threshold_otsu(cropped_image)
binary_image
|
|
nsbatwm made image
|
Segmentation d’instances#
Si chaque objet individuel a sa propre intensité / couleur, nous l’appelons une image d’étiquettes de segmentation d’instances. Les instances sont étiquetées avec des nombres entiers. L’intensité maximale (étiquette) dans cette image correspond généralement au nombre d’objets.
instance_segmentation = nsbatwm.voronoi_otsu_labeling(cropped_image,
spot_sigma=5,
outline_sigma=1)
instance_segmentation
|
|
nsbatwm made image
|
Lorsque vous exécutez ce notebook localement, vous pouvez survoler l’image avec votre souris et inspecter les intensités des pixels.
import stackview
stackview.picker(instance_segmentation)
Segmentation sémantique#
Les images d’étiquettes de segmentation sémantique peuvent avoir plus de deux étiquettes et étiquettent généralement les régions où les pixels ont la même signification, par exemple : noyaux, enveloppe nucléaire et arrière-plan.
semantic_segmentation = binary_image + nsbatwm.maximum_filter(binary_image).astype(np.uint32) + 1
semantic_segmentation
|
|
nsbatwm made made image
|
Annotations éparses#
Les images d’étiquettes annotées sont généralement dessinées par des humains. Lorsque vous exécutez ce notebook localement, vous pouvez dessiner quelques annotations. Si vous annotez précisément quelques noyaux, vous créez une annotation éparse de noyaux. Maintenez la touche ALT enfoncée pour effacer une annotation.
sparse_label_annotation = np.zeros_like(cropped_image, dtype=np.uint32)
stackview.annotate(cropped_image, sparse_label_annotation)
stackview.insight(sparse_label_annotation)
|
|
|
Vous pouvez également créer une annotation sémantique éparse, par exemple en annotant quelques pixels à l’intérieur des noyaux et quelques pixels dans l’arrière-plan.
sparse_semantic_annotation = np.zeros_like(cropped_image, dtype=np.uint32)
stackview.annotate(cropped_image, sparse_semantic_annotation)
stackview.insight(sparse_semantic_annotation)
|
|
|