Retour aux autre tutos

Sur la correction des images voilées
Version : septembre 2014
(prise en compte de NeutralHazer)

Limitations du réglage des niveauxAutres images voiléesUn peu de théorieNouvelle méthodePasser en gamma=1 ou pas ?Emploi du filtre minimumObtention du voilage par interpolationVoilages discontinusCanal sombre (dark channel)Le plugin NeutralHazerConclusion

On dit qu'une image est voilée lorsqu'elle souffre de l'arrivée inopportune d'une lumière parasite ; l'effet le plus visible est que les «noirs» ne sont plus noirs. Le remède usuel est un simple réglage des niveaux, mais cela ne marche pas très bien quand le voile n'est pas uniforme ou/et quand il est important. Cet article propose une autre approche pour faire face à ce problème. Bien entendu, il ne faut pas espérer de guérison miraculeuse d'une image gravement voilée ; le meilleur conseil qu'on puisse donner est de la refaire dans de meilleures conditions, mais ce n'est pas toujours possible.

Le voile atmosphérique n'est qu'un cas particulier, mais particulièrement important. C'était toujours un sujet d'études très savantes ces dernières années — nous ne citerons que l'article HST publié en 2011 où l'on décrit une méthode (quasi) automatique pour nettoyer les images, mais on on pourra en trouver d'autres à partir de sa bibliographie ou à partir de ce que votre moteur de recherches favori pense du «dehazing». Apparemment, ces études ne se sont pas encore traduites par une grande variété de logiciels accessibles au grand public ; je ne connais guère que le plugin NeutralHazer, sorti en 2012 par l'équipe des développeurs du logiciel de photos panoramiques Autopano, qui donne souvent satisfaction... mais pas toujours ; nous en parlerons plus en détail à la fin de cet article. Il y aurait aussi une application pour l'iPad, mais dont il est difficile de juger de l'intérêt réel au vu des écrans de présentation sur l'App Store. Enfin, je ne connais rien qui puisse faire face à des voilages autres que le voile atmosphérique. Bref, faute de plugin polyvalent et sophistiqué à l'heure actuelle sur Photoshop, il n'est pas inutile de réfléchir à ce qu'on peut faire avec les outils de base de Photoshop.

Nous allons expliquer les insuffisances du réglage des niveaux puis nous présenterons notre nouvelle méthode, en essayant de rester aussi pragmatique que possible. En deux mots, il s'agit de préparer d'une façon ou d'une autre un «calque de voilage» reproduisant la lumière parasite et de le retrancher à l'image initiale, de préférence en gamma=1. Les explications suivent !

En fait, cette méthode n'est pas si nouvelle que ça, dans la mesure où on peut trouver ses fondements dans la littérature scientifique, mais celle-ci n'est pas d'accès facile au profane. J'espère que cet article pourra être utile, en attendant que ces travaux se concrétisent par des plugins opérationnels.

 

1 - Retour sur la méthode du réglage des niveaux

Tout le monde a fait l'expérience du voile atmosphérique. La figure ci-dessous rappelle de quoi il s'agit (à gauche) et quelle est la recette élémentaire pour le combattre (à droite).

La scène a été prise de loin. Ce qui se passe est que l'air lui-même entre la scène et l'appareil photo n'est pas rigoureusement transparent et qu'il agit comme une plaque de verre très légèrement dépolie, avec des irrégularités qui captent la lumière venant de partout et la rediffusent dans toutes les directions ; une petite partie prend le chemin de l'appareil et se superpose à la lumière provenant de la scène photographiée. L'effet est que les «noirs» de cette scène se remplissent de cette lumière parasite et que ce ne sont plus des vrais noirs. L'image prend un aspect voilé — comme si on la regardait à travers un voile très fin (ce qui n'est qu'une autre façon de faire un dépoli très léger).

Le remède élémentaire est illustré sur la droite. On ouvre un réglage de niveaux. On constate que l'histogramme ne démarre pas tout de suite à gauche — cela traduit le fait que les tons les plus sombres de l'image ne sont pas noirs — et on ramène le curseur des noirs sur le début de l'histo­gramme, comme indiqué en rouge dans l'insert.

Les «irrégularités» de l'air responsables de cette diffusion de la lumière peuvent être de simples poussières (surtout par temps chaud) ou de fines gouttes d'eau (brumes), mais ce peut être les molécules d'air elles-même. Ce dernier mécanisme — la diffusion de Rayleigh — est responsable de la couleur bleue du ciel ; c'est la lumière du soleil qui est rediffusée, mais le processus est beaucoup plus efficace pour de courtes longueurs d'onde (le bleu) que pour les grandes longueurs d'onde (le rouge), ce qui fait que c'est le bleu qui prédomine.

