TP5: Insertion d'objets virtuels

GIF-7105 : Photographie algorithmique (Hiver 2015)

L'insertion dans une photographie d'objets artificiellement modélisés est une tâche complexe : pour que le résultat soit le moindrement probant pour l'oeil humain, il faut prendre en compte une myriade de facteurs, tels que les ombres, les réflexions, la transparence, les textures, etc. Dans ce travail, nous présentons une méthode permettant d'effectuer cette insertion en utilisant un panorama HDR (à haute plage dynamique) de la scène dans laquelle on souhaite insérer les objets. Cette méthode est d'abord présentée, suivi des résultats obtenus sur différentes scènes.

Présentation générale

La méthode utilisée peut se décomposer en trois étapes principales :

  1. Récupérer les caractéristiques de la scène (sources de lumière, ombres, objets environnants, etc.)
  2. Convertir ces caractéristiques en une représentation utilisable par des logiciels de modélisation 3D
  3. Utiliser un logiciel de rendu 3D tel que Blender pour insérer des objets dans la scène

Ces trois étapes sont expliquées plus en détail dans les sections suivantes, en utilisant un exemple pratique.

Récupération d'une image HDR de la scène

Supposons que l'on veuille insérer un objet virtuel dans l'image suivante :

Comme on peut le constater en observant les ombres, plusieurs sources de lumière sont présentes; les objets insérés devront être éclairés de manière à correspondre à ces sources lumineuses. De même, si un objet est réfléchissant, il devrait permettre de voir un reflet de l'objet situé à gauche de l'image (même si dernier n'est pas en soi présent dans la photo). Une des manières les plus simples de récupérer toute l'information sur la scène est d'utiliser un miroir sphérique, qui nous permet d'obtenir cette information en une seule photo supplémentaire. Dans l'image suivante, un tel miroir a été positionné au centre de la zone "libre" dans laquelle nous voulons ajouter des objets :


Dans un monde idéal, une telle image serait suffisante. Malheureusement, nous nous heurtons à un autre problème : l'appareil photo n'est pas capable de récupérer toute l'information de la scène à cause de la plage de sensibilité limitée de son capteur. L'image de droite, qui correspond à un agrandissement de la sphère sur la photo du dessus, montre bien ce problème. Certaines zones sont trop sombres et les pixels les composant très bruités. À l'inverse, les pixels correspondant aux sources de lumière sont saturés, ce qui forme des halos autour des lampes. Ces deux situations sont problématiques puisqu'elles limitent la quantité d'information perçue sur la scène, et, par conséquent, la qualité de l'insertion des objets virtuels.

Afin de palier ce problème, nous utilisons plusieurs images de la même scène, mais prises avec des temps d'exposition différents. La réduction du temps d'exposition diminue la quantité de lumière reçue par le capteur, ce qui "désature" les pixels trop exposés, au prix d'une augmentation du bruit dans les pixels sous-saturés. A contrario, l'augmentation du temps d'exposition diminue le bruit sur les pixels correspondant à des zones faiblement éclairées, au prix d'une saturation plus importante des pixels plus fortement éclairés.

L'idée est de parvenir à combiner un certain nombre d'images prises à différentes expositions afin de former une image à haute plage dynamique (HDR), à la fois nette dans les zones sombres et dans les sources de lumière.


Temps d'exposition (s) : 1/2

Temps d'exposition (s) : 1/3

Temps d'exposition (s) : 1/6

Temps d'exposition (s) : 1/13

Temps d'exposition (s) : 1/25

Temps d'exposition (s) : 1/50

Temps d'exposition (s) : 1/100

Temps d'exposition (s) : 1/200

Temps d'exposition (s) : 1/400

Temps d'exposition (s) : 1/800

Afin de composer cette image à haute plage dynamique, il nous faut déterminer la radiance de chaque pixel. La valeur du pixel dépend de cette radiance et du temps d'exposition :

Zij = f(Ei x Δtj)

En d'autres termes, la valeur du pixel i dépend du nombre de photons émis par seconde (la radiance, Ei) multiplié par le temps d'acquisition, le nombre de secondes d'exposition du capteur (Δtj). Malheureusement, même en ne considérant pas les bornes sur Zij -- en général Zij est compris dans l'intervalle {0, 1, ..., 255} -- la valeur du pixel n'est pas une fonction linéaire de l'exposition et de la radiance. Nous cherchons donc à retrouver cette fonction non-linéaire.

Afin de faciliter la résolution de ce problème, nous transformons légèrement l'équation précédente :

Zij = f(Ei x Δtj)

où g correspond à ln(f-1), cela afin de retrouver un système plus proche de la linéarité, la sensibilité des capteurs étant généralement logarithmique. Afin d'améliorer la performance de ce système, nous ajoutons une fonction de poids au pixel : plus un pixel est proche des extrémités de la plage du capteur (0 et 255), moins sa valeur est fiable puisqu'elle a plus de chances d'être bruitée ou saturée. Ainsi, la fonction de poids employée, une distribution triangulaire entre 0 et 255, accorde, pour chaque exposition, le poids le plus important aux pixels ayant une valeur de 127, puisque ce sont ces pixels qui sont le plus fiables, et un poids nul aux pixels dont la valeur se situe aux extrémités de la zone de sensibilité (notons toutefois qu'une procédure spéciale est prévue dans le cas où toutes les expositions seraient saturées pour éviter que tous les poids pour un pixel soient nuls). Au final, nous retrouvons une fonction g de ce type (la couleur de chaque courbe est celle du canal auquel elle correspond) :

