IFT6145 - Vision 3D
Travail Pratique 2 : Stéréoscopie
Début
- jeudi 23 février 2005
Remise
- ~2 1/2 semaines
Partie 1 - Fonction de cout
Vous devez creer un programme en C qui fait les fonctions suivantes:
- Lire un fichier de description de scene
- Un fichier .cameras contient la definition des cameras et le choix des images. Voici deux exemples: scene.cameras et standard.cameras
- Lire (et executer) un fichier de description de commandes
Un fichier .commandes contient des commandes a executer. Voici un exemple: test.commandes
Vous devez absolument:
- Implanter la gestion des cameras/images/projection/fonctions de cout
dans un module independant.
- Implanter la lecture/execution du fichier de commande (.commandes) dans un programme principal different du module precedent.
- Pensez que dans la partie 2, vous devrez lire un fichier de camera et appeller des fonctions pour calculer les couts sur des intervalles. Donc faites de fonctions...
Notes
- On permet de representer la profondeur par z ou 1/z. Mais dans vos affichages, vous pouvez vous limiter a la disparite (1/z). Bref, on ne vous donneras jamais un z=0 (donc 1/z sera toujours valide). Par contre, on pourrait vous donner un z infini (1/z=0). Bref, affichez la disparite..
- Vous pouvez transformer les images en d'autres formats que .pgm si vous le souhaitez. Mais la librairie img.c utilise le format .pgm.
Fonction de cout
La seule fonction de cout a implanter pour l'instant est la variance (et le nom est "variance") des intensites reprojetees.
Evaluation
- Vous remettre un programme qui fonctionne et que je peut compiler sur Linux (pas de Visual C++ ou autres bidules non-standard).
- On execute votre programme en lui donnant simplement le nom d'un fichier de commandes dans les arguments de la commande. Exemple: montp2p1 test.commandes
- Vous ne devez par "hard-coder" des noms de fichiers, des images, etc...
- Vous pouvez diviser votre code autrement que ce que je suggere, a condition que ce soit raisonnable. Il est strictement interdit de me remettre un seul gros morceau de code indechiffrable.
- Utilisez le langage de votre choix. Ma preference: C. Si vous utilisez le C++ ou Java, faites en sorte que votre code ne soit pas trop horrible.
Partie 2 - Mise en correspondance
Regardez l'exemple 1 (tsukuba) et implantez la commande stereod telle que décrite.
Présentation des résultats
Je donnerai bientot des exemples de fichier .cameras et .commandes a executer.
Librarie C et exemple complet
Librarie pour lire, sauvegarder, interpoler, etc... des images.
Exemple 1 - Tsukuba
Les fichiers:
tsukuba.commandes,
tsukuba.cameras
Les images: tsukuba
Note: une nouvelle commande doit etre implantée:
stereod rd variance 2 -15 0 16 sortieRD
stereod dp variance 2 -15 0 16 sortieDP
Cette commande roule un algorithme "rd" (recherche directe) ou "dp" (programmation dynamique) avec une fonction de coût "variance", avec la caméra 2 comme référence, et un intervalle -15..0 en 16 étiquettes.
La sortie va dans le fichier "sortieRD.pgm" ou "sortieDP.pgm".
Exemple 2 - Dodecahedre
Les fichiers:
dode.commandes,
dode.cameras
Les images: dode_img
Tous les fichiers en format archive: dode.tgz