Travaux pratique #5 par Philippe Babin

Convertir les images capturées en HDR (main_00_hdr.m)

Explications

L'algorithme pour généré les images HDR à partir d'une série d'image est le suivant:

Commentaires sur les résultats

On peut voir dans les images et dans la courbe de g(z) que l'image est particulièrement bleue. La lumière possède une forte teinte bleu. Le lamdba à dû être augmenté à 100 pour avoir une courbe lisse. La reproduction tonale montre bien l'HDR en action on peut voir que la source de lumière principal reflété par la boule n'est pas saturé. L'image à 1/15 qui possède un contraste similaire à l'image HDR à quant à elle une source de lumière saturé.

La deuxième scène possède deux sources de lumière: une rougeâtre provenant de derrière la caméra et une autre bleu provenant d'une fenêtre. Malgré deux sources de lumière, la photo est très sombre. Je n'aurai pas du prendre cette photo avec le trépied visible, puisqu'à de lent temps d'exposition mes mouvements causent un flou au centre de l'image. La courbe de g(z) est très lisse et est presque pareil pour chaque canal de couleur. L'image HDR résultante est très sombre, mais on peut clairement voir les détails et la source de lumière.

La troisième scène a été prise dans une pièce avec une lampe comme seul source de lumière. Je n'ai pas pris une image à 1/240s, cela entraine que la lampe de la pièce est toujours saturé même dans l'image la plus sombre. La reproduction tonale est raté suite à cette erreur.

La quatrième scène a été prise dans la même pièce que la première. Comme cette dernière la courbe du bleu est différente des deux autres couleurs, mais plus lisse que dans la première image.

Images utilisées Courbe de g(z) Résultat
Cliquez pour agrandir

(Respectivement 1, 1/4, 1/15, 1/60 et 1/250)

(.hdr)

(Respectivement 10, 2, 1/2, 1/6, 1/25 et 1/100)

(.hdr)

(Respectivement 13, 2, 1/2, 1/4, 1/15 et 1/60)

(.hdr)

(Respectivement 1, 1/4, 1/15, 1/60, 1/250 et 1/1250)

(.hdr)

Rendu d'objets synthétiques dans des photos (main_01_composition.m)

\!/ Note pour correcteur \!/: Les photos de la première et quatrième scène ont été utilisé aussi par Émile Lévesque et David Cormier. Bien que nous avons utilisé les même photos sources, la carte HDR et la synthèse des images ont été fait chacun de notre côté.

Explications

Le champs de vue de la caméra de synthèse a été calculé de la manière suivante:

FOV = 2 x atan((largeur CCD en mm) / (2 x Focal en mm )) 

Telle que mientionné dans ce video, j'ai installé le mode filmic-blender pour augmenter le dynamic range de Blender et donc avoir des couleurs plus naturelle

La première scène a été difficile à réalisé. La subtile réflectivité du plancher de bois a été difficile à reproduire dans Blender sans conserver l'ombre des objets. Un mélange de Glossy BSDF et de diffuse BSDF ont été utilisé pour donner un sol réaliste. Pour le dessin de la scène, il a suffit d'avoir un plan qui suit les lignes du plancher.

La deuxième scène présente deux pneus en caoutchouc jouet. La partie difficile de cette synthèse était d'avoir une forte ombre sur l'objet, mais que cette ombre garde la couleur rougeâtre. La lumière provenant du couleur est rouge et est moins forte que la lumière blanche provenant de la fenêtre. J'ai dû rajouter une source de lumière supplémentaire pour renforcir la lumière de la fenêtre. La texture de caoutchouc a été difficile à reproduire, j'ai dû utilisé les nodes suivantes pour réaliser la texture finale:

La troisième scène représente une figurine de xkcd 3d printed et son clone de synthèse. Le modèle peut être trouvé ici. La partie difficile de cette scène était de reproduire la texture du filament 3d printed. Ce matériel est à la fois translucide, diffut et transparent. De plus, le matériel n'est pas lisse, il possède de multiple crevasse. La texture a été reproduit avec les nodes suivantes:

La quatrième scène présente 2 bouteilles de Coca-Cola en verre. Une partie subtile de la scène est que la table en bois est légèrement réflective, il a fallut reproduire cette réflection. Aussi, le mask des objets n'est pas parfaitement blanc, afin de laisser une partie de l'image traverser le verre. La partie difficile de cette scène a été déliminer les réflections parfaites du verre. En utilisant un matérial parfaitement transparent, on découvre que de large partie de l'objet devienne parfaitement noir puisqu'aucune lumière rebondit sur cette partie de l'objet. Pour atténuer cette effet il faut utilisé les nodes suivantes:

Commentaires sur les résultats

La première scène a des ombres trop réflective si on le compare au vrai objet. Le reste de la scène est assez réaliste.

La deuxième scène est très réussi. L'ombre de l'objet est très réaliste et la réflection du pneu est assez réaliste.

La troisième scène est ma préféré. On peut voir la vraie figurine à coté de la fausse et la ressemblance est frappante. La seule erreur visible est que socle de la fausse figure est un peu trop épaisse.

La quatrième scène n'est pas très réussit. Le verre ne réflète pas assez la scène. Il y aurait fallut une carte HDR pour l'arrière de la scène.

Scène originale
Cliquez pour agrandir
Résultat
Cliquez pour agrandir
Rendu Rendu plan Mask




Projection sphérique (main_02_tf_spherical.m)

Explications

Comme pour tous les types d'homogaphie, il faut faire la transformation de l'image de destination vers l'image source pour généré l'image. Tous d'abord il faut convertir nos coordonnées phi et théta en vecteur R de réflection. Si on fait un peu recherche on tombe sur ses équations:

Par contre, cette conversion ne marche pas pour notre type de transformation, elle génére une projection de type Cassini. Il faut voir la projection Cassini comme une cible de dart et la projection que nous essayons de généré comme une série de tranche. Avec Cassini, nous avons une singularité au centre de la sphère. Avec notre projection, nous avons une singularité au sommet de la sphère et au dessous de la sphère.

Cassini Notre projection

Pour avoir la bonne conversion, il faut échanger y et z pour obtenir cela:

Ensuite pour trouver la position du pixel sur l'image de la sphère à partir du vecteur R, il suffit de faire le calcul suivant:

 
m = 2 * sqrt(Rz.^2 + Ry.^2 + (1 + Rz).^2)
x = width*(Rx./m + 0.5)
y = hidth*(Ry./m + 0.5)

Après cela, interp2 s'occupe de généré notre image finale.

Commentaires sur les résultats

Dans toutes les images, on peut observer une discontinuité au centre de l'image causé par la singularité.

Le premier résultat est pareil à l'exemple fournie par le professeur dans l'énoncé de 2015.

Le second résultat utilise le célèbre dessin de Escher et montre la projection du contenu de la chambre. On peut voir le détaille que l'artiste a mis dans le dessin de l'image. Il est intéressant d'observer comment la projection Cassini conserve la main de l'artiste, mais que notre projection déforme celle-ci.

Le troisième résultat est difficile à voir, puisque la sphère n'est pas très lisse. Il est intéressant d'observer comment la projection Cassini conserve l'escalier, mais que notre projection déforme celle-ci.

Sphère Projection Projection shifter 180 degrée Projection Cassini

(Source)