Cette fonction devrait normalement être monotoniquement croissante, étant donné qu'une valeur de pixel plus élevée implique une radiance plus grande. Cependant, à cause du bruit et des erreurs de mesures (par exemple un temps d'exposition pas forcément exactement égal à la valeur demandée à l'appareil), de petites variations sont présentes. En pratique, cela ne pose pas de problème particuler, ces variations restant faibles par rapport à la tendance générale. Notons finalement que la fonction g est estimée indépendament pour chacun des trois canaux de couleurs, la sensibilité du capteur à ces trois canaux n'étant pas forcément exactement la même, comme on le voit dans le graphique.

Cette fonction estimée, il est par la suite possible d'appliquer cette transformation à l'ensemble des pixels afin d'obtenir une image à haute plage dynamique, comme dans l'exemple de gauche.

On remarque que l'entièreté de l'image est bien définie, tant dans les zones claires que sombres. Notons cependant que cette image est une reprojection en plage dynamique normale (LDR), nos écrans n'étant pas capables de rendre toute la plage dynamique de l'image HDR. Ainsi, en pratique, l'image HDR contient encore plus d'information que ce que l'on peut voir à gauche.


Conversion en coordonnées équirectangulaires

L'étape précédente nous a donc permis d'obtenir une image contenant toute l'information pertinente de la scène. Cependant, elle est dans un format relativement peu pratique : une partie de l'image (autour de la sphère) est tout simplement invalide puisqu'elle ne correspond pas à l'image miroir, et les pixels de la sphère ne représentent pas tous la même taille d'objet dans la scène (par exemple, les pixels situés sur le pourtour de la sphère correspondent tous au même point, celui situé exactement derrière celle-ci). Afin de pouvoir l'utiliser dans un logiciel de rendu 3D, il nous faut d'abord la transformer dans un format plus pratique nommé équirectangulaire, ou format latlong.

Pour ce faire, nous projetons d'abord chaque pixel de la projection équirectangulaire sur une sphère 3D de rayon unitaire (le rayon n'étant qu'un facteur d'échelle, sa valeur précise n'a pas réellement d'impact). Nous obtenons alors les coordonnées de chaque vecteur de réflexion sur la sphère. Pour trouver l'endroit où ce vecteur se réfléchit (et donc le pixel correspondant dans l'image originale de la sphère), nous recherchons le vecteur normal entre le vecteur réfléchi (calculé précédemment) et le vecteur source provenant de la caméra (fixé arbitrairement à [0, 0, -1]). Finalement, comme ces coordonnées ne sont pas forcément entières, une interpolation bilinéaire sur l'image de la sphère est utilisée.

