Bildbinarisierung#

Bei der Binarisierung eines Bildes erzeugen wir ein Bild, das nur zwei Werte enthält: Wahr und Falsch. Sie können auch den Wert 0 enthalten, z.B. für den Hintergrund, und jeden anderen Wert für den Vordergrund.

import numpy as np
from skimage.io import imread, imshow
from skimage.filters import gaussian

Wir verwenden dieses Beispielbild von Zellkernen.

image_nuclei = imread('../../data/mitosis_mod.tif')

imshow(image_nuclei)
<matplotlib.image.AxesImage at 0x1dcf6b5dbe0>
../_images/7965ce710e547039cf2bfd6f886f9e6d38b6871ba74d6654aa2ead048f7a6139.png

Bildschwellenwertverfahren#

Die häufigste Binarisierungstechnik ist die Schwellenwertbildung. Wir wenden einen Schwellenwert an, um zu bestimmen, welche Pixel über einer bestimmten Pixelintensität liegen und welche darunter.

image_binary = image_nuclei > 60
imshow(image_binary)
<matplotlib.image.AxesImage at 0x1dcf6bb09a0>
../_images/f9dc81389fae7ada02ab802bc2913226a503458279155021e90d22da542c4583.png

Verbesserung der Binarisierungsergebnisse#

Manchmal erscheinen Binarisierungsergebnisse pixelig. Dies kann verbessert werden, indem vor der Schwellenwertbildung ein Filter auf das Bild angewendet wird.

image_denoised = gaussian(image_nuclei, sigma=1, preserve_range=True)
imshow(image_denoised, cmap='Greys_r')
C:\Users\haase\mambaforge\envs\bio39\lib\site-packages\skimage\io\_plugins\matplotlib_plugin.py:150: UserWarning: Float image out of standard range; displaying image with stretched contrast.
  lo, hi, cmap = _get_display_range(image)
<matplotlib.image.AxesImage at 0x1dcf6c48640>
../_images/006dab8b724854f8cf48fec1444bdf4ff05d0157178c879b89cbf70b2a450296.png
image_binary2 = image_denoised > 60

imshow(image_binary2)
<matplotlib.image.AxesImage at 0x1dcf7d61040>
../_images/623c89c9fd796957b3265b5695f0832a70ea3680d5fd8a0aed5429af5ab72d12.png