TP4: Assemblage de photos

Introduction

Ce TP consiste à assembler des images prises dans une même scène pour créer une mosaïque d'images formant un panorama. Il implique deux concepts importants en vision numérique, soit l'homographie et la détection et l'appariement de points caractéristiques. L'algorithme d'assemblage consiste en 4 étapes, soit la détermination et l'appariement de caractéristiques, le calcul de la matrice de projection, la déformation projective et finalement, la fusion des images pour créer la mosaïque. Le TP a été réalisé en 2 étapes. Dans la première étape, la fonction qui permet d'effectuer le calcul de la matrice d'homographie et celle permettant de déformer les images sont développées en sélectionnant manuellement les points caractéristiques. Dans la deuxième étape, les points caractéristiques sont déteminés et appariés automatiquement.

Calcul de la matrice de projection

La matrice de projection possède 8 degrés de liberté. Pour chaque paire de points appariés, on obtient 2 équations. Il faut donc 4 paires de points appariés pour déterminer la matrice. L'équation permettant d'obtenir le point transformé avec la matrice de projection est la suivante:

$$ \begin{bmatrix} x_1'\\ x_2'\\ x_3'\\ \end{bmatrix} = \begin{bmatrix} a & b & c \\ d & e & f \\ g & h & i \\ \end{bmatrix} \cdot \begin{bmatrix} x \\ y \\ 1 \\ \end{bmatrix} $$

On peut obtenir x' et y' avec les équations suivantes :

$$ x' = \frac{x_1'}{x_3'} = \frac{ax + by + c}{gx + hy + i} \\ y' = \frac{x_2'}{x_3'} = \frac{dx + ey + f}{gx + hy + i} $$

Ces équations peuvent être réarrangées pour obtenir les deux équations suivantes:

$$ ax + by + c - gx'x - hx'y - ix' = 0 \\ dx + ey + f - gy'x - hy'y - iy' $$

À partir des équations obtenues avec 4 points ou plus on contruit l'équation matricielle :

$$ \begin{bmatrix} x_1 & y_1 & 1 & 0 & 0 & 0 & -x_1'x_1 & -x_1'y_1 & -x_1' \\ 0 & 0 & 0 & x_1 & y_1 & 1 & -y_1'x_1 & -y_1'y_1 & -y_1' \\ x_2 & y_2 & 1 & 0 & 0 & 0 & -x_2'x_2 & -x_2'y_2 & -x_2' \\ 0 & 0 & 0 & x_2 & y_2 & 1 & -y_2'x_2 & -y_2'y_2 & -y_2' \\ x_3 & y_3 & 1 & 0 & 0 & 0 & -x_3'x_3 & -x_3'y_3 & -x_3' \\ 0 & 0 & 0 & x_3 & y_3 & 1 & -y_3'x_3 & -y_3'y_3 & -y_3' \\ x_4 & y_4 & 1 & 0 & 0 & 0 & -x_4'x_4 & -x_4'y_4 & -x_4' \\ 0 & 0 & 0 & x_4 & y_4 & 1 & -y_4'x_4 & -y_4'y_4 & -y_4' \\ \end{bmatrix} \cdot X = 0 $$

Ce système d'équation peut être résolu avec la méthode de décomposition en valeurs singulières (SVD) pour obtenir X qui est réorganisé en matrice 3x3 pour obtenir la matrice de projection H.

Déformation projective

La déformation projective utilise la matrice de projection calculée dans la section précédente pour déterminer la position des pixels de l'image à déformer dans le repère voulu. La taille de la nouvelle image est déterminée en calculant la position des coins de l'image initiale dans le nouveau système. L'image initiale est redimensionnée pour accommoder les positions qui ont des indices négatifs (se retrouvant à gauche et en haut de l'image initiale). Les coordonnées des points caractéristiques sont corrigées pour tenir compte de la translation de l'image, et la matrice projective est recalculée. C'est avec cette deuxième matrice que la déformation projective est calculée. Les images suivantes montrent la déformation projective de la deuxième image du panorama 1 selon les points de repère de l'image 1 :

Fusion des images pour obtenir la mosaïque