Le voile blanchâtre de la photo précédente est probablement due à une brume très légère. Par temps sec et avec un air sans trop de poussières, la diffusion de Rayleigh joue un rôle plus important quand on photographie à plusieurs kilomètres et le voile atmosphérique devient bleuté. C'est particulièrement évident dans la photo suivante (site d'Erice, en Sicile) :

Pour corriger, on compliquera légèrement la méthode élémentaire précédente en opérant couche par couche afin de compenser cette dominante bleutée ; les trois flèches dans l'insert montre le déplacement des trois «curseurs des noirs» en rouge, en vert et en bleu.

La figure montre aussi une difficulté très courante dans les images voilées : la correction marche pour le bas de l'image mais pas pour le haut parce que le voile n'est pas uniforme dans l'image. Le haut de l'image correspond à une zone bien plus éloignée que le bas ; pour arriver à l'appareil photo, il a fallu traverser une tranche d'atmosphère bien plus épaisse, où l'accumulation de la lumière diffusée a été bien plus forte.

Pour faire face à cette difficulté, la première idée serait d'ouvrir un calque de réglage (niveaux ou courbes) paramétré pour corriger l'image là où le voilage est le plus épais, puis, de diminuer cette correction en mettant du gris dans le masque du calque. En général, les résultats seront décevants, à moins de jouer également sur les curseurs des gris — et encore les réglages restent très délicats. La figure ci-dessous montre une tentative ; on voit à droite les courbes de correction la courbure dénote l'action sur les curseurs des gris) et le masque utilisés.

Le problème, très probablement, vient de ce que non seulement l'intensité du voile n'est pas uniforme, mais sa coloration non plus, et il est très difficile de compenser cette coloration sur toute l'image.

On obtiendra mieux en multipliant des calques de réglage localisés, mais le travail reste généralement très délicat. On y reviendra dans la conclusion de ce papier.

 

2– Autres exemples d'images voilées

Nous allons donner un certain nombre d'exemples de situations qui ont conduit à des images voilées ; liste non limitative !

Photographie à travers la vitre d'un autobus. Malheureusement, la vitre n'est pas très propre, ses saletés éparses diffusent la lumière et créent un voilage non uniforme dans l'image.

On ne confondra pas cette situation avec la photo d'objets dans une vitrine, où on prend à la fois les objets et le reflet indésirable du monde extérieur dans la vitrine. Si ce reflet est net, on aboutit à un mélange inextricable de deux images. Il faudrait que ce reflet soit extrêmement défocalisé pour qu'on puisse le considérer comme un voilage — ou bien qu'il soit uniforme, ou presque, comme le reflet d'un ciel bleu lorsqu'on photographie des poissons au fond d'une eau tranquille.

Condensation de buée sur l'objectif. Voilage non uniforme autour des sources de lumière (que celles-ci soient visibles dans l'image ou non).

Pollution des images d'astronomie par l'éclairage nocturne. Ici, l'auteur a essayé de photographier la lumière zodiacale.

Dans le même genre, on pourra voir notre travail autour de la comète PANSTARRS [ici, aller à la conclusion]

Grosse tache de flare localisée au centre de l'image, créant un voilage localisé sur la roche et les jambes du personnage (on n'abordera pas le traitement de ces taches dans cet article)

Note sur le flare

Le flare est provoqué par une source de lumière intense dans le champ capté par l'appareil photo ou à proximité. Dans le premier cas, au lieu de se focaliser sur l'image de cette source, les rayons sont partiellement réfléchis sur chaque surface verre-air des lentilles de l'objectif — très faiblement, à cause de la qualité des couches anti-reflets de ces lentilles, mais ça se verra quand même si la source de limière est assez forte — et ces rayons erratiques arrivent un peu n'importe comment sur le capteur, formant diverses taches et halos. Dans la dernière photo, on note aussi les traits qui rayonnent à partir de l'image du soleil. Là, il s'agit d'un phénomène de diffraction tout différent: quand un rayon lumineux passe à proximité des lamelles métalliques du diaphragme, une petite partie de la lumière «s'enroule» autour de l'arête de ces lamelles, créant une petite nappe lumineuse perpen­di­culaire à cette arête qui arrivera finalement dans l'image pour former ces traits rayonnants.

 