L'image suivante montre la projection équirectangulaire de la sphère HDR présentée plus haut. Les points noirs au centre de l'image correspondent à l'arrière de la sphère : la prise de vue n'étant pas idéale, la caméra n'est pas orthographique. Par conséquent, certains points derrière la sphère sont invisibles, et ne peuvent donc être reproduits en projection équirectangulaire. Une manière simple d'éviter ce problème serait de dupliquer les pixels bordant la sphère, mais ce n'est pas nécessaire pour produire de bons résultats, comme nous le verrons subséquemment.


Insertion d'objets

Les étapes précédentes nous ont permis de récupérer une carte d'environnement de la scène, à haute plage dynamique et dans un format standard. Il nous reste maintenant à utiliser cette carte pour insérer des objets virtuels dans notre image d'origine. Pour ce faire, quatre images sont utilisées : l'image d'arrière-plan voulue, une image ne contenant que les surfaces sur lesquelles les objets virtuels seront "déposés" (un simple plan en général), un masque des objets virtuels et une image contenant les objets rendus à l'aide d'un logiciel de rendu 3D tel que Blender. Les images suivantes montrent un exemple de cette séquence d'images nécessaire :


Image source d'arrière-plan (Ia)
Géométrie de la scène rendue à l'aide de la carte d'environnement HDR (Ig)
Masque des objets ajoutés (M)
Objets rendus à l'aide de la carte d'environnement HDR (Io)

Par la suite, nous pouvons composer une image finale à l'aide de l'équation suivante :

If = M*Ir + (1-M)*Ia + (1-M)*(Ir-Ig)*c

En d'autres termes, l'image finale correspond à l'image d'arrière plan lorsqu'aucun objet n'est ajouté, et à l'image rendue lorsque c'est le cas. Le dernier terme permet d'ajouter les ombres des objets, en faisant intervenir l'image de la géométrie de la scène : les ombres sont simplement la différence entre l'image rendue avec les objets, et celle rendue sans ceux-ci (avec seulement la géométrie). Un facteur c permet de déterminer la force de ces ombres. Au final, l'image rendue est la suivante (après avoir manuellement ajusté c à 2.5) :

Pour chacune des quatre scènes dans laquelle des objets ont été ajoutés, nous présentons :

  1. La fonction g calculée à partir des diverses images du miroir sphérique
  2. L'image HDR du miroir sphérique (ramené en LDR afin de permettre son affichage à l'écran)
  3. La carte d'environnement projetée en équirectangulaire (lat-long)
  4. L'image des objets virtuels, ainsi que le masque de ceux-ci
  5. L'image finale générée, avec les objets virtuels insérés
  6. Une analyse des résultats et des explications accompagnées d'exemples complémentaires

Résultat obligatoire #1

A) Fonction g calculée et B) image HDR du miroir sphérique

C) Carte d'environnement HDR en projection équirectangulaire

D) Image des objets virtuels et masque

E) Image finale avec les objets virtuels

F) Analyse et explications

Les matériaux et couleurs utilisés dans cette scène sont divers afin de bien montrer les différents effets de lumière possibles. La géométrie de la scène a été estimée par un simple plan, aligné à l'oeil avec la surface du bureau.

Le rendu est globalement bon et assez réaliste. Le principal problème provient des ombres, qui se voient "coupées" à l'endroit où le plan utilisé pour simuler la géométrie de la scène arrête, comme le montre l'image ci-contre, découpée à un endroit particulièrement problématique. Cependant, le reste est bien rendu : en particulier, la sphère miroir virtuelle montre que l'environnement est fidèlement reproduit, puisqu'on y retrouve les sources de lumière et le photographe! La direction des ombres est également bonne, et correspond à celle que l'on peut observer avec le clavier. Au final, en dehors de la taille des objets, et de leur incongruité, il est difficile de voir qu'ils sont artificiellement insérés.


Résultat obligatoire #2

A) Fonction g calculée et B) image HDR du miroir sphérique

C) Carte d'environnement HDR en projection équirectangulaire

D) Image des objets virtuels et masque

E) Image finale avec les objets virtuels

F) Analyse et explications

