Faire du HDR avec Jean et Marc (IV. La méthode HDRstack)

Image HDR créée avec HDRstack (15mm, Vercors)

Faire du HDR avec les kipi-plugins, c’est facile, mais c’est finalement assez peu flexible : enfuse choisit pour vous les zones à fusionner, et fait tout le boulot. Et si on veut le faire soi-même ? On pourrait faire la fusion soi-même dans GIMP, non ?

Parti de ce constat je me suis crée un petit script qui effectue tout le travail de préparation d’un HDR, que j’ai nommé pompeusement HDRstack. Il fait la suite d’étape suivantes :

  1. On convertit une suite d’images raw au format tiff avec ufraw.
  2. On aligne les images avec align_image_stack (de hugin).
  3. On crée une pile de calques avec ces images, avec PTtiff2psd (un utilitaire aussi fourni avec hugin).
  4. On ouvre avec GIMP !

Installation

Passons à l’installation de tout ça. Un PKGBUILD est disponible pour Archlinux. La première des choses est de télécharger le script, disponible ici (une petite relecture vous assurera qu’il ne fait rien de méchant). On peut éventuellement pour plus de facilité télécharger le fichier .desktop correspondant ici, qui permettra de lancer HDRstack de manière graphique. Respectivement, les deux fichiers sont à placer dans /usr/local/bin et ~/.local/share/applications. En ligne de commande, on tapera en comprenant ce que l’on écrit, bien sûr :

# Installation des dépendances (Debian et consorts)
sudo apt-get install hugin gimp ufraw-gimp zenity imagemagick
# Téléchargement
wget http://bellette.tuxfamily.org/files/HDRstack/HDRstack.desktop
wget http://bellette.tuxfamily.org/files/HDRstack/HDRstack

# Copie des fichiers aux emplacements indiqués
sudo cp HDRstack /usr/local/bin/ # Copie de l'exécutable
sudo chmod +x /usr/local/bin/HDRstack # Et on le rend exécutable
cp HDRstack.desktop ~/.local/share/applications/

kbuildsycoca4 # Permet _sous kde_ de mettre à jour immédiatement les menus

Voilà, c’est installé ! Alors, comment ça se présente en pratique ? Facile, on sélectionne nos trois images, clic-droit et on ouvre avec HDRstack (image). J’utilise moi-même digikam, mais le mécanisme est probablement similaire dans d’autres gestionnaires de photos. On peut ouvrir tous les formats d’image d’Imagemagick et les formats raw d’Ufraw.

La petite interface d'HDRstack

La petite interface d'HDRstack

Lancement de HDRstack dans digikam

Utilisation

Après avoir ouvert les images, une petite fenêtre s’ouvre, qui indique l’avancement. Ufraw s’ouvre une première fois pour développer la première image, s’il s’agit d’un raw. Quelques conseils pour cette étape :

  • Gardez la correction d’exposition fixe entre les images, ne mettez pas le réglage d’exposition sur « auto » dans ufraw, sinon on ne joue plus sur l’exposition, on fait… n’importe quoi.
  • Gardez les réglages de couleurs (bal. des blancs, saturation, etc.) identiques entre chaque photo.
  • Je n’applique personnellement qu’une courbe de base (à gauche), et garde linéaire la courbe de correction, hormis le réglage du point noir.

Réglages de ufraw

La première image chez moi est la prise de vue sur-exposée : je règle la correction d’exposition pour que les zones sombres de l’image soient correctement exposées. Ufraw ouvre ensuite les images restantes, toujours en cas de raw seulement. Le plus simple est de garder les réglages identiques pour chaque image, mais si l’envie vous prend d’en changer, assurez-vous d’avoir au moins dans une des images les détails que vous voulez avoir au final : fuyez les zones cramées ou bouchées !