3 - Un peu de théorie... Pas si simple que ça !

Le principe général que le voilage résulte de l'addition d'une lumière parasite à ce qu'on cherche à photographier implique une relation de la forme

(1)                  (RVB)_captés = atténuation x (RVB)_scène + (RVB)_voilage

L'atténuation figurant dans cette relation peut provenir de deux mécanismes :
— si le voilage provient de la lumière émise par un matériau translucide, de la traversée de ce matériau (et dans le cas d'un voilage atmosphérique sur un paysage, il faut s'attendre à ce que cette atténuation augmente avec le voilage pour les lointains) ;
— de la correction d'exposition pratiquée par le photographe pour éviter toute surexposition.

Cette formulation ne prend tout son sens que si ces composantes RVB sont proportionnelles aux énergies lumineuses en jeu. C'est bien le cas pour les composantes brutes délivrées par le capteur (celles du fichier RAW), mais pas pour celles qui figurent dans les fichiers images usuels. Entre les deux, les RVB ont subi une «transformation de gamma» du type

(2)                  (RVB)_image = (RVB)_brut ^(1/gamma)

où figure le gamma de l'espace colorimétrique dans lequel on a transcrit l'image — par exemple gamma=2,2 pour l'espace Adobe(RGB)1998.

Cette intervention du gamma complique nettement les choses. Pour revenir à la simplicité de la formulation (1), il faut recoder les RVB en annulant cette transformation. Le plus simple pour cela est

Pour comprendre l'intérêt d'une telle opération, suivons les opérations décrites dans la figure suivante :
 On y voit successivement

  1. Une charte de gris ;
  2. la même charte voilée dans le bleu et le vert ;
  3. le résultat d'une simple égalisation des niveaux (les courbes équivalentes sont ci-contre à droite) quand on opére directement sur l'image dans un espace sRGB ou Adobe-98. Le «noir» est bien revenu au noir mais l'apparition de la couleur complémentaire du voilage initial montre clairement que les valeurs intermédiaires ont été surcorrigées.
  4. On peut récupérer correctement les gris intermédiaires si on utilise les courbes de correction montrées ci-contre dans le vert et le bleu, mais l'ajustement de ces courbes est extrêmement délicat. Il faudrait une 3ème courbe dans le rouge si on avait aussi du voilage dans le rouge (ces trois courbes deviendraient identiques pour un voilage blanc et il suffirait alors de l'établir une seule fois dans la couche composite RVB).

Ces difficultés inattendues sont une conséquence directe du gamma des espaces colorimétriques usuels. Si on passe en gamma=1, on récupère tous les gris au moyen d'une simple égalisation des niveaux dans les trois couches RVB, c.à.d. par un réglage de niveaux ou de courbes où on ne manœuvrerait que les curseurs noirs et blancs.

 

4 - Une nouvelle méthode pour rattraper un voilage non uniforme

Comme l'image voilée résulte peu ou prou d'un mécanisme d'addition des lumières entre la scène qu'on cherche à photographier et une lumière parasite indésirable, si on sait isoler cette dernière et qu'on la retranche de la scène globale, on devrait retrouver la scène originale (à une atténuation près), que le voilage soit uniforme ou non dans l'image. Le processus sera le suivant :

La figure suivante illustre la mise en œuvre de cette méthode : charte de gris voilée voilage  On y voit successivement l'image voilée, une image de la lumière parasite utilisée et le résultat final. Si vous voulez faire l'expérience vous-même, faites un clic droit sur la gauche ou le milieu de la figure pour télécharger les fichiers correspondants en 750 px de large.

Une récupération parfaite demande beaucoup de précision dans les opérations successives [explications détaillées ici], précision incompatible avec le travail réel, ne serait-ce que parce qu'on n'aura jamais sous la main la distribution exacte du voilage. La récupération d'une image voilée est toujours une opération de sauvetage dans laquelle on ne peut pas être trop exigeant.

 

5 - Peut-on se débrouiller sans passer en gamma=1 ?

La dernière remarque ouvre la porte à des processus approximatifs. S'il était possible d'éviter de passer en gamma=1 et néanmoins d'aboutir à des résultats «convenables», bien des utilisateurs seraient rassurés de ne pas avoir à recourir à une démarche aussi ésotérique.


 

 
 
 
 