Les matériaux et couleurs utilisés dans cette scène sont les même qu'à l'image précédente, le but étant de voir le comportement de la méthode avec une carte d'environnement très différente. La géométrie de la scène a encore une fois été estimée à l'aide d'un plan, qui s'adapte bien à la table.

La luminosité environnante est encore une fois bien rendue. Par rapport à l'image précédente, on remarque que le nombre de sources de lumière est plus réduit, et concentré sur une bande horizontale, ce qui, en réduisant les ombres, élimine le problème des ombres coupées aux bordures de la scène. En observant attentivement le rendu final, on peut cependant constater un autre problème : la surface de la table comporte une composante spéculaire (on peut par exemple voir un reflet du mouchoir orange sur la table). Or, les objets insérés ne tiennent pas compte de cela, puisque la table n'est pas modélisée en soi -- on l'utilise seulement pour paramétrer la géométrie de la scène. Par conséquent, le manque de reflets réduit le réalisme du rendu. L'image de gauche montre un agrandissement d'une zone problématique à cet égard.

Il y a plusieurs possibilités pour régler ce problème. L'une des plus simples est d'ajouter une composante spéculaire au plan formant la géométrie de l'image pour restituer (au moins partiellement) l'effet de réflexion dans la table, effet qui peut alors être ajusté conjointement avec la force des ombres. Le problème dans ce cas-là est de modéliser la force de la composante spéculaire voulue, qui doit être fait par essai/erreur, avec le paramètre c de l'équation de composition. Par ailleurs, cette méthode ne fonctionne pas dans le cas où un objet transparent ou translucide recouvre un reflet, puisque ce reflet serait alors supprimé par le masque des objets. Toutefois, dans ce cas particulier, cette approche donne de bons résultats, comme le montre le rendu suivant, où une composante spéculaire a été ajoutée au plan de la table. La comparaison avec l'image du rendu présenté plus haut est sans équivoque : le rendu plus bas est bien plus réaliste.


Résultat additionnel #3

A) Fonction g calculée et B) image HDR du miroir sphérique

C) Carte d'environnement HDR en projection équirectangulaire

D) Image des objets virtuels et masque

E) Image finale avec les objets virtuels

F) Analyse et explications

Dans cette image, les matériaux utilisés sont plus communs, mais les objets plus complexes. En plus d'un miroir en forme de tore, deux modèles de plantes sont rendus, l'une avec une texture diffuse, et l'autre avec une texture plus spéculaire. Dans les deux cas, l'ombre générée par certaines feuilles s'applique non seulement sur la table, mais sur d'autres feuilles également, ce qui complexifie le rendu.

Cette image contient beaucoup d'ombres. Afin d'éviter que, à l'instar du premier résultat, le problème des ombres débordant de la zone de rendu soit présent ici, nous avons minimisé dans ce cas-ci la portée du problème en utilisant un polygone plutôt qu'un rectangle pour estimer la géométrie, ce qui a permis de l'étendre aux dimensions de la table. Il est à noter que cette solution ne fonctionne que dans des cas comme ceux-ci, où la scène est réellement un plan. Par l'exemple, dans l'image #1, utiliser cette approche aurait fait en sorte que le clavier aurait été considéré comme faisant partie de la table, et donc soumis aux mêmes ombres de la part des objets virtuels insérés. Il aurait alors fallu modéliser une géométrie plus complexe qu'un simple plan.

Un autre élément problématique dans le cas de ce rendu est la source de lumière éclairant la scène : le Soleil, de façon directe. Cette source de lumière est tellement intense qu'elle sature systématiquement le capteur, même à un temps d'exposition de 1/2000e de seconde, avec une sensibilité de 100 ISO et l'ouverture la plus petite possible... Par conséquent, notre carte d'environnement HDR est incomplète : elle sous-estime l'intensité de cette source lumineuse. Un des effets de cette erreur de modélisation est que les ombres sont beaucoup moins définies qu'elles ne le devraient : au lieu de voir le Soleil comme une source ponctuelle, le rendu considère l'entièreté de la fenêtre comme une source lumineuse (on peut le voir sur le miroir toroïdal), ce qui diffuse beaucoup plus les ombres. L'image de gauche montre la différence entre l'ombre (réelle) de la sphère et l'ombre modélisée pour un objet virtuel similaire. Bien que le rendu projette les ombres dans la bonne direction, leurs formes sont incorrectes. Dans ce cas-ci, augmenter le facteur c de l'équation de combinaison des images ne servirait à rien, puisque le problème n'est pas seulement l'intensité de l'ombre, mais aussi sa dispersion. Il n'y a pas énormément de possibilités logicielles pour régler ce problème, le plus simple étant encore d'adapter le matériel, par exemple en utilisant un filtre solaire ou en employant un appareil capable d'une vitesse d'obturation encore plus courte.


