Unión de imágenes#

En este notebook demostramos cómo se pueden unir imágenes. La unión es comúnmente necesaria cuando las imágenes se adquieren en mosaicos [superpuestos]. La combinación de estos mosaicos vertical u horizontalmente se llama unión.

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

Después de adquirir las imágenes, normalmente se sabe cuánto se superponen. Aquí asumimos que la superposición se da como un número de píxeles. Si solo conoces el porcentaje de superposición, necesitas calcular este número multiplicando el porcentaje por el tamaño de la imagen (ancho o alto).

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

Ten en cuenta que estas imágenes contienen algunos píxeles superpuestos. Si simplemente ensamblamos las imágenes una al lado de la otra, veremos estos píxeles dos veces.

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

Pyclesperanto permite unir las imágenes con superposición. La región superpuesta se mezclará linealmente.

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

Para demostrar cómo funciona la mezcla lineal, creamos dos imágenes sintéticas. Primero las combinamos como se mostró anteriormente.

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

Luego unimos las imágenes usando mezcla lineal.

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

Nota: El cálculo de los parámetros de registro para la superposición óptima de las imágenes actualmente no está soportado en pyclesperanto.