La fusion des images se fait en faisant une moyenne pondérée de la valeur de chaque image lorsque les deux valeurs sont disponibles. En les combinant avec un poids de 50% sur toute les valeurs, on peut observer la qualité de la surperposition. Dans l'image suivante, avec un appariement manuel utilisant 20 points, on obtient un appariement acceptable, même s'il subiste un flou dans la zone de superposition.

En effectuant la fusion avec des poids augmentant de façon linéaire, on enlève la démarcation qui existe à la frontière des images. Les endroits où l'appariement est moins précis sont aussi moins apparents.

Détection des caractéristiques de coin

La détection des caractéristiques de coin utilise le détecteur de coins de Harris. Puisque la méthode de Harris produit une grande quantité de points, elle est raffinée en supprimant les points les plus faibles dans un rayon donné pour ne garder que le maximum. Pour ce faire la méthode de Harris fournie (harris.m) est modifiée afin de pouvoir ajuster le rayon de supression déjà implémenté. Le rayon de suppression est ajusté de façon à conserver suffisamment de points pour les étapes suivantes. Dans le cas présent, un rayon de 10 semble donner de bons résultats sans que le nombre de points ne rende le calcul trop long.

Extraction d'un descripteur et appariement des caractéristiques

Les points détectés avec le détecteur de Harris doivent être appariés. Ceci peut être obtenu en comparant les environnemnts des points. Une zone de 40x40, échantillonnée sur 8x8 en utilisant une pyramide gaussienne, autour de chaque point est donc utilisée comme descripteur. Chaque descripteur est normalisé de façon à ce que la moyenne de ses valeurs soit 0 et l'écart type 1. L'appariement se fait en trouvant le descripteur de l'autre image pour laquelle la distance euclidienne est minimale. Pour éliminer les mauvais appariement, on utilise le rapport entre la distance avec le plus proche voisin et le voisin suivant. Le seuil est ajusté de façon à conserver suffisamment de points tout en éliminant les appariements erronnés. Dans le cas présent, un seuil de 0.3 donne de bons résultats.

Calcul de l'homographie avec l'algorithme RANSAC

L'algorithme RANSAC consiste à sélectionner 4 paires points au hasard dans l'ensembre de points appariés pour calculer une matrice de projection. Cette matrice de projection est utiliser pour transformer les points de l'image à déformer vers l'image cible. Les résultats obtenus sont comparés celui du point qui lui est apparié en calculant la distance avec ce dernier. Un seuil de distance décide si le point est accepté ou non. L'algorithme est répété pour un nombre prédéterminé d'itération et la matrice de projection qui permet de conserver le plus de points est retournée. Dans le cas présent, une distance seuil de 1 est un nombre d'itérations de 600 semble donner de bons résultats.

Tests avec les images fournies : panorama 1

Il n'est pas possible de combiner toutes les images du panorama 1 en une seule mosaïque projetée sur un plan étant donné que la scène couvre plus de 180 degrés. Il serait possible de le faire avec une projection cylindrique. Le résultat pour la projection du panorama 1 est donc scindée en deux parties. La première partie contient les images 1 à 5 dans l'ordre 1,2,3,4,5 de gauche à droite et la deuxième les images 6 à 10 dans l'ordre 10,9,8,7,6. L'image qui sert de plan de projection est l'image du centre, et les images sont ajoutés à la mosaïque une à une. Les images suivantes montrent le résultat obtenu:

On peut remarquer la présence d'artéfacts en haut et en bas des images. Ceci est du à la méthode de fusion des images qui est un gradient horizontal. Il serait possible d'éliminer ces artéfacts en utilisant du feathering.

Tests avec les images fournies : panorama 2

Les images du panorama 2 couvrent aussi un très grand angle et ne peuvent être assemblées sur le plan d'une seule image. Les deux images suivantes sont obtenues en combinant les images 1 à 7 projetées sur l'image 4 pour l'image de gauche et 9 à 13 projetées sur l'image 11 pour l'image de droite. On peut remarquer que l'alignement est peu précis à gauche de la deuxième image. Les extrémités de l'image se déforment lorsque la projection se fait dans un angle élevé, ce qui nuit au positionnement des points pour l'appariement des images suivantes.

Dans cette mosaïque, on peut aussi observer des 'fantômes' causés par les gens qui ont changé de position entre les prises de photo: