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