TP4: Assemblage de photos

Partie 0: Réchauffement

Dans cette partie, il faut créer un fonction appliqueTransformation(img, H) pour appliquer une homographie sur une photo quelconque. Pour ce faire, les étapes de transformations sont similaires aux étapes rencontrées dans le TP3 lors du morphage de visage. Or, il faut maintenant créer un nouveau cadre d'image ayant les dimensions nécessaires pour contenir notre image transformée.

Résultat avec l'image donnée

Avant HAprès H

Discussion : Comme on voit, notre algorithme produit le résultat escompté. Nous pouvons voir que le cadrage final est le plus petit possible puisqu'il entoure tout juste l'image finale.

Partie 1: Appariement manuel

Dans cette partie, il faut non-seulement utiliser l'approche de la Partie 1 pour transformer l'image, mais il faut également trouver la bonne transformation projective entre les images formant le panorama. Rappelons que nous désirons trouver la transformation projective qui contient 8 degrés de liberté. Ainsi, pour trouver la transformation nécessaire (homographie) entre deux images, il suffit d'avoir 4 points de correspondance entre les images. Tout au long du TP, pour avoir plus de robustesse, nous calculerons notre transformation avec 8 points de correspondance pour plus de robustesse. Puisque les points sont sélectionnés manuellement pour cette partie, les étapes sont :

Résultat avec les scènes fournies

Discussion : Le résultat est assez concluent, malgré les quelques imperfections. Il y a quelques disconstinuités à cause des imperfections des lentilles aux frontières des images.

Il est d'ailleurs à noter que, tout au long du TP, nous pourrons observer le même phénomène. À un seul endroit, où les photos choisies proviennent d'un jeu de données où les images on été préalablement traitées, le phénomène ne sera pas perceptible.

Il y a également un peu de flou au centre, provenant probablement du fait que nos points n'étaient pas parfaitemement sélectionnés. Finalement, il y a une aberration sur le haut du lampadaires provenant du fait que l'effet des erreurs de transformation est amplifié proche des bords de l'image.


Comparaison IMG_2426.JPG - IMG_2427.JPG
Comparaison IMG_2426.JPG - IMG_2427.JPG

Discussion : Ici le résultat est encore très bon. Il y a toujours un peu de flou au centre puisque les points étaient difficiles à choisir à la main. Une chose intéressante à observer sont les taches dans le ciel. La tache de l'image IMG_2427.JPG est peut-être la capture du soleil, or il ne faut pas prendre les autres pour un soleil pris à faible exposition. Il s'agit de reflet du soleil et il est ainsi normal que ces taches ne soient pas confondues dans le panorama.


Comparaison IMG_2409.JPG IMG_2410.JPG
Comparaison IMG_2410.JPG IMG_2411.JPG

Discussion : Ici encore, le résultat est très appréciable. Les points sont plus faciles à choisir entre les photos IMG_2410.JPG IMG_2411.JPG puisque les photos contiennent des textures plus différentes entre elles. Ainsi, peut-être que cela explique le plus grand flou dans l'assemblage des deux autres images (gauche). Sinon, nous voyons un spectre de la rembarde dans le bas de l'image. Sûrement que ce défaut vient de l'accentutation de l'erreur de lentille en bordure de l'image.

Partie 2: Appariement automatique

Dans cette partie, nous rajoutons encore une étape. En plus de trouver les homographies, il faut trouver les points de correspondance automatiquement. Pour détecter les points, nous suivons certaines étapes de l'article Multi-Image Matching using Multi-Scale Oriented Patches.

Les étapes de l'algorithme de détection et de description des points sont :

Ensuite, il faut apparier les points ainsi que calculer l'homographie entre deux images. Les étapes sont les suivantes :

Pour assembler les images, nous utilisons un algorithme automatique également. Les étapes de l'algorithme d'assemblage sont :

Résultat avec les scènes fournies

Discussion : Ici le résultat est vraiment impressionnant. Non seulement, nous pouvons voir que notre algorithme a bien assemblé l'image, mais il nous ne voyons pas de discontinuité près des bordures des images. Cela provient du fait que notre jeu de donnée a été préalablement traité par ceux qui l'ont créé pour enlever les défauts de lentille. Nous pouvons voir que les points choisis sont intéressants et contiennent que des inliers.


Discussion : Le résultat est encore statisfaisant, mais nous pouvons voir une certaine explosion de l'image de droite puisque le panorama a un champs de vue débalancé à droite. Comparativement au panorama de la même scène en partie 1, nous pouvons voir que l'algorithme automatique est beaucoup plus robuste, puisque le centre est moins flou. Or, il a fallu plus d'itérations de RANSAC pour trouver des bonnes homographie.


Discussion : Nous obtenons encore un bon résultat malgré le léger flou dans les arbres à gauche. Le résultat est impressionnant puisque les images ont été prises sur l'axe des x et sur l'axe des y et le résultat est tout de même impécable.

Résultat avec nos scènes

Discussion : Nous pouvons voir l'effet de la balance des blancs du cellulaire et qui change la luminosité des images et ainsi crée des discontinuités dans le panorama. Malgré cela, le résultat est très bon, les images sont bien alignées pour des images prises avec un cellulaire avec un centre de projection un peu instable entre les images. Nous avons fait exprès de prendre des photos sur l'axe des x et l'axe des y pour voir si cela allait rendre la tache plus difficile à notre algorithme, mais il réussit à créer un bon panorama.


Discussion : Nous avons décidé de faire un panorama classique pour la fin avec la célèbre fresque de Riopelle au Musée des Beaux-Art National du Québec. Le résultat est quand même excellent pour des photos de Nexus 5 avec un centre de projection instable. Nous voyons par contre que l'instabilité a induit des erreurs à gauche où l'on peut apercevoir un flou désagréable.

Pour comparer, nous avons pris un panorama de la même scène avec l'algorithme de Google. Nous voyons que notre algorithme arrive à donner un résultat quand même intéressant malgré sa simplicité comparativement à la complexité de l'algorithme à projection cylindrique de Google. Les images ont été rognée pour les besoins de la comparaison :

Sans Google
Avec Google