TP5 : Insertion d'objets virtuels

TP5 : Insertion d'objets virtuels

Claudia laramée


Description de l'algorithme implémenté

Construction de la carte de radiance HDR

J'ai commencé par prendre des photos d'une scène contenant le miroir sphérique à plusieurs temps d'exposition différents. je me suis basée sur le temps d'exposition "moyen" suggéré par ma caméra pour prendre une première photo de la scène. Ensuite, en choisissant le temps d'exposition "moyen" comme référence, j'ai pris deux autres photos de la scène en diminuant et en augmentant le temps d'exposition d'un même facteur. J'ai finalement retiré le miroir sphérique de la scène, puis j'ai pris une dernière photo avec le temps d'exposition "moyen". J'ai ensuite isolé le miroir sphérique dans chans chaque image en m'assurant de garder le même alignement de la sphère.

Dans Matlab, j'ai isolé les trois cannaux de couleur dans chacune des trois images de la sphère. J'ai ensuite répété les étapes suivantes pour chaque canal :

J'ai ensuite construit une matrice contenant les valeurs d'une série de 100 points contigus pour chaque temps d'exposition. Ensuite, j'ai défini la fonction de poid w(z) = double(128-abs(z-128)) tel que suggéré dans l'énoncé du travail. Ensuite, jai utilisé le code matlab de la fonction gsolve fourni à la fin de l'article "Recovering High Dynamic Range Radiance Maps from Photographs" de Debevec et Malik :

[g, LEi] = gsolve(Z,B, l, w)

où Z(i,j) correspond à la valeur du pixel à la position i pour l'image j, B(j) correspond au log du temps d'exposition de l'image j, l est une constante qui défini le niveau de "lissage" de g et w est la fonction définie plus haut qui sert à donner un poid à chaque valeur de Z en fonction de la valeur minimale et maximale de Z.

En paramètre de retour, j'ai obtenu la fonction g, où g(z) correspond au log de l'exposition du pixel qui a la valeur z et LEi qui correspong au log de l'irradiance du pixel à la position i.

Avec ces deux vecteurs, j'ai été en mesure de calculer la carte de radiance HDR de ma sphère en utilisant la formule présentée dans l'article de Debevec et Malik :

Pour la transformation panoramique de la sphère, j'ai construit un meshgrid allant de -pi à pi et de -pi/2 à pi/2 représentant ma sphère dans le domaine équi-rectangulaire. Dans cette nouvelle image, la largeur de l'image est égale à la longitude et sa hauteur est égale à la latitude en coordonnées sphériques.

Les coordonnées (x,y) de la sphère (normalisée entre -1 et 1, puisque nous assumons que le rayon de la sphère est 1) nous donnent directement les deux première coordonnées de notre vecteur normal. Pour trouver la troisième coordonnée, il suffit d'sioler z dans la formule : r^2 = racine (x^2 + y^2 + z^2).

Pour la suite, nous allons définir un système d'axes qui servira pour le reste des explications. Dans ce système, l'axe des z pointe vers la caméra, l'axe des y pointe vers le haut et l'axe des x pointe vers la droite. Sachant cela, on peut trouver que v = (0,0,1) pour tous les points de la sphère (voir la figure ci-dessous tirée des notes de cours).



src="images/est donc possible de trouver le vecteur réfléchi "r" à l'aide de la formule : r = v - 2(n*v)n donnée dans l'énoncé du travail. Une fois le rayon réfléchi trouvé, il ne reste plus qu'à convertir ses coordonnées cartésiennes en coordonnées sphériques.

Dans la cadre du travail pratique, plutôt que de transformer les coordonnées de la sphère vers les coordonnées de l'image équi-rectangulaire, je suis partie de chaque coordonnées de l'image équi-rectangulaire et j'ai fait l'inverse des opérations présentées plus haut afin de retrouver les coordonnées du vecteur normal associé à chaque position (longitude,latitude). J'ai finalement utilisé la fonction interp2 dans Matlab pour trouver les valeurs de chaque pixel de l'image équi-rectangulaire.


Résultats

Scène 1

Sphères

Temps d'exsrc="images/.6
Temps d'expositiosrc="images/tion>
Temps d'exposition : 1/6src="images/

Carte de radiance HDR

Transformation panorasrc="images/

Rendu d'objets synthétiquesrc="images/
Rendu avec les objets
Rendu sans les objets
Masque
Résultat final

Explication des résultats obsrc="images/

Pour la modélisation de cette scène, je me suis basée sur le fichier .blend fourni en exemple dans l'énoncé du tp. Comme on peut le voir sur la l'image du rendu sans les objets, je n'ai pas adapté le plan fourni pour qu'il couvre la totalité de la surface. J'ai simplement ajusté l'inclinaison afin de l'adapter à ma scène et j'ai redimensionné les objets déjà présents pour qu'ils puissent tous entrer sur le plan. Pour ce qui est des matériaux, j'ai gardé ceux par défaut dans le fichier .blend. Lors de ma première tentative de rendu, la scène était beaucoup trop sombre. J'ai donc ajusté la propriété "strength" à 1 pour obtenir le résultat présenté ci-dessus.



Scène 2

Sphères

Temps d'exposition : 1
Temps d'exposition : 4
src="images/e="border:3px solid #000000; display:block; margin-left:auto; margin-right:auto; margin-bottom:10px" src="images\IMGP2240_sphere.jpg" width="300" height="300"> Temps d'exposition : 1/4

Carte de radiance HDR

Transformation panoramique

Rendu d'objets synthétiques

src="images/ "float:left; width:300px ; margin-right:100px">
Rendu avec les objets
Rendu sans les objets
Masque
Résultat final

Explication des résultats obtenus

Pour la modélisation de cette scène, je me suis basée ssrc="images/r .blend fourni en exemple dans l'énoncé du tp. J'ai modifié le plan pour l'adapté à ma scène et j'ai supprimé tous les objets. Ensuite, j'ai trouvé un modèle de pile de livres sur internet. J'ai importé le modèle dans blender en conservant les matériaux de base et en modifiant seulement la couleur de la couverture des livres. J'ai aussi ajouté un cube grâce aux outils de modélisation de blender. Pour celui-ci, j'ai opté pour une surface de type "Glass BSDf" avec un facteur de "roughness" de 0.5 et une couleur bleu.