Division durch Gauß#
Bei der Verarbeitung von Bildern mit Membranfärbung kommt es manchmal vor, dass die Intensität der Membranen nicht homogen ist und sich lokal ändert. Diese Intensitätsvariation kann Zellsegmentierungsalgorithmen beeinträchtigen. In solchen Fällen kann es sinnvoll sein, die Intensität zu homogenisieren, indem man das Bild durch eine Gauß-geglättete Version seiner selbst teilt.
import pyclesperanto_prototype as cle
from skimage.io import imread, imshow
from skimage.filters import gaussian
In diesem Bild sehen Sie, dass die Intensität der Membranen von oben nach unten abnimmt.
image = imread('../../data/membranes_2d.tif')
cle.asarray(image)
cle._ image
|
Dieser Intensitätsgradient kann entfernt werden, indem man das Bild durch seinen Hintergrund teilt, eine Gauß-geglättete Version seiner selbst.
intensity_equivalized = cle.divide_by_gaussian_background(image, sigma_x=10, sigma_y=10)
intensity_equivalized
cle._ image
|
Wie es funktioniert#
Um zu demonstrieren, wie es funktioniert, werden wir die gleiche Operation in zwei Schritten mit scikit-image und numpy durchführen.
background = gaussian(image, sigma=10)
imshow(background, 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 0x1aa03625160>
result = image / background
imshow(result, 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 0x1aa0350d580>