Projet : Gestion des images HDR

Transcription

Projet : Gestion des images HDR
Projet : Gestion des images HDR
Brett Ridel, Boris Raymond
1
Objectif du projet
L’objectif de ce projet est de gérer les images HDR (High Dynamic Range).
Les images HDR gèrent des pixels dont la luminance peut être très supérieur à
1. Elles permettent entre autre de mieux gérer les problèmes de saturation et
d’avoir un meilleur contraste (voir figure 1).
Figure 1 – Une image HDR (à droite) permet d’avoir un meilleur contraste
qu’une image LDR (Low Dynamic Range) (à gauche).
2
Chargement et Sauvegarde d’images HDR
Il existe principalement deux formats d’image HDR : RGBE et EXR.
RGBE Les fichiers RGBE sont plus facile à traiter que les EXR. Une librairie
est proposée en annexe de l’énoncé.
Ajoutez les méthodes Image* loadHDR(const std::string& filename)
et void saveHDR(Image const * const img, const std::string& filename) const à votre logiciel de traitement d’image.
Un bon test pour s’assurer que cette étape fonctionne consiste à charger et
sauvegarder une image HDR sans la modifier.
1
3
Les images HDR dans le logiciel
Les images RGBE peuvent être stockées sur trois canaux comme des images
RGB classiques. Néanmoins les valeurs de chacun des canals ne sont plus limitées à 1. Cette étape consiste à modifier le code pour que les opérations prennent en compte la valeur maximum de l’image.
Créez une classe ImageRGBE qui hérite de Image et qui permet de
stocker une image HDR.
Ajoutez à la classe Image une méthode virtual float valMax().
Assurez vous que les opérations Binarizer, Inverser, Rotation, Scaling, Convolution et Pointillism fonctionnent avec des ImageHDR.
4
ToneMapping
Les écrans actuels ne permettent pas d’afficher des images en HDR. Pour pouvoir
les afficher, il faut effectuer une opération de ToneMapping. Cette opération
permet de replacer toutes les valeurs des pixels entre 0 et 1 :
• Ne pas faire de Tone Mapping reviens à remettre toutes les valeurs supérieur
à 1 ( valeur = max(valeur, 1) ).
• Le mapping linéaire est une mauvaise idée. Si un pixel est beaucoup plus
lumineux que les autres, l’image sera quasiment noire (C’est le cas pour
beaucoup d’images).
• D’autres algorithmes de Tone Mapping plus intelligents existent.
(a) Sans Tone Mapping
(b) Mapping Linéaire
(c) Reinhard
La méthode de ToneMapping de Reinhard (fourni en annexe) se distingue
des autres grâce à sa facilité d’implémentation et ses nombreux réglables possibles.
Implementez l’opération ToneMapping qui transfome une ImageRGBE
en ImageRGB avec la méthode de Reinhard.
2
L’algorithme est décrit dans la figure 6 de l’article de Reinhard. Il s’appuie
sur des valeurs telles que la luminance minimum, moyenne et maximum qui
devront être calculées avant de commencer le Tone Mapping.
5
Restitution du projet et Rapport
5.1
Code source
Le code source du programme final doit être restitué. Toutes les opérations
doivent être commentées pour qu’un relecteur puisse comprendre le plus rapidement possible ce que vous avez implémentez.
Le code du logiciel doit s’inscrire dans l’architecture établie lors des précedents TP. Si des éléments sont ajoutés ou si l’architecture est modifiée, cela doit
être justifié et argumenté dans le rapport.
5.2
Rapport
Le rapport doit vous servir pour les 3 objectifs suivants :
• Préciser quel(s) projet vous avez choisi, ce que vous avez réussi à faire
mais aussi ce que vous n’avez pas réussi à faire (en expliquant clairement
pourquoi).
• Expliquer votre approche et vos choix. La pertinence de l’argumentation
et la clarté de l’explication seront les points clés de l’évaluation.
• Mettre en avant les qualités non fonctionnels de votre projet. La robustesse
du programme, la vitesse d’exécution, la lisibilité du code ou même une
interface facile a utiliser seront des points qui vous départageront.
Une notice d’utilisation du logiciel et de nombreuses illustrations sont bienvenues.
3

Documents pareils