Les trois images développées (mises côte à côte pour l'exemple) : j'ai diminué un petit peu la correction d'exposition sur la troisième pour avoir du détail dans les zones les plus lumineuses du ciel.

Surtout, ne cliquez pas sur le bouton Envoyer vers Gimp, ça fausserait tout le fonctionnement du script, simplement Enregistrer. Les images sont alignées et le résultat est ouvert dans Gimp. L’image résultat a trois calques, qui correspondent à nos trois images de départ, empilées dans l’ordre d’ouverture. Les opacités sont réglées par défaut de sorte à ce que le résultat soit la moyenne des trois images.

La pile de calques après ouverture : trois calques pour trois photos de départ. En médaillon, notez le décalage des images visible dans le coin : il faut recadrer !

Parfois, le résultat est d’emblée bon, alors il y a plus qu’à recadrer (cf ci-dessus) et enregistrer. Parfois, il faut aller plus loin… je vais développer une méthode ici qui est générique, en ce sens qu’elle marche pour toutes les images. Elle a le défaut par contre de produire parfois certains artefacts (halos notamment), mais c’est une bonne base pour utiliser ensuite sa propre méthode.

Production de l’image finale

L’image est ici peu contrastée… normal, on a compressé une très grande dynamique dans une gamme de valeurs plus faible : tout le challenge sera ensuite de redonner à l’image un contraste décent, sans la dénaturer. Facile à dire, mais moins à faire ! On va tenter le coup quand même, mais pour ça on va laisser le monastère de la Grande-Chartreuse et utiliser une image un peu plus « pédagogique ».

Des fougères dans les Cévennes. Le résultat brut est pas mal, mais on peut mieux faire.

Organisez les calques du plus «lumineux» au plus «sombre» de bas en haut.

N’oubliez pas de recadrer les bords avant de commencer. On va procéder méthodiquement, en partant de la couche sur-exposée : organisez vos calques avec une exposition croissante de bas en haut, c’est à dire avec des calques de plus en plus sombres en remontant dans la pile (cf ci-contre). Passez l’opacité de tous les calques à 100%.

Copier le calque du dessous et le coller dans le masque du dessus.

Cachez ensuite tous les calques, à l’exception du dernier (dont l’exposition est la plus sur-exposée) par un Shift-Clic sur l’œil du calque en question et observez les zones complètement cramées. Ce que l’on va faire, c’est remplir ces zones avec des détails du calque au dessus, qui lui est exposé un peu plus correctement. C’est parti.

Copiez ce qui est visible à l’écran, par un Ctrl+Shift+C et collez dans le masque du calque d’au dessus. Ancrez (Ctrl+H). (voir gif à droite).

On va utiliser ensuite les niveaux pour afficher le calque du dessus seulement dans les zones brulées du calque du dessous : dans l’outil Niveaux, déplacez le point noir de l’histogramme vers une valeur de 240. Le masque devient alors noir dans les zones correctement exposées, et reste blanc dans les zones brulées ou presque.

L’image est alors toute crade : pour adoucir les transitions, on va appliquer un flou gaussien sur le masque (un rayon de 200 est pas mal).

Et voilà ! Votre premier tonemapping fait à la main ! Mais trève de complaisance, observons deux secondes le résultat (ci-dessous) : on a certes plus de détail dans les hautes lumières, mais c’est pas encore ça.

 

Résultat intermédiaire à droite vs orginal à gauche : c'est pas encore ça, mais ça vient...

En fait, il reste encore des zones brulées, dans lesquelles il manque des détails. Vous avez sûrement déjà deviné où repécher ces détails : dans le calque du dessus, encore plus sous-exposé ! Alors c’est parti :

  • On copie l’image visible actuellement (Ctrl+Shift+C), et on colle dans le masque du calque situé juste au dessus.
  • Un coup de niveau (placer le point noir à 240)
  • Un coup de flou gaussien : rayon ~200. C’est ce flou gaussien qui provoque les halos que l’on peut avoir parfois : essayez de ne pas utiliser toujours le même rayon, pour justement éviter qu’ils n’aparaissent trop vite !

Vous aurez compris, il faudra répéter le processus tant qu’il reste des zones brulées à remplir…

Et alors, finalement ça donne quoi ? Bah, ça donne une image qui ressemble tout à fait à la sortie d’enfuse, qui procède en partie de la même façon. Il n’empêche qu’on a toute la dynamique de la scène dans notre image, et le contraste local est tout à fait correct ! Par contre, on a les artefacts typiques de ce genre de tonemapping : des halos dans les zones à fort contraste (regardez le ciel et les feuilles du figuier), et certaines zones souvent pas très naturelles, comme les arbres en haut à droite.

Pour éviter ce genre de problème, une bonne solution est d’augmenter le rayon du flou gaussien : les transitions sont plus douces entre les éléments, et on a des artefacts moins visibles. Par contre le contraste local en pâtit un peu plus.

Résultat du traitement, une image tonemappée, quoi. Passez la souris pour observer la différence par rapport à l'image sans traitement.

 

Alors c’est tout, tout ça pour ça ?


Oui, tout ça pour ça ! Il s’agit d’une méthode générique : vous pourrez traiter tous vos HDR de cette façon, et avoir une image à peu près potable à la fin. En fait plutôt que la fin, il s’agit plutôt du début : au fond, on ne fait que fusionner quelques calques avec des masques, et vous avez des millions de manières différentes de le faire. Et autant de photos différentes. Tout dépend de ce que vous cherchez à obtenir, si l’« aspect HDR » vous dérange ou pas. Personnellement,  pour moi une bonne fusion, c’est celle qui ne se fait pas remarquer : même si la photo aurait été impossible à prendre en une fois, le résultat doit rester vraisemblable à l’œil. Idéalement, les appareils devraient capter toute la dynamique de la scène, mais manque de pot, on doit monter des usines à gaz pour combler le manque.

Pour avoir une image plus naturelle, en général un petite règle mentale fait beaucoup : les zones les plus lumineuses doivent rester plus lumineuses que le reste. Ça parait bête, mais c’est une bonne ceinture de sécurité pour être sûr de ne pas tomber dans le panneau du HDR moche. De toute façon, si vous persévérer, ça viendra avec la pratique :o)

