Assemblage d’images#

Dans ce notebook, nous démontrons comment les images peuvent être assemblées. L’assemblage est généralement nécessaire lorsque les images sont acquises en tuiles [chevauchantes]. La combinaison de ces tuiles verticalement ou horizontalement s’appelle l’assemblage.

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

Après l’acquisition des images, vous connaissez généralement le degré de chevauchement des images. Ici, nous supposons que le chevauchement est donné en nombre de pixels. Si vous ne connaissez que le pourcentage de chevauchement, vous devez calculer ce nombre en multipliant le pourcentage par la taille de l’image (largeur ou hauteur).

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

Notez que ces images contiennent des pixels qui se chevauchent. Si nous assemblons simplement les images côte à côte, nous verrons ces pixels deux fois.

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

Pyclesperanto permet d’assembler les images avec chevauchement. La région de chevauchement sera fusionnée linéairement.

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

Pour démontrer comment fonctionne la fusion linéaire, nous créons deux images synthétiques. Tout d’abord, nous les combinons comme montré ci-dessus.

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

Ensuite, nous assemblons les images en utilisant une fusion linéaire.

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

Remarque : Le calcul des paramètres d’enregistrement pour un chevauchement optimal des images n’est actuellement pas pris en charge dans pyclesperanto.