TP4: Stéréo

Début

Lundi 4 avril 2011.

Remise

Lundi 25 avril 2011.


Première partie : Mise en correspondance


Vous allez implanter trois méthodes stéréo pour effectuer la mise en correspondance d'images rectifiées :
  1. méthode WTA (winner takes all)
  2. programmation dynamique PD
  3. optimisation de scanlines SO
Les données que vous utiliserez sont celles de Middlebury. Pour chaque paire d'images stéréo, il y a en plus la carte de disparités de référence (groundtruth). Chaque carte de référence représente la disparité entre chaque pixel de l'image de référence (l'image de gauche) et l'autre image, à un facteur multiplicatif prêt (il sera expliqué un peu plus bas).



Image de référence
Image correspondante
Carte de disparités de référence
Facteur multiplicatif
Teddy
Teddy : im2
Teddy : im6
Teddy : disp2
4
Cones
Cones : im2
Cones : im6
Cones : disp2
4
Art
Art : view1
Art : view5
Art : disp1
5
Venus
Venus : im2
Venus : im6
Venus : disp2
8
Tsukuba
Tsukuba : im3
Tsukuba : im3
Tsukuba : im5
8


Par exemple, pour la paire Teddy, le facteur multiplicatif est 4, donc la carte de disparité donne les disparités de référence sur 8 bits (valeurs entre 0 et 255), mais les vraies disparités sont 4 fois plus petites. L'intensité 0 est utilisée pour représenter une disparité manquante (souvent une occlusion), donc l'intervalle réelle de disparités est [1-255]/4 -> [0.25-63.75]. Par conséquent, votre algorithme devrait utiliser l'intervalle D=[0-64] pour faire la recherche.

Toutes les données sont disponibles dans l'archive : images.


Pour chacune des méthodes, il sera possible de choisir la fonction de coût utilisée parmi :
  1. somme des différences aux carrés : SSD
  2. somme des différences absolues : SAD
  3. somme des différences aux carrés tronquées : SSD_trunc (prend un paramètre supplémentaire : le seuil)
  4. somme des différences absolues tronquées : SAD_trunc (prend un paramètre supplémentaire : le seuil)
  5. fonction insensible à l'échantillonnage Birchfield-Tomasi : BT
  6. fonction de coût CENSUS
De plus pour la méthodes d'optimisation de scanlines, il sera possible de spécifier la fonction de lissage parmi :
  1. somme des différences absolues : SAD
  2. somme des différences aux carrées : SSD
  3. somme des différences aux carrés tronquées : SSD_trunc (prend un paramètre supplémentaire : le seuil)
  4. somme des différences absolues tronquées : SAD_trunc (prend un paramètre supplémentaire : le seuil)
  5. modèle de Potts

Votre programme devra donc permettre le choix de la méthode, et de la fonction de coût (et si il y a lieu d'un seuil), et la fonction de lissage (si il y a lieu). Bref, vous devez permettre d'une manière ou d'une autre de choisir les fonctions parmi les listes précédentes (comme un argument en ligne de commande, comme un paramètre dans un fichier de config xml, ...). Joignez un fichier README qui explique comment faire pour spécifier ces paramètres.

Vous comparerez les résultats que vous obtenez avec la carte de disparité en utilisant la fonction T(d) :
T(d) = sumx∈X (|D(x)-Dref(x)| > d) / |X|
qui calcule le pourcentage de pixels dont la disparité trouvée différe de la vraie disparité de plus que d (|X| est le nombre de pixels pour lesquels la disparité est disponible) : c'est le pourcentage de mauvais matchs. Ignorez les régions pour lesquelles la disparité dans la carte de références sont inconnues (i.e leur valeur est 0).

Vous devrez discuter dans un rapport des effets des différentes fonctions de coût sur vos résultats pour chaque méthode. Pour les méthodes semi-globales, discutez de l'effet des fonctions de coût indépendemment des fonctions de lissage choisies. Vous discuterez aussi de l'effet de la constante de lissage (λ) pour SO et de K pour DP.

À remettre

  • Remettre votre code source C/C++ et/ou Mathematica, ainsi qu'un fichier (HTML par exemple) contenant vos résultats et discussions.
Modifié le: mardi 5 avril 2011, 10:44