Si on se contente de rester dans l'espace colorimétrique d'origine et de simplement mettre le calque «voilage» en mode différence, on obtient le résultat ci-contre ; les noirs sont bien restaurés, mais la surcorrection dans les tons médians et clairs est manifestement inacceptable ; il faut absolument l'inhiber.

Pour cela, une technique simple consiste à accoler un masque de fusion au calque «voilage» dans lequel on mettra un négatif de l'image qu'on vient de reprendre : les tons clairs de l'image seront sombres dans le masque et l'effet du calque sera atténué, voire annulé si on va jusqu'au noir dans ce masque. On voit résultat ci-contre : l'amélioration est très satisfaisante dans les tons clairs, mais pas assez dans les tons médians.

En fait, pour un voilage uniforme, on peut montrer qu'on obtient le même effet qu'avec une simple égalisation des niveaux : le noir et le blanc sont biens restaurés, mais les tons médians sont sur-corrigés. Pour améliorer encore les résultats, on a vu qu'il fallait utiliser des courbes et opérer couche par couche.  Ici, on appliquera une courbe sur le masque de fusion, du genre indiqué à gauche (comme le calque apporte une surcorrection, il faut foncer son masque pour diminuer celle-ci). Bien entendu, on ajuste cette courbe au jugé. On aboutit à quelque chose comme ce qu'on voit à droite : ce n'est évidemment pas parfait, mais il ne faut pas oublier que l'œil est très sensible aux petites variations de couleur quand on part du gris ; ces résultats devraient être suffisants dans les applications pratiques, surtout quand on ne sait pas ce que devrait être une correction «parfaite».

Cliquez ici pour récapituler le détail des opérations à effectuer.



6 – Obtention du voilage avec le filtre minimum

Nous arrivons maintenant au problème principal : à partir de l'image voilée comment estimer la distribution de lumière parasite ? Il n'est évidemment pas question d'y arriver de manière exacte. En effet, les seuls points où on soit certain du voilage sont ceux qui devraient être noirs et, normalement, il n'y en pas tant que ça dans une image ; il faudra faire des hypothèses entre deux points noirs, par exemple que ce voilage varie régulièrement. Un autre facteur d'incertitude est que les points «noirs» sur lesquels on va s'appuyer ne sont peut-être pas si noirs que ça, auquel cas le voilage local sera surestimé.

On est néanmoins obligé de s'appuyer sur les points les plus sombres de l'image pour obtenir une estimation du voilage. Une manière commode de mettre ces points en évidence est d'utiliser le menu Filtre>Divers>Minimum, qui remplace chaque pixel par le pixel le plus sombre (primaire par primaire) dans un rayon donné fixé par l'opérateur. La figure suivante montre ce qui se passe quand on augmente ce rayon.
Les couleurs les plus sombres envahissent peu à peu toute l'image quand on augmente le rayon. Les zones claires de l'image se rétrécissent mais peuvent rester longtemps visibles si elles étaient suffisamment étendues au départ (comme la portion de mur à gauche de la porte). Il est évident que ce qui reste de ces zones claires ne correspond pas à au voilage local et qu'il faut chercher celui-ci dans les zones plus sombres à proximité.