Résultat additionnel #4

A) Fonction g calculée et B) image HDR du miroir sphérique

C) Carte d'environnement HDR en projection équirectangulaire

D) Image des objets virtuels et masque

E) Image finale avec les objets virtuels

F) Analyse et explications

Avant d'analyser les résultats, il faut noter une première chose : les photos de la sphère réfléchissante ont été prises trop loin (ou avec un FOV trop grand, si on préfère), ce qui fait en sorte que la sphère fait environ 150x150 pixels. Cette taille est plutôt faible pour l'estimation de la carte d'environnement, même si c'est néanmoins possible. On peut d'ailleurs constater que la projection équirectangulaire de la carte d'environnement est bien plus floue que les autres. Cela conduit à certains problèmes de précision, en particulier dans les objets miroir, même si, au vu des résultats, le problème ne semble pas majeur.

Pour cette image, nous avons sélectionné principalement des matériaux transparents, afin de voir comment se comporte la méthode lorsqu'elle doit gérer des objets comme des verres. Un miroir sphérique virtuel a également été inséré afin de valider la carte d'environnement. La géométrie de la scène est encore une fois classique, même si le point de vue quelque peu atypique par rapport au bureau nous a forcé à prendre en compte les effets de perspective pour aligner le plan des objets virtuels avec le bureau; le résultat n'est pas parfait, on le voit en particulier avec la figurine Mario, qui semble trop penchée vers l'avant.

Par ailleurs, on peut remarquer un problème particulier avec certains objets transparents : bien qu'ils semblent effectivement être transparents et que les objets virtuels situés derrière un autre objet virtuel transparent soient bien rendus (par exemple la coupe bleue derrière la coupe rouge), l'arrière-plan n'apparaît quant à lui pas dans les objets transparent (par exemple la coupe bleue elle-même). Cela peut s'expliquer par le fait que la carte d'environnement est valide uniquement à la position où la sphère miroir a été photographiée. Tout déplacement ailleurs dans l'image entraînera une erreur proportionnelle à la magnitude du dit déplacement. De manière générale, cela ne pose pas beaucoup de problème pour le photoréalisme. Par exemple, la distance de déplacement par rapport à la position de la sphère originale est généralement négligeable par rapport à celle aux sources lumineuses, et le rendu reste alors valide, à tout le moins pour un regard humain. Cependant, dans le cas de la transparence, l'objet réel derrière doit être parfaitement aligné avec sa représentation en transparence dans l'objet virtuel. Dans ce cas-ci, on peut le voir sur l'image ci-contre, c'est bien le clavier qui rendu en transparence dans la coupe, mais pas la bonne section, ce qui cause une impression d'étrangeté lorsqu'on l'observe attentivement. Ce problème étant dû à la méthode en elle-même, il n'y a pas beaucoup de façons de le résoudre, si ce n'est en s'assurant de poser les objets le plus près possible de l'endroit occupé par la sphère.

On retrouve également le même problème qu'avec l'image #2 : un bureau partiellement réfléchissant, que notre méthode ne permet pas de modéliser. Les ombres sont par contre très bien rendues, y compris les ombres "transparentes" des verres. Il faut par contre augmenter le facteur c lors de la composition pour obtenir un tel résultat. Le résultat présenté utilise c=4. À titre comparatif, l'image générée avec un facteur c égal à 1 est présentée plus bas.


Cliquez pour une image en plus haute définition.