Liens

Annexe

Revenons deux minutes au script. On peut lui passer certaines options, comme par exemple éditer toutes les images en mode batch, ou alors toutes en mode interactif. On peut garder les fichiers temporaires, etc. Plein d’options détaillées en appelant le script avec l’option -h.

 Usage : HDRstack [options] <raw image files>

 Options :
        -p <prgm> : set editor (default : gimp). Remember :
                    output is a psd file

        -n : turn off image alignment

        -i <mode> : set editing mode. Available modes are :
                - all : process all images interactively (default)
                - none : do not process any image in ufraw gui
                - first : process first image in ufraw then
                    batch mode

        -d <folder> : set temporary folder (default = /tmp). If
             you have enough memory (>1G), setting it to a ramdisk
             speeds up the image processing a lot.

        -h : display this help

        -t : keep temporary files

        -o : Set folder for output file

Pour appeler le script avec une option particulière, il suffit d’ouvrir le dialogue Autre… dans la boîte de choix de l’application et d’indiquer les options à utiliser. N’oubliez-pas le %F (majuscule !) à la fin.

Passage d'options à HDRstack

 

Bonnes fusions !

Usage : HDRstack [options] <raw image files>

Options :
-p <prgm> : set editor (default : gimp). Remember :
output is a psd file

-n : turn off image alignment

-i <mode> : set editing mode. Available modes are :
- all : process all images interactively
- none : do not process any image in ufraw gui

-d <folder> : set temporary folder (default = /tmp). If
you have enough memory (>1G), setting it to a ramdisk
speeds up the image processing a lot.

-h : display this help

-t : keep temporary files

-o : Set folder for output file


 

14 Réactions à 'Faire du HDR avec Jean et Marc (IV. La méthode HDRstack)'



