TP4 (7105): Assemblage de photos

Par : Bernard Lebel

Le but de ce travail a été de mettre en application la théorie derrière les techniques d'assemblage d'images notamment impliquées dans la création d'un panorama.

1- Algorithme d'assemblage manuel

L'algorithme de morphage se divise en plusieurs étapes.

a) Séquence des photos

Dans un premier temps, il est nécessaire d'établir l'image du centre du panorama afin que la projection (expliquée plus loin) soit conforme à l'effet désiré.

b) Sélection des points d'intérêt

Durant cette étape, l'utilisateur doit choisir un nombre de points d'intérêt commun à chaque paire d'images voisines dans le panorama. Afin de fonctionner, l'algorithme nécessite un minimum de 4 points d'intérêts communs. Cependant, comme des imprécisions dans la sélection des points peuvent grandement affecter le résultat final, il est généralement conseillé de prendre plus de points afin d'atténuer l'effet de ces erreurs. Dans le cas présent, 8 points communs ont été sélectionnés pour chaque panorama. La figure ci-dessous illustre un exemple de placement de points sur 3 images d'un même panorama.

Image 1 et 2
Image 2 et 3

c) Calcul des transformations

À cette étape-ci, il faut déterminer quelle est la transformation géométrique subie par les points de l'image transformée (les images de droite ci-haut) qui, lorsqu'on applique son inverse, font correspondre les points à ceux des images d'origines (à gauche ci-haut). Le calcul de cette transformation se fait par la procédure expliquée dans les notes de cours sur les mosaïques. En résumé, il faut parvenir à résoudre un système d'équations linéaires avec 9 inconnus, dont l'un que l'on fixe à 1. Algébriquement, la matrice prend la forme suivante : \[y = Hx \] Écrite au long, cette équation devient : \[ \begin{pmatrix} x' \\ y' \\ w \end{pmatrix}=\begin{pmatrix} a & b & c \\ d & e & f \\ g & h & 1 \end{pmatrix} \times \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \]

Pour cette étape, \(w=1\) . \(x',y'\) sont les coordonnées des points de l'image transformée et \(x,y\) pour l'image d'origine en coordonnées homogènes. La matrice dont les paramètres sont recherchés est la matrice de transformation \(H\).

d) Application des transformations

Tout d'abord, si l'image n'est pas la première à côté du point central, il faut multiplier sa matrice de transformation par toutes les autres matrices des images la précédente jusqu'au point central. Cela assure que l'image sera projetée selon le plan de l'image central et non uniquement de sa voisine.

\[ H = H_1 \times H_2 \times ... \times H_{courante} \]

Ensuite, la transformation inverse ( \(H_{inv}\) ) est appliquée aux quatre coins de l'image transformée afin d'obtenir le cadre dans lequel tous les pixels de l'image transformée devront être projetés afin d'être rectifiée selon l'image d'origine. Il est crucial à cette étape-ci de définir des limites d'un cadre maximal sinon, si les coordonnées d'un point tendent vers l'infini, l'assemblage ne pourra s'effectuer correctement. Une fois la zone de projection bien établie, on procède en appliquant \(H\) à tous les pixels de l'image transformée pour obtenir leur correspondance dans le plan de l'image d'origine. L'espace se trouvant entre les pixels à leur nouvel emplacement est rempli par interpolation. On peut voir ci-dessous des exemples d'images ainsi projetées.

d) Cumul des images

Une fois toutes les sous-images générées, elles sont empilées à l'aide d'une moyenne pondérée pour chaque pixel. Le résultat produit le panorama tel que désiré.

e) Résultats

Ci-dessous se trouvent les résultats des panoramas réalisés à l'aide de l'algorithme décrit pour tous les ensembles obligatoires. Par souci de convivialité, ils ont été redimensionnés et découpés manuellement. Cependant, il est possible de les télécharger à leur pleine taille en cliquant sur chacun.

Panorama 1
Panorama 2. À noter, les images en hauteur ont été retirées puisqu'elle rendait le résultat inutilisable.
Panorama 3. À noter, 6 images ont été utilisées, puisque la projection perdait de la qualité sinon.

2- Algorithme d'assemblage automatique

Ci-dessous sont présentées les étapes qui servent à remplacer l'étape b) de la sélection manuelle. Les autres étapes demeurent inchangées.

a) Application d'un filtre de Harris

Tel que décrit dans l'énoncé du TP4, la première étape après avoir déterminé la séquence d'enchaînement des photos du panorama est d'appliquer un filtre de Harris sur chacune des 2 photos voisines après les avoir converties en LAB (i.e. luminance+chrominance) et en conservant uniquement la luminance. Ce filtre permet de faire ressortir avec plus ou moins d'intensité les coins contenus dans l'image (selon les paramètres de l'algorithme utilisé). Le résultat de l'application du filtre est présenté ci-dessous. Les couleurs rendues suivent le standard d'une "heat map".

b) Identification des coins

À partir du résultat obtenu par le passage du filtre de Harris précédemment, on identifie les minimums locaux dans l'image à l'aide d'une fenêtre pouvant être établie par paramètres. Le résultat de cet algorithme produit l'image ci-dessous.

