TP4: Assemblage de photos

Description :

Le but de cet activité est de prendre plusieurs images d'une même scène et de les assembler pour donner une image panorama. Les deux concepts impliqués sont l'homographie pour faire des tranformations géométriques sur les images et la selection de points caratéristiques pour le calcul de l'homographie. Deux approches doivent être utilisés pour résoudre ce problème; la selection de points d'intérêts manuelle et la selection de points d'intérêts automatique. Les algorithmes sont présentés dans les sections suivantes.

Selection de points manuelle

Pour la première partie de l'algorithme, il est nécessaire de selectionner des points d'intérets. Pour ce faire j'ai selection 10 points que j'identifie pour mieux les raporter sur une deuxième image. voici un exemple :

Selection manuelle de 10 points d'intérêts

Calcul de la matrice d'homographie

La matrice de transformation à 8 degrés de liberté, donc 4 paires de points d'intérêts sont le minimum nécessaire. Avec ces points on trouve que :

Où,

Finalement, on trouve nos valeur de matrice d'homographie en prenant les valeurs de la dernière variable de v = svd(mat).

Déformation de l'image

Une fois la matrice d'homographie calculée, il faut déformer une la deuxième image avec cette matrice. Pour ce faire on débute par calculer les bordures de la future image. Ensuite un meshgrid est créé avec ces nouvelles limites. Ce grid est déformé avec la matrice H et interpolé avec l'image originale. Voici un exemple d'image déformée :

Collage des images

La dernière étape de cette partie est de joindre les deux images ensemble. Les dimensions de l'image résultante sont initialement calculées pour ensuite y coller l'image inchangée au bon endroit. On calcul un masque de pixels valides sur l'image déformée et on copie cette image avec ce masque dans l'image résultante. Les endroits où copier les deux images sont trouvés avec les limites des coins calculées par la déformation de l'image. Voici un résultat sur deux image.

Calcul automatique des points d'intérêts

La deuxième partie est de touver les points d'intérêts de manière automatique. Pour ce faire on utilise la detection de coins avec des descripteurs pour trouver des paires de coordonnées et l'algorithme de RANSAC pour rendre le calcul de l'homographie plus robuste. Les étapes sonts les suivantes :

Detection de points

Le code fournit dans harris.m est utilisé pour trouver les coins dans l'image. Un algorithme de répression maximale non adaptative est exécuté sur les coins trouvés pour dimunuer la quantité de données, mais garder une distribution uniforme. Pour ce faire on prend des cercles dans l'image et on garde le coin le plus fort dans ce cercle.

Coins détectés avant et après la répression maximale non adaptative

Extraction et appariement des descripteurs

Des descripteurs sont calculés à partir de fenêtres de 40X40 pour une grosseur de 8x8 pixels. Les desripteurs sont normalisé pour avoir pour avoir une moyenne nulle et un écart-type de 1. Ces descripteurs sont ensuite appariés avec un descripteur de la deuxième image. Pour trouver le descriteur corrrespondant, on prend le ratio entre la plus petite et la deuxième plus petite distance euclidienne. Si ce ratio un plus petit que la limite donnée ces points sont des paires. La limite qui marche le mieux dans mon code est de 0,5. Voici des paires de points d'intérêts trouvés dans deux images :

RANSAC pour trouver une meilleur matrice d'homographie

Pour rafiner la recherche de la matrice d'homographie, on utilise l'algorithme aléatoire de RANSAC. Un choix de 4 paires points est fait dans un premier temps pour créer une matrice d'homographie et la tester sur ces points. c'est la somme des différences au carrés qui marque une bonne matrice de transformation. L'algorithme est répété plusieurs fois avec différentes paires de points. Dans mon cas, 5000 fois semble optimal.

Résultats avec une selection manuelle de points

Voici des résultat avec une selection manuelle de points sur l'image centrale avec ces deux images adjacentes pour les trois premiers panoramas. Une selection de 10 points est effectuée :

Plus je me rend sur les cotés, plus la déformation causée par la matrice de projection est grande jsuqu'à avoir des étirements beaucoup trop grands. C'est la probablement du au fait que mon calcul d'homographie n'est pas parfait puisque les coordonnées ne sont pas normalisées.

Résultats avec une selection automatique de points

Voici des résultat avec une selection automatique de points. Les diaporamas présentés contienne le maximum de photos que j'ai pu jumeler du a des déformations abérentes causées par des matrice d'homographie instable:

Erreur de transformation qui survient avec plusieurs images

Avec des images que j'ai prise :

Avant que l'étirement devienne trop grand avec 8 photos

Quand l'étirement devien trop grand avec 10 photos

Les images que j'ai prises fonctionnent beaucoup mieux que les images fournient. Entre autre puisque l'écart entre chaque image est moins grand.