Le processus global est le suivant :

  1. dupliquer le calque de l'image

  2. si l'image est bruitée, appliquer un débruitage très fort (on verra plus loin pourquoi).
  3. Appliquer le menu Minimum à ce calque copie, avec un rayon ni trop grand ni trop petit. On reviendra plus loin sur ce dilemme.
  4. Les vestiges trop clairs de l'image initiale ne peuvent pas correspondre à un voilage et il faut les faire disparaître. Pour cela, avec le pinceau en mode obscurcir,
    — prendre une couleur sombre juste à côté de la zone trop claire (via un ALT-clic)
    — peindre par dessus la zone à assombrir.
  5. Opérer un flou gaussien pour estomper le résultat ; il faudra prendre un rayon de flou un peu supérieur au rayon de minimum.


  6. Mettre le calque en mode différence
  7. Passer dans la palette des couches pour prendre la sélection des lumières (en cliquant sur l'icone tout en bas à gauche de la palette), puis revenir dans la palette des calques, intervertir la sélection (CTRL+MAJ+I) et ouvrir un masque de fusion ; celui-ci se remplit du masque des ombres de l'image.
  8.  Egaliser les niveaux dans ce masque en y ouvrant un réglage de niveaux ou de courbes (forcément par le menu Réglages ou les raccourcis CTRL+L ou CTRL+M). Il est impératif que ce masque aille jusqu'au blanc pur afin que la correction soit pleinement appliquée aux points les plus sombres (les plus sensibles au voile) et qu'il parte du noir si on veut annuler les effets néfastes de la correction sur les points les plus clairs (qui, en principe, ne devraient pas être voilés).


  9. A ce stade, les tons médians devraient être surcorrigés et sous-exposés. Pour y remédier, on doit ouvrir un réglage par courbe sur le masque de fusion (CTL+M) et abaisser la courbe comme indiqué dans les sections 4 ou 6 ; la forme exacte importe peu. En fait, si on a utilisé un réglage par courbe dans l'étape précédente, on peut combiner les deux étapes.
  10. On peut terminer ce traitement global en réégalisant les niveaux dans toute l'image.
    Dans le cas d'une image très abimée comme celle de notre exemple, il se peut qu'il reste encore des endroits douteux ; on pourra essayer de traiter ceux-ci au moyen de réglages par niveaux localisés.

Lors de l'application du filtre minimum, il vaut mieux éviter de prendre un rayon trop grand sous prétexte de minimiser les zones claires. On voit ci-dessous ce que devient notre image, traitée de la même façon (comme nous venons de l'expliquer), selon qu'on utilise 50 px comme rayon de minimum (à gauche) ou bien 200 px (à droite), à comparer aux 4000 px de largeur de l'image. Manifestement, la suppression du voilage est plus convaincante à gauche bien qu'on n'ait pas davantage raboté dans les noirs, comme le montrent les histogrammes en insert.

Les variations rapides du voilage dans l'image peuvent provoquer cet effet. On voit ce mécanisme à l'œuvre ci-dessus, avec la grosse tache claire en haut de la porte — plus claire que le «noir» voilé juste à côté. Dans l'application du filtre minimum avec un gros rayon, ce noir va envahir la porte et on ne verra plus l'excès de diffusion sur celle-ci.

Remarques sur l'utilisation du filtre minimum

(1) — Avec de grandes images observées à un petit facteur d'échelle (25% ou moins), on peut être surpris de voir une grosse différence entre la prévisualisation et l'image finale, celle-ci présentant beaucoup plus de carrés sombres que la prévisualisation. C'est dû au fait que cette dernière repose sur un calcul rapide où on ne prend pas en compte tous les pixels de l'image. Pour ne pas être surpris, il faudra zoomer à 100% (on utilise alors tous les pixels visibles à l'écran) avant de lancer le calcul définitif.

(2) - En cas d'image très bruyante, le filtre minimum risque de se caler sur des pixels anormalement sombres à cause du bruit. Il faut donc commencer par éliminer ceux-ci, par exemple au moyen d'un un filtre Bruit>Mediane avec un grand rayon (15-20 px), avant d'appliquer le filtre minimum. La figure suivante en donne un démonstration (cliquer sur les liens ou passer la souris dessus pour voir les différents états de cette image) :



Image initiale
(cliquez sur ce lien pour recharger l'image initiale)

Essai sans débruitage
Noter que le voile persiste en bas et à gauche

Essai après débruitage
Dans ce cas particulier, ce débruitage initial a été fait avec un filtre Mediane de rayon 20px (pour une image de 4600px)

(3) - Lorsque l'image à retoucher contient plusieurs plans avec des voilages différents (comme l'image de montagne dans notre introduction), il faut prendre garde que le filtre minimum déplace les contours. Il faudra commencer par prendre une sélection des contours afin de restaurer ceux-ci dans le calque en mode différence

7 – Obtention du voilage par interpolation

Il arrive souvent que le voile varie très régulièrement dans l'image. Par exemple, dans un paysage pas trop accidenté,  le voilage atmos­phérique est généralement uniforme dans le sens horizontal et il croit peu à peu dans le sens vertical au fur et à mesure qu'on se rapproche de l'horizon. On peut donc être tenté d'égaliser les niveaux dans deux bandes horizontales étroites (comme indiqué dans la figure) et de les raccorder par un gradient continu. Plus précisément, on pourrait procéder de la manière suivante :

  1. Egaliser les niveaux dans la bande inférieure au moyen d'un calque de réglage (courbe ou niveaux). Pour cela, positionner les curseurs noirs dans les trois couches RVB et aussi le curseur blanc dans la couche composite (afin de rattraper la luminosité sans modifier la couleur)
  2. Remplir de blanc le masque de ce calque afin d'étendre la correction à toute l'image.
  3. Dans une sélection correspondante à la bande supérieur de la figure, ouvrir un 2ème de calque de réglage et procéder au même type d'égalisation.
    Noter que le positionnement des trois curseurs noirs aura considérablement assombri l'image et que l'action du curseur des blancs est ici obligatoire pour retrouver sa lumière. Ce qu'on voit à l'oeuvre est qu'une image observée à travers un milieu diffusant est atténuée, et cela, d'autant plus qu'on augmente l'épaisseur de ce milieu. Nous avions prévu cet effet avec l'équation (1) dans la section 3 ; il implique que la suppression de ce voile atmosphérique non uniforme doit s'accompagner d'une augmentation de luminosité également non uniforme.
  4. Remplir de blanc le masque de ce calque ; la correction est étendue à toute l'image (et devient excessive pour le bas de l'image)
  5. Remplir ce masque d'un gradient vertical noir vers blanc comme indiqué ci-contre afin de passer continûment d'une correction à l'autre.
    (Eventuellement, on pourrait modifier le rythme de ce passage en faisant agir une courbe sur ce masque.)