c) Appariement des points

Afin d'obtenir des points d'intérêts équivalents à partir des sommets identifiés à l'étape précédente, il est nécessaire de bâtir un descripteur pour chacun de ses sommets qui pourra être comparé à ceux de ses voisins. Pour se faire, on sélectionne une fenêtre de 40x40 px autour de chacun des points d'intérêt. Ensuite, chacune de ces fenêtres est redimensionnée à 8x8, provoquant ainsi la perte des plus hautes fréquences et permettant une meilleure comparaison entre les descripteurs des 2 photos. Finalement, chaque descripteur est comparé à tous les descripteurs de la photo voisine et en appliquant un algorithme de corrélation croisée présente dans scikit-image (match_pattern), on apparie chaque point d'une image à un point dans l'autre image pour lequel il y a la plus forte correspondance, mais qui est aussi au-dessus d'un certain seuil. Si un descripteur n'a pas de réponse assez forte avec ceux de l'autre image, le point est abandonné puisqu'il induirait probablement trop de bruit. Advenant le cas où il y aurait une quantité insuffisante d'appariement (moins de 8 points communs), le seuil de tolérance est augmenté et on relance l'appariement. La figure ci-dessous présente un descripteur avant et après avoir été redimensionnés.

d) RANSAC

Finalement, la transformation H est identifiée à l'aide de l'application de Random sample consensus (RANSAC). Cet algorithme consiste à choisir un ensemble de 4 points de correspondance aléatoirement, de calculer la matrice de transformation correspondante et de valider la quantité de points d'intérêt correspondant entre les deux images dans la limite d'une tolérance donnée après l'application de H sur l'ensemble des points de l'image transformée. L'algorithme est répété un nombre de fois désiré (fixé à 10000 dans le cas présent). À la toute fin, on conserve la matrice de transformation ayant obtenu le plus grand nombre de correspondances.

e) Résultats

Voici les résultats obtenus à l'aide de l'algorithme automatique.

Panorama 1
Panorama 2. À noter, les images en hauteur ont été retirées puisqu'elle rendait le résultat inutilisable.
Panorama 3. À noter, 6 images ont été utilisées, puisque la projection perdait de la qualité sinon.

Le panorama 2 n'était pas en mesure de bien opérer avec toutes les photos. En effet, étant donné la très grande quantité de coins communs et que les opérations de transformations matricielles sont chaînées, la moindre erreur affectait toutes les transformations subséquentes et rendait l'image indistincte. Là est l'une des limites de l'algorithme de détection des coins. Le panorama 3, étant donné qu'il s'agit d'un paysage d'hiver, avait des difficultés à identifier des coins satisfaisant pour appliquer l'algorithme. Le résultat présenté est l'un des rares qui ont bien fonctionné.

Au global, plus on s'éloigne de la photo centrale, plus l'erreur s'accumule et plus on aperçoit des imprécisions dans l'appariement.

3) Panoramas divers

La section suivante présente 2 panoramas fait moi-même à l'aide de mes propres photos.

4) Points additionnels : Effets spéciaux

Ci-dessous sont présentés différents effets spéciaux pour la section de 5% par montage inusité. Une courte description accompagne chacun, les deux images d'origines de même que le résultat final accompagnent chacun de ces montages/collages.

a) Panneau truqué

Pour ce montage, un panneau de borne-fontaine a été trafiqué au plus grand plaisir de tous!

À gauche : Photo originale. À droite : Panneau truqué
Montage

b) Graffiti

De manière analogue à l'application d'un faux panneau de circulation, il a été possible d'appliquer un graffiti sur une surface dont l'inclinaison différait de celle du graffiti. Les résultats sont présentés ci-dessous. L'image de l'intérieur du Mont-Saint-Michel est tirée de mes propres photos alors que le Grumpy Cat provient de ce site.

À gauche : Photo originale. À droite : Grumpy cat.
Montage

c) Redressage de motif

En utilisant la photo du réfectoire du Mont-Saint-Michel ci-haut, il a été possible de redresser la partie centrale du carrelage du plancher afin de faire ressortir le motif. Le résultat est présenté ci-dessous.

Motif rectifié

d) Reconstitution passé/présent

À partir des images contenues sur ce site Internet, une reconstitution d'une scène a été réalisée à partir d'une photo d'époque de la 2e Guerre mondiale et d'une photo actuelle. Manuellement, une partie de la photo d'aujourd'hui a été retirée avec du "feathering" afin d'obtenir un certain effet de fondu. Ceci étant dit, avec plus de temps, il aurait été possible de paufiner ce résultat.

1944 - À gauche : Originale. À droite : Modifiée pour montage
Aujourd'hui
Montage

e) Maquette - Monument

L'idée derrière ce montage était de fait une comparaison entre un monument et une maquette. Malheureusement, le résultat est moins impressionnant que désiré puisque la maquette n'était pas à l'échelle du monument réel. Toutefois, le résultat est tout de même rapporté ci-dessous.

Lego Taj Mahal - À gauche : Originale. À droite : Modifiée pour montage
Taj Mahal
Montage