Bilder zusammenfügen#

In diesem Notebook zeigen wir, wie Bilder zusammengefügt werden können. Das Zusammenfügen ist häufig notwendig, wenn Bilder in [überlappenden] Kacheln aufgenommen werden. Das Kombinieren dieser Kacheln vertikal oder horizontal wird als Stitching bezeichnet.

from skimage.io import imread
import stackview
import matplotlib.pyplot as plt
import pyclesperanto_prototype as cle
import numpy as np

Nach der Aufnahme der Bilder wissen Sie normalerweise, wie stark sich die Bilder überlappen. Hier gehen wir davon aus, dass die Überlappung als Anzahl von Pixeln angegeben ist. Wenn Sie nur den Prozentsatz der Überlappung kennen, müssen Sie diese Zahl berechnen, indem Sie den Prozentsatz mit der Bildgröße (Breite oder Höhe) multiplizieren.

num_overlap_pixels = 40
image1 = imread("../../data/blobs_stitching1_overlap40.tif")
image2 = imread("../../data/blobs_stitching2_overlap40.tif")
fig, ax = plt.subplots(1, 2)
stackview.imshow(image1, plot=ax[0])
stackview.imshow(image2, plot=ax[1])
../_images/591fe8a49e1f533b2270ee9cd6922b3051078502a7619f6d635dba6799504234.png

Beachten Sie, dass diese Bilder einige überlappende Pixel enthalten. Wenn wir die Bilder einfach nebeneinander zusammensetzen, sehen wir diese Pixel doppelt.

cle.combine_horizontally(image1, image2)
cle._ image
shape(254, 296)
dtypefloat32
size293.7 kB
min8.0
max248.0

Pyclesperanto ermöglicht das Zusammenfügen der Bilder mit Überlappung. Der überlappende Bereich wird linear gemischt.

cle.stitch_horizontally_linear_blending(image1, image2, num_pixels_overlap=num_overlap_pixels)
cle._ image
shape(254, 256)
dtypefloat32
size254.0 kB
min8.0
max248.00002

Um zu demonstrieren, wie die lineare Mischung funktioniert, erstellen wir zwei synthetische Bilder. Zuerst kombinieren wir sie wie oben gezeigt.

syn_image1 = np.ones((100, 100))
syn_image2 = np.ones((100, 100)) * 2

cle.combine_horizontally(syn_image1, syn_image2)
cle._ image
shape(100, 200)
dtypefloat32
size78.1 kB
min1.0
max2.0

Dann fügen wir die Bilder mit linearer Mischung zusammen.

cle.stitch_horizontally_linear_blending(syn_image1, syn_image2, num_pixels_overlap=30)
cle._ image
shape(100, 170)
dtypefloat32
size66.4 kB
min1.0
max2.0

Hinweis: Die Berechnung der Registrierungsparameter für die optimale Überlappung der Bilder wird derzeit in pyclesperanto nicht unterstützt.