La figure suivante permet de confronter les résultats des différentes approches dans le processus de correction. Survolez les différents liens ou cliquez dessus pour voir les différents états de l'image et pour lire les explications correspondantes dans le cadre sous l'image :




 Etat initial

Correction 1

Correction 2

Correction 3

Correction 4

Correction 5

Correction 6

Correction 7 (NeutralHazer)

Image initiale.

Un des problèmes spécifiques à ce genre d'image est que le voilage (plus précisément l'épaisseur de brume traversée) n'augmente pas linéairement avec la hauteur dans l'image, mais beaucoup plus vite quand on se rapproche de l'horizon. L'interpolation linéaire que nous allons pratiquer entre la correction en bas de l'image et celle autour de l'horizon n'est donc pas très bien adaptée.

En conclusion :

Autres formes d'interpolations

La photo de lumière zodiacale dans la section 2 va nous donner l'occasion de pratiquer un autre type d'interpolation. Survolez les différents liens ou cliquez dessus pour suivre l'histoire.


Etat initial

Etape 1

Etape 2

Etape 3

Etape 4

Etape 5

Etape 6

Etape 7

L'image de départ.

La lumière zodiacale vient de l'éclairage par le Soleil des poussières réparties dans tout le système solaire autour du plan de l'écliptique (là où tournent les planètes). Bien entendu, la lumière réfléchie est très faible et sa perception exige que le Soleil soit couché et que la nuit soit bien noire, ce qui n'est pas vraiment le cas ici.



8 – Voilages discontinus

Dans cette section, nous abordons les images contenant différents «plans» étagés dans l'espace, portant chacun des niveaux de voilage différents. Le prototype en est une photo de montagne  où chaque sommet peut en masquer un autre plus éloigné et donc plus voilé. Le niveau de voilage varie alors fortement quand on franchit le contour de ce sommet, et, si on applique le filtre minimum à toute l'image sans plus de précaution, on voit (à droite) que les zones peu voilées bavent sur les zones avoisinantes plus voilées (sur le rayon du filtre minimum), ce qui se traduit ensuite par des sous-corrections et des halos inacceptables le long des contours.

Pour éviter ça, il faut commencer par une étape de détourage où on décomposera l'image en une somme de zones jointives où le voilage varie régulièrement. Par exemple, dans l'image précédente, on peut distinguer 4 de ces zones, limitées par les pointillés indiqués à droite. Chacune de ces zones sera recopiée dans un calque indépendant ; ensuite, sur chacun de ces calques,
— on verrouillera les pixels transparents,
— on appliquera le filtre minimum,
— et on estompera les carrés ainsi obtenus au moyen d'un flou insensible aux pixels transparents extérieurs à la zone (dans Photoshop, on appliquera un flou de surface).
Le calque de voilage global s'obtient alors par la recombinaison de ces calques partiels.

Bien entendu, c'est un peu plus compliqué que ça dans la réalité. Survolez les différents liens ou cliquez dessus pour suivre d'un peu plus près ce qui va arriver à l'image précédente.


Etat initial

état 2

état 3

état 4

état 5

état 6

état 7

état 8 (NeutralHazer)

L'image de départ : un paysage de montagne en Jordanie sous une tempête de sable. Evidemment, un «bon» photographe n'aurait pas pris la photo, ou bien il serait revenu plus tard avec une météo meilleure, mais le voyageur qui ne sait pas s'il aura jamais l'occasion de revenir appuie quand même sur le bouton...

