L'objectif de ce travail est d'implémenter une application nous permettant de créer une mosaïque d'images. Une mosaïque combine plusieurs images ayant des champs de vue se chevauchant afin de produire un panorama ou une image à haute résolution. La plupart des approches d'assemblage d'images nécessitent un chevauchement très exact et des expositions identiques entre les images pour produire des résultats sans joint apparent.
L'algorithme d'assemblage de photos consiste à:
Le calcul d'une transformation globale comme une homographie nécessite des paires de correspondances. La calcul d'une homographie nécessite au moins 4 paires de correspondances. Dans un premier lieu, j'ai donc sélectionné manuellement des points d'intérêt se retrouvant dans les deux images:
Panorama1 : 15 pts;
Panorama2 : 12 pts;
Panorama3 : 12 pts
Dans ce TP, la transforamtion est une homographie: p'=Hp, où H est une matrice 3x3 avec 8 degrés de liberté (coin inférieur droit est un facteur d'échelle et peut être mis à 1). Pour calculer H, une fonction 'computeH.m' est à établie:
H = computeH(im_source_pts,im_target_pts)
où im_source_pts
et im_target_pts
sont des matrices n-par-2 contenant les positions (x, y) de n correspondances des points des deux images et H
est une matrice 3x3 étant l'homographie récupérée.
Et H
est obtenue apr les moindres carrés.
Une référence de calcul se trouve ici : The Homography transformation.
Une fois on connait les paramètres de l'homographie, on peurt déformer les images à l'aide de celle-ci. Une fonction de la forme est écrite:
imwarped = warpImage(im,H)
où im
est l'image d'entrée à déformer et H
est l'homographie. Dedans on a utlisé la déformation inverse, et interp2
a aidé beaucoup. Pour la taille de l'image résultante, on fait la prédiction par mulitplier les quatre coins de l'image avec H
.
H
, on fait la taille finale de l'image résultante en multiplant par la plus 'grande' H
. On a laissé l'image centrale non déformée et déformer donce les autres images dans sa projection.
Cette méthode peut être décrite en quelques étapes simples:
Une caractéristique de coins dans une image représente un endroit dans l'image où les gradients horizontaux et verticaux sont tous les deux très forts. Le détecteur de coin d'Harris (Harris corner detector ou Harris detector) est un algorithme classique pour la détection de coins.
Avec l'aide du code : 'harris.m', on peut détecter tous les caractéristiques de coins.
La répression maximale non adaptative est aussi bien implémentée (fonction 'AdNMS.m'). 500 points d'intérêt sont présentés.
Sur chacun des points caractéristiques, on extrait des groupements de pixels de 8x8 par échantillonnant ces groupements de pixels sur une grande fenêtre de 40x40 afin d'avoir un descripteur légèrement flou. Évidamment, on l'a fait normaliser.(fonction 'descrip.m')
Pour trouver les paires de caractéristiques qui se ressemblent dans le but de les apparier, on effectue le calcul rapide des distances entre les descriptuers avec la fonction: 'dist2.m'. ALors pour le choix d'appariement, on utilise l'approche simple de Lowe sur le rapport entre le premier et le deuxième plus proche voisin(on a pris le seuil 0.56 dans le code).
Plus détails se retrouvent dans le code 'ransac_pr.m'.
Voici les résultats obtenus:
On a vu le résulta final est bien montré la mosaïque, même s'il y a des petit problèmes de couleurs. Une amélioration de fusionner les images reste à effectuer.
Apparaiement Automatique :Les points rouges sont des points obtenus par Harris et les jaunes sont sélectionnés par la méthode ANMS dans l'article.
Bien qu'il y a quand même des correspondances fautes, les points sont appariés correctement.Les résultats de la fançon automatique sont présentés :
Commentaires :
On a vu selon une direction de faire la mosaïque, il se semble correctement (panorama 1), mais si l'on fait projeter tous dans le centre, il y avait des effets artificiels (panorama 2). Cela peut être à cause du raison de la façon à fusionner les images. Pour Panorama 3, 'Out of memory' apparait...c'est donc seulement 2 mosaïques.
La figure Sonic ayant une borde blanche conduit à ce résultat...
Eiffel, ça, c'est effet!
Dans ce TP, on a bien compris le principle de la mosaïque. Mais ce n'est pas toujours évident à mettre en place...