Majeure " Algèbre, Informatique et Applications"
Enseignement d'Approfondissement " Géométrie et Synthèse d'Images"

Rendu à base d'images


Projet Réalisé par Adrien Missemer (promo 00)


Description du projet

    Le rendu à base d'image est une technique qui permet de synthétiser des prises de vue d'une scène 3D à partir d'autres prises de vue. On n'utilise pas d'informations sur la géométrie de la scène, l'éclairage, etc. Le principal intérêt de cette technique est que le temps de calcul d'une prise de vue ne dépend pas de la complexité géométrique de la scène, mais seulement de la taille de la structure qui contient les données. On l'utilisera donc lorsque que l'on travaille avec des scènes très complexes dont on veut avoir des prises de vues à partir de points rapprochés. Typiquement cette méthode permet de se déplacer à l'intérieur du cockpit virtuel d'un avion dans un simulateur par exemple.
    La reconstruction nécessite 2 types d'informations en plus des images de départ :

Algorithmes utilisés

Le principe de base est simple : on connait les trois coordonnées d'un pixel X1 dans l'espace image, ainsi que la matrice de projection P1 qui fait passer de l'espace objet à l'espace image. Ce pixel correspond à un point X=P 1-1 X 1 de l'espace objet. Donc dans une nouvelle prise de vue, par une caméra dont la matrice de projection est P 2 , le pixel a pour coordonnées X2 =P 2 P1 -1 X 1 . Pour obtenir une image avec un nouveau point de vue, il s'agit donc d'appliquer à tous les points la matrice P 2 P 1 -1. Le fait que la matrice multiplicatrice soit la même pour tous les points permet toutes sortes d'optimisations. Notamment l'utilisation de l'accélération graphique lorsque la carte graphique le permet, par l'intermédiaire d'OpenGL.

On remarque cependant assez rapidement que des trous apparaissent, dans les zones qui étaient cachées dans l'image de départ. C'est pourquoi on va vouloir utiliser plusieurs images sources. Pour ne pas multiplier le temps de calcul par n le nombre d'image, on regroupe ces informations dans une unique image à plusieurs couches de profondeurs (Layered Depth Image ou LDI - pour plus d'informations voir LDI ), qui est une vue de la scène à partir d'un seul point de vue, mais avec plusieurs pixels à différentes profondeurs sur chaque ligne de vue. La taille de cette image est proportionnelle à la complexité de la scène en terme de profondeur (nombre moyen de points par ligne de vue).
Outre le gain en espace et en temps, un intérêt des LDI est la possibilité d'utiliser l'algorithme de McMillan pour afficher les points dans un ordre compatible avec les faces cachées.

Résultats obtenus

Dans un premier temps, on a cherché à obtenir une solution rapide. Pour cela, une fois la LDI construite, les points sont stockés dans un tableau linéaire une fois pour toutes. Pour chaque nouveau point de vue, on stocke la matrice de transformation P 2 P1 -1 dans la carte graphique et on fait afficher tous les points, en utilisant un z-buffer. On obtient, avec une carte accélératrice 3d, environ 10fps, ce qui permet facilement de naviguer dans la scène. La première image est l'image de base. Dans la seconde, la caméra est décalée. On voit apparaître des zones en noires correspondant à une absence d'information.
image image  

Si on s'approche du modèle, on va voir apparaître un deuxième défaut, inhérent à la technique de rendu (cf. partie suivante) :
image image

C'est pourquoi, dans un deuxième temps, on a cherché à obtenir un résultat ayant une qualité sensiblement meilleure, au prix du temps de calcul. Avec le même point de vue que dans l'image précédente, on complète l'image de façon acceptable.
image

Dans ce mode de rendu, les capacités d'accélération graphique sont moins évidentes à utiliser. On remplace le z-buffer par l'emploi de l'algorithme de McMillan (McMillan ). On n'obtient plus qu'une image par seconde sur un duron 800. L'image de sortie est légèrement pixellisée et floue (si on la regarde en zoom 1:1), mais cela est dû à l'échantillonnage des données qui ne permet pas d'avoir la précision souhaitée partout.

Problèmes rencontrés et solutions apportées



Retour à la liste des projets réalisés