L'image a été découpée en 4 zones comme indiqué dans la figure précédente — en l'occurence, je me suis tout simplement servi de l'outil «sélection rapide» de Photoshop, après avoir fortement augmenté le contraste par accentuation. Une première difficulté est d'obtenir des zones bien jointives.

On aura compris que ces détourages vont beaucoup compliquer le travail — c'est l'un des intérêts des travaux scientiques sur ce sujet (par exemple HST) que de les faire automatiquement, mais hélas leur mise en pratique se fait attendre. Et tout ça pour des images qui seront très généralement très discutables sur le plan de l'intérêt photographique... Gageons toutefois que leurs auteurs y discerneront d'autres vertus pour se lancer dans l'aventure — ou y lancer des amis avec plus de bouteille dans l'art de la retouche.

9 – Couleurs inopportunes dans le voilage estimé ;
      le «canal sombre» (dark channel)

Chaque fois qu'une image contient des régions étendues sans véritable point sombre, la méthode du minimum ne peut pas fournir d'estimation satisfaisante du voilage dans ces régions. Comme nous l'avons fait dans la Section 6, on peut parfois s'en tirer manuellement en recopiant ce qu'on a obtenu juste à côté avec un pinceau ou le tampon en mode obscurcir, mais ce n'est pas toujours si facile à faire. Il existe une autre méthode, dite «du canal sombre» (dark channel), censée marcher nettement mieux, mais qui ne conduit qu'à une visualisation N&B du voile, sans sa coloration éventuelle.

Cette technique est due aux auteurs de l'article que nous avons cité plusieurs fois (HST). Ce «canal sombre» est tout simplement l'image N&B obtenue en prenant pour chaque pixel la valeur de gris correspondant à la plus petite des trois composantes RVB de l'image initiale. Cela conduit à des valeurs faibles non seulement pour des points à l'ombre, mais aussi pour tous les points de couleur vive, puisqu'une saturation élevée implique que l'une des trois composantes RVB soit petite. De fait, après observation sur quelques milliers d'images naturelles non voilées (prises au hasard sur Flick'r), les auteurs ont constaté que le procédé conduit généralement à des images très foncées, où les points clairs subsistants disparaissent aisément après l'application du filtre minimum, laissant des images quasi-noires. En présence de voilage, toutes ces composantes RVB minimales augmentent ; l'image finale n'est plus noire mais simplement grise et ce niveau de gris devrait donc donner une bonne estimation de l'intensité du voile.

Cliquez ici pour les détails pratiques de mise en œuvre de cette technique.

Malheureusement, il est très facile de mettre en défaut ce principe du canal sombre — bien plus que ce que ses auteurs laissent croire. Rappelons qu'une image non voilée (et bien posée) devrait conduire à une image quasi noire après l'application d'un filtre minimum. Cela fonctionne bien avec un paysage de verdure :  (à droite, on a appliqué un minimum de 15 px de rayon pour une image de 600 px de large. L'image s'éclaircit dans les lointains précisément parce que ceux-ci sont voilés ; quant au ciel, bleu ou non, il ne peut jamais mener au noir)




Par contre, le moindre paysage maritime ne conduit jamais à du noir sur la mer. Le gris obtenu ne pourra donc jamais représenter le voile éventuel ; il sera toujours trop clair. Cela condui­rait à une forte surcorrection si on n'en tenait pas compte.

 

L'image suivante va nous permettre de voir ce que donne cette méthode. Survolez les liens ou cliquez dessus pour voir les différents états de l'image et les explications correspondantes dans le cadre sous l'image.






1 -Image originale

2 - «Voile» par minimum simple

3 - «Voile» par canal sombre

4 - Correction avec le canal sombre

5 - Retouche du canal sombre.

6 - Minimum simple : correction brute

7 - Minimum simple + désaturation.

8 - NeutralHazer.

1 — Image initiale (cette image a souvent été utilisée dans la littérature scientifique sur la correction du voile atmosphérique).

Comme il y a clairement deux plans de voilage, tout notre travail a commencé par un détourage du premier plan de végétation et la mémorisation de la sélection correspondante.



Le plugin NeutralHazer