Suivre les commentaires avec le flux RSS , faire un TrackBack.

  1. Salut ! Tout d’abord, merci pour ce script !

    Suite à ton message voici mon retour sur son utilisation.

    Mon niveau : débutant « éclairé » on va dire, ça fait un an que je suis sous Ubuntu 10.04 et que j’utilise Gimp.

    Installation : j’ai suivi la procédure, aucuns soucis rencontrés pour l’installation.

    La prise en main : très simple, clic-droit « ouvrir avec » très pratique.

    Utilisation : j’ai fait différents tests avec 5 images en règle générale (au format DNG). Je suis débutant avec UFRaw donc quand le logiciel s’ouvre je ne modifie rien (je ne maitrise pas trop la manipulation des fichiers Raw, faudrait que je m’y colle), j’enregistre et je laisse HDRstack faire le reste. La fusion se passe bien et je trouve le rendu très « propre » (pas de halo(s) comme avec Qtpfsgui 1.9.3. sur certaines prises) et réaliste qui permet de faire un HDR bien exposé.

    Ensuite une fois que HDRstack a terminé la fusion et l’alignement le résultat s’ouvre dans Gimp, là il faut sauvegarder l’image et la fermer (sinon dès qu’on veut modifier quelque chose des petits carrés blanc et gris apparaissent en transparence, comme un gif quoi (une histoire de calques je pense).
    Autre souci, j’enregistre l’image en jpeg, j’ai essayé en tiff mais Gimp plante (toutes les fenêtres disparaissent d’un coup) dès que je veux retoucher quelque chose (« Niveaux » par exemple), et ensuite je ferme Gimp, puis je rouvre le jpeg pour éviter le plantage. Après je peux retoucher sans soucis ! J’espère avoir été clair dans mes explications…
    Encore une fois j’ai un petit niveau, donc peut-être que j’ai loupé une étape, j’espère que mon retour te sera utile, et si tu as des conseils/suggestions je suis preneur, ou si tu as des questions sur mon utilisation de ton script je suis à l’écoute ! Bonne continuation !

    Matthias

    23 juin 11 at 13:28

     

  2. Merci pour ton retour, ça m’est très utile :)

    Je crois aussi que le gros point fort de cette méthode, c’est le clic droit et hop c’est parti dans gimp, personnellement je fais beaucoup plus de HDR depuis. Par contre, le rendu est certes très propre mais aucun ajustement de contraste n’est fait : les images « brut de décoffrage » sont forcément peu contrastées. Si tu veux donner un peu de contraste en plus à ton image, jette un œil au contraste local : http://gimpguru.org/Tutorials/RemovingHaze/

    Pour l’instant je n’ai pas trouvé de méthode réellement générique et facilement explicable pour correctement retoucher les HDR produits avec cette méthode, c’est au cas par cas.

    Je pense effectivement que ton problème de « carrés blanc » est bien dû à un problème de calques. Quand l’image s’ouvre tu as un empilement de trois/cinq calques avec leur masque respectifs donc la retouche est assez subtile. Si tu veux faire des modifications simples je te conseille d’aplatir l’image (Image>Aplatir) avant de faire toute retouche. Tu ne devrais plus avoir de problèmes.

    Par contre le bug de l’enregistrement en tiff ça c’est hors de mes compétences :P

    Bonne photos o/
    Alexandre

    Alexandre

    24 juin 11 at 10:55

     

  3. Merci pour la piste sur le contraste local, je vais regarder ça.

    Aplatir l’image, jamais fait, je vais essayer, merci !

    Pour l’enregistrement en .tiff y’a plein d’options que propose gimp au moment de l’enregistrement, si ça se trouve ça vient de là, suffis de trouver la bonne (peut-être), en tout cas ça marche en jpeg donc pas de soucis !

    Matthias

    29 juin 11 at 15:17

     

  4. Bonsoir,

    J’ai voulu tester ce script.
    Je l’ai donc installé à partir de http://bellette.tuxfamily.org/files/HDRstack/hdrstack-1.1.tar.gz (étant sous Mageia) et j’ai fait les manips que tu décris :
    [root@localhost ~ 12-09-2011 10:51] # cd /documents/download/hdrstack-1.1/
    [root@localhost hdrstack-1.1 12-09-2011 10:59] # cp HDRstack /usr/local/bin/
    [root@localhost hdrstack-1.1 12-09-2011 10:59] # chmod +x /usr/local/bin/HDRstack
    [root@localhost hdrstack-1.1 12-09-2011 11:00] # cp HDRstack.desktop /home/joel/.local/share/applications/
    [joel@localhost MEPS Platform 2.2 12-09-2011 08:35] $ kbuildsycoca4

    J’ai ensuite fait des copies d’un raw (n’ayant pas de raw à des expositions différentes d’une même photo), je les ai sélectionné dans Dolphin et demandé à ouvrire avec HDRstack.
    Immédiatement, Gimp (et non Ufraw) s’ouvre avec ce message d’erreur : « L’ouverture de « /tmp/output.psd » a échoué : Le greffon Image Photoshop n’a pas pu ouvrir l’image »

    J’avais pourtant déjà toutes les dépendances :
    [root@localhost ~ 12-09-2011 09:34] # urpmi hugin gimp ufraw-gimp zenity
    Les paquetages ufraw-gimp-0.18-1.mga1.x86_64, hugin-2010.4.0-2.1.mga1.x86_64, zenity-2.32.1-1.mga1.x86_64, gimp-2.6.11-6.mga1.x86_64 sont déjà installés

    Qu’est-ce que j’ai loupé ?

    Joël

    12 sept 11 at 17:34

     

  5. Bonsoir Joël,

    D’abord merci beaucoup de ton rapport, comme je débute en « maintien » de logiciel, ça m’est très utile !

    J’ai mis en ligne une nouvelle version des fichiers, l’ancienne ne contenait pas les bons fichiers (honte à moi /o\). Tente d’abord de réessayer avec celle-là, mais je ne pense pas que ce soit tellement ton problème.

    Si tu ouvres avec un clique-droit en tapant dans la case HDRstack, ça ne marchera pas, il faut bien ajouter le %F à la fin (cf la dernière figure de la page). Si tu le fais en cliquant dans le menu, ça se fera automatiquement.

    En tout cas, je peux t’aider plus en détail si besoin, mais j’ai besoin de plus d’infos, essaye de lancer le logiciel en console, avec une commande de la forme : HDRstack fichier1 fichier2 fichier3
    …puis envoie moi la sortie (colle sur cette page, ou au pire par mail si c’est affreux : bellette chez tuxfamily pouin org).

    Tiens moi au courant :)
    Alexandre

    Alexandre

    12 sept 11 at 18:55

     

  6. Bonsoir, Alexandre,

    C’est moi qui te remercie pour tes tutos en général (d’ailleurs, tu n’as pas de flux RSS ? Je suis tombé sur celui-ci par hasard…)

    J’ai donc installé la nouvelle version de fichier : effectivement, ça ne change rien…

    Voici donc la sortie en console :

    [joel@localhost P1050047 14-09-2011 18:16] $ HDRstack P1050047-1.RAW P1050047-2.RAW P1050047.RAW
    convert: pas de délégué pour décoder ce format d’image `P1050047-1.RAW’ @ error/constitute.c/ReadImage/532.
    convert: nom de fichier d’image absent `/tmp/HDRstack/P1050047-1.tif’ @ error/convert.c/ConvertImageCommand/2949.
    convert: pas de délégué pour décoder ce format d’image `P1050047-2.RAW’ @ error/constitute.c/ReadImage/532.
    convert: nom de fichier d’image absent `/tmp/HDRstack/P1050047-2.tif’ @ error/convert.c/ConvertImageCommand/2949.
    convert: pas de délégué pour décoder ce format d’image `P1050047.RAW’ @ error/constitute.c/ReadImage/532.
    convert: nom de fichier d’image absent `/tmp/HDRstack/P1050047.tif’ @ error/convert.c/ConvertImageCommand/2949.

    Error: at least two files need to be specified

    align_image_stack: align overlapping images for HDR creation
    align_image_stack version 2010.4.0.854952d82c8f

    Usage: align_image_stack [options] input files
    Valid options are:
    Modes of operation:
    -p file Output .pto file (useful for debugging, or further refinement)
    -a prefix align images, output as prefix_xxxx.tif
    -o output merge images to HDR, generate output.hdr
    Modifiers
    -v Verbose, print progress messages. Repeat for higher verbosity
    -e Assume input images are full frame fish eye (default: rectilinear)
    -t num Remove all control points with an error higher than num pixels (default: 3)
    -f HFOV approximate horizontal field of view of input images, use if EXIF info not complete
    -m Optimize field of view for all images, except for first.
    Useful for aligning focus stacks with slightly different magnification.
    -c num number of control points (per grid) to create between adjacent images (default: 8)
    -l Assume linear input files
    -s scale Scale down image by 2^scale (default: 1 [2x downsampling])
    -g gsize Break image into a rectangular grid (gsize x gsize) and attempt to find
    num control points in each section (default: 5 [5x5 grid] )
    -h Display help (this text)

    TIFFOpen: /tmp/HDRstack/aligned_*: Cannot open.

    rm: impossible de supprimer « /tmp/output.psd »: Aucun fichier ou dossier de ce type

    => il essaie donc d’ouvrir les RAW avec convert au lieu de les ouvrir avec Ufraw ?

    Joël

    14 sept 11 at 17:39

     

  7. Ok, vu, c’est ça :)

    J’ai corrigé pour qu’il détecte correctement les fichiers RAW, jusque-là il ne testait que les fichiers dng, à cause d’une erreur de syntaxe bash… ce langage est pas simple je trouve :/

    Essaye de remplacer tes deux fichiers, je viens de mettre à jour, ça devrait aller maintenant :)

    Alexandre

    14 sept 11 at 21:50

     

  8. Ok, merci beaucoup, Alexandre : ça marche !

    Joël

    15 sept 11 at 19:29

     

  9. C’est OK pour le flux RSS aussi, en haut à droite, comme d’hab ;)

    Alexandre

    15 sept 11 at 23:13

     

  10. Merci, Alexandre,

    Je me suis abonné…

    Joël

    16 sept 11 at 10:39

     

  11. Merci pour les explications sur la manière de traiter les HDR à la main.
    Il vas falloir que je teste…

    Par ailleurs, n’ayant jamais appris l’anglais, j’ai traduit l’aide avec Google. Voici ce que cela donne :
    HDRstack -h
    Usage : HDRstack [options]
    ex: HDRstack raw1.dng raw2.dng raw3.dng

    Options :
    -p : éditeur d’image (default : ‘gimp -a’). Note :
    la sortie sera au format .psd

    -n : désactiver alignement de l’image

    -i : choix du mode d’édition. Les modes disponibles sont :
    – all : traiter toutes les images de façon interactive (par défaut)
    – none : ne pas traiter l’image avec ufraw
    – first : traiter l’image en premier avec ufraw, puis
    en mode batch (default)

    -d : mettre dans le dossier temporaire (default = /tmp).
    Si vous avez suffisamment de mémoire (> 1 Go), le mettre en ramdisk
    Ceci accélèrera de beaucoup le traitement (comme /dev/shm).

    -h : afficher cette aide

    -t : conserver les fichiers temporaires

    -o : Définir le dossier de sortie

    Est-ce que c’est correct ?

    Joël

    4 oct 11 at 21:22

     

  12. Bah pour une fois que Google traduction fait du bon boulot :) Oui c’est ça.

    Alexandre

    7 oct 11 at 14:53

     

  13. Ah non, c’était nettement moins compréhensible avec seulement Google… Il a fallu traduire ensuite en bon français…

    Joël

    7 oct 11 at 18:07

     

  14. Vraiment sympa ce site rendez vous defiscalisation, je
    trouve votre approche vraiment intéressante, Bravo pour la rédaction. je partage
    le lien de suite Pauline

     

Réagir

    

Contrat Creative Commons Hébergé librement chez tuxfamily.org Propulsé par Wordpress !