Pour implémenter la fonction appliqueTransformation, il faut d'abord appliquer la transformée aux 4 coins de l'image originale. Ensuite, on creer l'image de sortie avec les dimensions correspondant aux 4 coins transformés. On garde en mémoire le offset nécéssaire pour que les indices commencent à 0.
Finalement, on applique la transformée inverse sur tous les points de l'image finale, en prennant compte de l'offset calculé lors de la création de l'image cible.
Transformée de JF avec la matrice fournie
Pour faire un panorama avec des appariements manuels, il faut tout d'abord trouver les correspondances. Pour ce faire, on utilise la fonction de matlab cpselect qui nous permet de sélectionner les points de correspodnances. Une fois que les points sont connus, on calcule la transformée avec la fonction calculerHomographie. Cette fonction créée un système d'équation Ax=b. Puisqu'on fixe H33 à 1, nous n'avons que 8 inconnus. On utilise les 4 correspondances pour creer 8 équations (ou plus) pour résoudre les 8 inconnues se retrouvant dans le vecteur x. Ensuite, on effectue un reshape pour mettre les inconnues sous la forme d'une matrice 3x3.
Il faut calculer cette transformée pour chaque paire d'images adjacentes. Il faut donc connaitre l'ordre des images d'avance. Il faut aussi se choisir un plan de projection. Le plus simple est d'utiliser l'image centrale comme projection. Une fois les images transformés, elles ressemblent à ceci:
Comme on peut voir, les images sont parfois floues. Cela s'explique parle fait que les points d'appariement sont cliqués manuellement et ne sont donc pas parfaits. De plus, la quantité de points est assez faibles. Les parties proches de la caméra peuvent subir des distortions si les photos ne partagent pas le même centre de projection. De plus, On onbserve beaucoup de ghosting à l'intersection des iamges. En effet, l'intersection est faite avec une simple moyenne. Mais comme la luminosité de la caméra n'est pas uniforme, on remarque les jonctions assez facilement.
L'appariement automatique est très semblable à l'appariement manuel. La différence se trouve à la sélection des points. Une fois les poitns trouvés, la démarche est la même que dans la section précédente.
Pour apparier les points automatiquement, on commencer par détecter les features. Pour ce faire, on utilise Harris. En appliquant Harris, on obtient cette détection de points:
Après Harris, on applique l'aogorithme ANMS pour réduire et uniformiser les features. On obtient alors ces points:
Ensuite, on creer un descripteur pourtousces points. Puis, on fait l'appariement avec la méthode de Lowes. Pour qu'un appariement soit considéré bon, il faut que leration entre l'erreur du meilleur match et l'erreur du 2e meilleur match soit inférieur à 0.4 (valeure retirée du tableau de l'article). On obtient alors les matchs suivants:
Ici, on peut voir qu,il y a un ou deux mauvais match malgré cette méthode robuste. On effectue donc un ransac pour éliminer les outliers et on applique la transformée avec tous les inliers.
Comme on peut voir, les résultats ne sont pas parfait. L'image 1 est très réussie, mais on ne peut pas en dire autant des autres. En effet, le choix du plan de projection dans le 2e panorama n'est pas excellent. Le plan est plannaire et est aligné avec l'image 3. Cela cause donc beaucoup dedistotion dans la première image. Pour effectuer le 3e panorama, il a fallu modifier la séquence pour calculer les points de correspondances avec l'image centrale inférieure (sauf l'image en haut à gauche qui est appariée avec l'image centrale supérieure).