TP2: Calibrage de caméra

Début

Lundi 7 février 2011.

Remise

Lundi 7 mars 2011.


Attention: Bien que certaines données fournies pour ce travail pratique soient inclues dans des notebooks Mathematica, vous êtes libres d'implémenter votre travail en Mathematica ou C/C++. Cependant, l'utilisation de fonctions OpenCV de calibrage est interdit, sauf si vous voulez comparer vos résultats.

Partie 1 : Calibrage avec un objet 3D (7 points)

Vous devez calibrer la caméra pour différents modèles:

  • perspective (retrouver K, R, et c à l'aide de la décomposition RQ)
  • affine

Calculez la matrice P à partir des quatre ensembles de points donnés plus bas. Les points p1,p2,p3,p4 sont les points 2D et les points q1,q2,q3,q4 sont les points 3D correspondants.

Vous devez:

  • présenter, pour chaque ensemble de données, la caméra obtenue ainsi que les points 3D (voir afficheCam.nb). Pour l'affichage, vous pouvez supposer que les images sont de taille 256x256 et que le centre est (128,128).
  • expliquer pourquoi vous pensez que la camera est perspective ou affine.
  • calculer l'erreur de reprojection pour chaque méthode (1,2) et chaque ensemble de points (1,2,3,4). Présentez les erreurs dans un tableau.
  • tenter certaines hypothèses sur les paramètres internes (ex.: fx = fy) et vérifier si cela est raisonnable en vous basant sur l'erreur de reprojection.
  • expliquer brièvement les différences (si il y en a) entre les résultats obtenus pour les méthodes de calibrage et aussi entre les 4 ensembles de points.

Attention: la distance focale peut varier d'une caméra à l'autre.

Les données sont dans calib3DData.nb. Il n'y a pas d'erreurs de correspondance.

Partie 2 : Calibrage par plans (8 points)

Description

Plusieurs photos sont prisent d'un même plan de calibrage, sous des angles différents. Les paramètres internes de la caméra ne changent pas entre les vues. Seuls la rotation et la translation changent.

Voici les images:
0.png
data/calibdata0
1.png
data/calibdata1
2.png
data/calibdata2
3.png
data/calibdata3
4.png
data/calibdata4
5.png
data/calibdata5
6.png
data/calibdata6

Les fichiers de données contiennent les points mis en correspondance. Les deux premiers points sont les coordonnées (x,y) du point en pixel dans l'image, et les deux suivants sont les coordonnées (x,y) en centimètres sur le plan de calibrage. Par exemple, pour l'image 0, la première paire de points est (91.022861, 243.270896) dans l'image et ( -6.3, 6.3 ) sur le plan de calibrage.

Vous pouvez utiliser le notebook calibPlanData.nb pour lire les données.

Vous devez:

  • trouver les 7 homographies H0, H1, ..., H6 reliant les 7 images avec le plan de calibrage c :
    • utilisez dans un premier temps les points fournis et la méthode linéaire
    • ajoutez ensuite du bruit et des outliers, et utilisez la méthode robuste RANSAC du tp1
  • calculer l'erreur de reprojection.
  • utliser l'image de la conique absolue ω pour récupérer les paramètres internes (matrice K) :
    • à l'aide de la décomposition de Cholesky
    • à l'aide de la décomposition directe (paramétrisation des 5 degrès de liberté de ω)
  • récupérer, pour chaque image, la rotation R et translation T.
  • illustrer graphiquement le plan de calibrage dans le monde et les 7 caméras ensembles (voir afficheCam.nb). Seul le plan (avec des points dessus) et les caméras sans les points images sont requis.

À remettre

  • Si vous utilisez Mathematica, remettre votre notebook contenant vos résultats et discussions.
  • Si vous utilisez C/C++, remettre votre code source, ainsi qu'un fichier (HTML par exemple) contenant vos résultats et discussions.
Modifié le: mardi 22 février 2011, 10:05