Majeure "Mathématiques et Informatique"
Enseignement d'approfondissement
"Images: Analyse et Synthèse"

Rendu a base d'images


Projet Réalisé par Radu Stefanescu (Programme Europeen, attache a la promo 97)


Description du projet

Ce projet s'appuie sur une technique qui permet de synthetiser des prises de vue d'une scene 3D a partir non d'une description geometrique de la scene mais d'une ou plusieurs prises de vue de la meme scene. Le plus important avantage de cette technique est la vitesse. Il n'y a pas de z-buffer et pas de calculs d'eclairage. En plus, le temps necessaire pour synthetiser une image est proportionnel a la dimension de l'image et non a la complexite de la scene. Ainsi, cette technique fonctionne particulierement bien pour des scenes de tres grande complexite comme les paysages qu'on a utilise ici. Si on maintient la dimension des images constante, alors on va avoir une frequence d'apparition des images constante, ce qui est tres bien quand il s'agit des animations ou de simulateurs. En plus, pour les scenes reeles, il y a le gros avantage de ne pas avoir besoin d'une reconstruction 3D complete de la scene, mais juste de l'information de profondeur de chaque pixel.
 

L'algorithme utilise

Le principe est tres simple. Si on a un point X dans l'espace reel et deux cameras avec les matrices de projection P1 et P2, alors X va correspondre a un point Y1=P1*X dans l'image obtenue par la premiere camera et a un point Y2=P2*X dans l'image obtenue par la deuxieme camera. La liaison entre les deux points Y1 et Y2 est Y2=P2*P1-1*Y1. La probleme est le fait que Y2 peut ne pas se trouver entre les limites de la deuxieme image. Alors, on va avoir des "trous" dans l'image de sortie.

Pour surmonter cette derniere probleme on utilise plusieurs images qu'on combine dans une structure de donnees nommee Layered Depth Image (LDI). La LDI est une matrice, pas de pixels (comme une simple image), mais de listes de pixels. Chaque liste contient les pixels qui se trouvent sur une certaine rayon de vue a des differentes profondeurs. Cette matrice est parcourue dans l'ordre donnee par l'algorithme de McMillan. Vous pouvez apprendre plus sur les LDI et l'algorithme de McMillan a http://www.research.microsoft.com/siggraph96/1998/ldi.htm.
 

Résultats obtenus

On a cree un programme qui prend comme donnees d'entree plusieurs images, leurs informations de profondeurs et les matrices de projections des cameras qui les ont pris. Il construit la LDI. En lui donnant deux matrices de projections il realise une interpolation en plusieurs pas entre les deux positions.

Voici un example:




Comme on peut voir, il y a encore quelques trous, surtout dans le cas des images dont la position de la camera est tres differente de la position de la camera de la LDI. La derniere image a ete prise par la camera de la LDI meme et donc elle est la meilleure.
 



Retour à la liste des projets réalisés