Ce plugin est explicitement destiné à réduire le voile atmosphérique dans des paysages (à l'origine, il avait été développé pour améliorer des images panoramiques). De fait, il ne fonctionne absolument pas sur la scène africaine ou sur le voilage accidentel de la salle de spectacle de la section 2 ou sur nos images théoriques de chartes voilées des sections 3 ou 4. Il donne évidemment de bons résultats avec les images de démonstration fournies par ses concepteurs, mais mes propres essais me conduisent à une attitude plus réservée. Le traitement de l'image ci-dessous offre un déroulement typique de ce qui se passe ; passer la souris sur les numéros en dessous de l'image pour passer d'une étape à l'autre (cliquez pour en faire l'image de référence).

[1][2][3][4][5]
1 — Image originale.

En l'occurrence, il s'agit d'une image panoramique, précisément le cœur de cible du logiciel

L'infidélité de la prévisualisation peut aller jusqu'à de véritables catastrophes ; par exemple à partir de l'image d'Erice de notre Section 1, nous avons pu obtenir le résultat suivant :

Quand j'ai réduit la taille de l'image pour préparer cette page web (je suis passé de 3872 px à 600 px de large), le résultat avec les mêmes réglages est passé de la carricature ci-dessus à un résultat normal, c.à.d. un peu différent de la prévisualisation, mais sans excès. Il s'agit manifestement d'un bug que les concepteurs, espérons-le, sauront corriger.

Il semble que les «accidents» comparables au résultat précédent n'arrivent que pour des images fortement voilées. Pour des photos ordinaires sans trop de brume (comme l'image de New-York de la section 7), ça se passe généralement bien. Et puis, la mise en œuvre du programme est très simple, bien plus simple que les différentes recettes exposées dans cet article... Quand ça se passe bien, on n'a pas de souci avec la surcorrection inhérente à l'égalisation (simple) des niveaux, on n'a pas besoin de recourir aux mystères du gamma=1...



Conclusion (désabusée)

Dans la littérature scientifique, on ne manque jamais de dire que le problème se présente mal ; en effet, il s'agit ni plus ni moins de résoudre sur chaque pixel une équation du genre
     (RVB)_captés = atténuation x (RVB)_scène + (RVB)_voilage
où on ne connaît que ce qui figure à gauche et rien de ce qui figure à droite ; autrement dit, trois inconnues pour une seule équation, deux de trop ! Pour avancer, on cherche à réduire les possibilités sur le voilage et l'atténuation au moyen d'hypothèses plus ou moins plausibles, mais celles-ci, hélas, ne sont pas toujours vérifiées.

En attendant l'avancée théorique décisive, on retouche donc les images comme on peut. On dispose bien de NeutralHazer, mais celui-ci ne fonctionne que pour le voile atmosphérique dans les paysages et pas toujours très bien quand ce voile est trop épais. Souvent, on n'aura guère d'idée bien claire de ce qu'il faudrait obtenir et on ne pourra avancer qu'au jugé, en estimant que telle ou telle intervention donne un résultat plus «sympathique». Mais il arrive qu'on reste malheureux... En règle générale, on aura intérêt tout bonnement à recommencer la prise de vue dans de meilleures conditions. Mais quand ce n'est pas possible et qu'on tient à l'image, il faut bien se débrouiller.

La photo d'Erice avec laquelle nous avions commencé cet article (très fortement voilée) va nous permettre de résumer le chemin parcouru à travers la comparaison de quelques traitements possibles. A noter que chacune des versions qui suivent ont été faites sans avoir les précédentes sous les yeux, c.à.d. sans chercher à les faire converger les unes vers les autres dans une dernière étape de post-traitement. Au lecteur de choisir... ou de trouver autre chose !


1 — Image originale

2 — Réglage de niveaux multiple (en restant dans l'espace d'origine)

3 — Niveaux par courbes (avec «correction de gamma», toujours dans l'espace d'origine)

4 — Calque de voilage par minimum en gamma=1

5 — Avec le canal sombre, toujours en gamma=1.

6 — Avec calque de voilage, mais sans passer en gamma=1.

7 — A partir de NeutralHazer.

1 — Rappel de l'image de départ, déjà rencontrée dans la Section 1.

Cette image a été empruntée dans un forum. Le bout d'arbre noir au premier plan est sans doute une maladresse de l'auteur, mais je l'ai conservé — il complique un peu les choses (il faut veiller à l'exclure de tous les calques qui vont se superposer), mais pas trop.

Notre dernier conseil sera de ne pas avoir peur de passer en gamma=1 ; le travail y sera plus facile.

Remerciements

Merci à tous ceux qui m'ont fourni les images sur lesquelles j'ai travaillé, mes camarades de club mais aussi Noëlle Adam et d'autres correspondants plus anonymes dans les forums.



page précédente