TP1: Construction de Mosaïque

Début

Jeudi le 24 janvier 2007.

Remise

Jeudi 15 février 2007

Description

Plusieurs photos sont prises par une même caméra placée sur un trépied. La caméra ne subit aucune translation entre la prise des photos et seule la rotation change. L'objectif est la construction d'une mosaïque de façon la plus automatique possible.

La construction d'une mosaïque se fait en plusieurs étapes.

  • Prise de photo d'une caméra en rotation (nous vous fournissons les photos, mais n'hésitez à en prendre vous même aussi).
  • Détection de points saillants dans chacune des images et mise en correspondance.
    • Pour commencer, vous pouvez le faire à la main. Il en faut au moins 4 (utilisez un programme comme Gimp ou Photoshop).
    • Ensuite, vous devez utiliser les descripteurs SIFT. Le code est fourni ci-bas. ATTENTION, il y aura des erreurs dans les correspondances.
  • Calcul d'homographie entre les vues 0-1, 1-2, 2-3, etc. Donc vous aurez: H01,H12,H23.
  • Choisir une vue de référence. À vous de faire un choix judicieux.
  • Reprojeter les images sur le plan de référence en utilisant les homographies.
La relation (projective 2D) entre un plan i et j est

Pj Hij Pi, ou encore, Pi Hji Pj

Pour résoudre H, utilisez la comparaison entre deux points projectifs à l'aide du produit vectoriel.

Pj × Hij Pi, ce qui est une relation linéaire en les éléments de H

Pour la première série d'images, vous devez:

  • Trouver des points à la main (4 en premier, puis au moins 8)
  • Utiliser 4 points, sans normalisation.
  • Utiliser 4 points, avec normalisation.
  • Utiliser tous les points, sans normalisation.
  • Utiliser tous les points, avec normalisation.
Pour la deuxième série d'image, vous devez:
  • Utiliser le résultats du programme de correspondances par SIFT.
  • Utiliser tous les points, avec normalisation.
  • Utiliser l'algorithme robuste RANSAC pour trouver les correspondances qui sont valides et les homographies.
Comparez la qualité des homographies obtenues, en calculant l'erreur de reprojection et en montrant l'effet sur la mosaïque obtenue. Discutez de l'impact du choix de la position des points de correspondance.

Voici une première série d'images: 001.pgm, 002.pgm, 003.pgm):

Image 1 Image 2 Image 3

Voici à quoi votre résultat devrait ressembler pour la première série.

Un autre résultat, avec correction de couleur et distortion radiale (pas demandé pour le tp)

Voici une deuxième série:

Liens vers les images pleines résolution:

00001.jpg, 00002.jpg, 00003.jpg, 00004.jpg, 00005.jpg, 00006.jpg, 00007.jpg,

Mais les images qui ont servi à trouver les points automatiquement sont

001.pgm, 002.pgm, 003.pgm, 004.pgm, 005.pgm, 006.pgm, 007.pgm,

Les fichiers de correspondances sont:

match-001-002-math.data, match-002-003-math.data, match-003-004-math.data, match-004-005-math.data, match-005-006-math.data, match-006-007-math.data,

Mais vous pouvez les refaire si vous voulez. Pour la reprojection d'image, n'hésitez pas à réduire la taille des images (surtout si vous le faite en Mathematica). ATTENTION, il faudra ajuster les valeurs des correspondances.

Un résultat

Voici le programme qui trouve les points automatiquement et faisant des mises en correspondances. N'hésitez pas à le modifier si vous voulez. Ceci est essentiellement un script qui fait un appel à deux programme donné par le Professeur David Lowe, que nous avons modifiés légèrement pour nos besoins.

siftDemoV4.tar.gz,

Utilisation:

  • tar -xzf siftDemoV4.tar.gz
  • cd siftDemoV4
  • make
  • ./sift_match [source_images/] [% pour la mise a l'échelle, nombre entre 0 et 100]
Il ne fonctionne qu'en linux sur un ordinateur 32 bit, car nous n'avons pas le code source en entier :(

À remettre

  • Notebook mathematica pour calculer les homographies, avec les résultats et comparaisons.
  • La reprojection d'image peut être faite en C, mais il faut remettre le code. Les images obtenues doivent être placées dans le notebook avec les commentaires et résultats.