Wavelets/fr

Niveaux d'Ondelette

Compatibilité limitée avec Ciecam

Vous pouvez visualiser avec une échelle inférieure à 1, mais dans ce cas, les détails les plus fins ne seront pas rendus avec la même qualité. Gardez à l'esprit que le redimensionnement d'une image a un impact direct sur la netteté perçue, tout comme la distance d'observation. En pratique, cela signifie qu'on devrait utiliser cet outil sur l'image zoomée à peu près au même niveau que celui de l'observation finale supposée et à la même distance d'observation. Ainsi, si vous avez l'intention d'imprimer une image en haute résolution sur un support de 90x60cm et de l'admirer à 30cm de distance, alors cela est raisonnable de la zoomer à 100% et de peaufiner le curseur "0 (les plus petits)". Cependant, dans la réalité de telles impressions de grande taille sont accrochées au mur et sont observées depuis un divan distant de quelques mètres, d'où le réglage des plus petits détails est sans effet, les yeux ne pouvant percevoir le détail à cette distance. Il en va de même pour les images destinées à être redimensionnées (diminution du nombre de pixels) pour utilisation sur Internet ou en pièces jointes de courriels pour des amis ou des clients, non seulement la définition est abaissée mais les images seront vues sur des appareils à faible définition, probablement même pas en plein écran, sur un portable, une tablette ou un smartphone. Dans ce cas aussi, l'utilisation du niveau de détail "0 (les plus petits)" n'apportera aucune différence. Le plus souvent seuls les curseurs "2", "3" et au-dessus apportent un effet utile.

Qu'est-ce qu'une Ondelette ? Application à RawTherapee
Une Ondelette est un procédé qui a été mis au point il y a une trentaine d'années par des mathématiciens ou scientifiques français Jean Morlet et Alex Grossman. Ce procédé est assez proche d'une transformée de Fourier, mais au lieu de s'intéresser à l'image globale, il est possible de scruter le niveaux de détails souhaité, pour chaque zone de l'image en lui appliquant une ondelette. Celle-ci dérivée d'une ondelette mère, est élargie au niveau de détail souhaité, et agrandi à la force souhaitée. Le principe mathématique de la décomposition a été mis au point par Stéphane Mallat.

On décompose une image - par exemple dans une image L*a*b*, on va s'intéresser et décomposer l'image dans ses 3 composantes L*, a*, b*. Cette décomposition produit deux sortes de produits fondamentalement différents :
 * 1) plusieurs niveaux de détails : le choix du nombre de niveaux est fonction de l'utilisation. Le premier niveau correspond à une zone de 2x2 pixels, le dixième niveau correspond à une zone de 1024x1024 pixels. Plus le nombre de niveaux est important, plus le temps de traitement et la consommation mémoire sont importants. Chaque niveau contient uniquement les "variations" (en positif ou en négatif, par exemple le contraste qui donne des données de type 0 +D1, 0-D2). Par la suite j’appellerais ces variations "contraste local". Si une image est absolument uniforme en luminance et couleur, chacun des niveaux ne contiendra aucune information. Ainsi, on peut intervenir séparément sur chacun des niveaux mais avec des algorithmes spécifiques qui tiennent compte de cette particularité. La "qualité" des informations présentes dans chaque niveau est fonction de l'ondelette mère utilisée: soit elle est simple (continue CWT) par exemple le "Mexican Hat transform" utilisé dans Dcraw ou Gimp, soit elle est plus performante (discrète - DWT) avec l'ondelette de Daubechies qu'utilise RawTherapee. La méthode de Kingsbury, que l'on pourrait implanter dans Rawtherapee (discrète et complexe - ComplexWT), certes apporterait une meilleure correspondances des détails, mais se traduirait par un accroissement important des ressources. Par contre, si un contrôle local est un jour possible, la méthode de Kingsbury pourrait être utilisée, afin d'améliorer le rendu de certains détails.
 * 2) une image résiduelle, qui correspond à la différence entre l'image source, et l'ensemble des niveaux. Cette image résiduelle possède les mêmes caractéristiques - au niveau de son traitement - que l'image source, mais amputée des détails. Modifier les caractéristiques des niveaux (contraste, chroma,..) n'a aucune incidence sur l'image résiduelle, et réciproquement.

On voit clairement que selon la finalité recherchée, on s’intéressera à chacun des niveaux, à l’ensemble des niveaux, et/ou à l'image résiduelle.

Après cette décomposition, il est possible d'utiliser les ondelettes à diverses fins :
 * compression d'image,
 * traitement du bruit,
 * incrustation de marque,
 * traitement spécifique pour astronomie en séparant le ciel profond (image résiduelle) des planètes et étoiles (niveaux),
 * etc.

Dans le cas présent, la décomposition en ondelette utilise chacun des niveaux séparément pour la luminance (contraste), la chrominance pour chacun des canaux "a*" et "b*", et l'image résiduelle. Ce traitement va permettre de différencier les actions selon le niveaux de détails de luminance, selon les détails de couleurs, et pour l'image résiduelle selon le nombre de niveaux choisis, il est évident que l'image résiduelle sera différente si on utilise 4 ou 10 niveaux! Il est tout à fait possible d'étendre les processus actuels à d'autres. Par exemple, chaque niveau correspond de fait à l'équivalent d'un calque, en disposant d'outils GUI adaptés, il est possible de ne retoucher des détails (salissures, spots, etc.) uniquement dans les niveaux considérés, et donc mieux préserver la qualité d'image. De la même façon, il est théoriquement possible de reprendre pour l'image résiduelle, les traitements repris par ailleurs dans RawTherapee (Ajustements Lab, Virage partiel, Mixage, etc.). A noter que leurs mise en œuvre éventuelle pourra nécessiter des accroissements de ressources (mémoire) liées à l'ouverture simultanée de plusieurs canaux en décomposition.

Une fois les "traitements" réalisés (niveaux et image résiduelle), on recompose l'image, un peu comme une fusion de calques!

Il existe dans RawTherapee, un module appelé Contrast_by_Detail_Levels/fr - CBDL-, il "ressemble" à "Niveaux d'Ondelettes" mais avec plusieurs différences :
 * 1) le nombre de niveaux est passé de 6 à 10
 * 2) pour chaque niveau on peut intervenir en plus du micro-contraste, sur le micro-chroma
 * 3) possibilité également d'intervenir sur l'image résiduelle.

Rien ne s'oppose à l'utilisation conjointe de "CBDL" et "Niveaux d'ondelettes". CBDL est situé en amont, et ne peut interférer que sur les niveaux 0 à 5.

Niveau Maximum
Ce curseur permet de choisir le nombre maximum de niveaux de l'ondelette. Plus il sera élevé, plus les temps de traitement et les besoins en mémoire seront importants.

Choisir un bas niveau, 4 ou 5 par exemple, va limiter le système aux détails de 16 ou 32 pixels. L'image résiduelle sera encore relativement proche de l'image initiale, les besoins en ressources très limités. Choisir un haut niveau, 9 ou 10 par exemple, va permettre de modifier des détails de 512 ou 1024 pixels. L'image résiduelle ne sera plus qu'un masque, qui permettra de modifier en profondeur l'aspect de l'image, via le travail sur l'image résiduelle; les besoins en ressources sont importants. A noter que les niveaux élevés, sont quasiment toujours utilisables en sortie TIF/JPG (sauf si la taille de l'image est inférieure à 1024x1024), mais l'utilisation dans l'aperçu (preview), n'est possible que si le "crop" est d'une dimension suffisante. La fermeture du panneau de gauche est un moyen de gagner, un niveau. Dans le menu "Contraste", un indicateur apparaît qui donne le nombre maximum de niveaux utilisables dans l'aperçu (preview).

Image entière ou pavés
Une boite de sélection permet de choisir entre : Image entière, gros pavés, petits pavés. Si rien de ne s'y oppose (en général les ressources en mémoire), toujours préférer "Image entière", qui donnera de meilleurs résultats, au niveau des transitions. Réserver l'utilisation des pavés (Tiles) pour les systèmes à faibles ressources, où si le taille des fichiers est très importante (par exemple 50M pixels ou plus)

Bords Performance
Rawtherapee utilise la décomposition en ondelettes orthogonales par la méthode de Daubechies (mathématicienne Belge). Cette méthode peut présenter jusque 10 échelles de coefficients, depuis D2 qui correspond à la décomposition de Haar, jusque D20. Arbitrairement, j'ai choisi D2 (Haar), D4 (standard), D6 (standard plus), D10 (medium) et D14 (high). Plus on accroît le nombre de coefficients, plus l'ondelette sera discriminante et s'accompagnera d'un léger accroissement du temps de traitement. Il n'y a pas de relation directe systématique entre la qualité résultante et le nombre de coefficients, tout dépend de l'image de base:
 * dans certains cas les meilleurs résultats pour la détection des bords seront obtenus avec D2
 * dans d'autres cas avec D6 ou D14.

Ce paramètre a une incidence assez élevée sur la fonction "bords" mais aussi sur la décomposition globale (relation entre image résiduelle et chaque niveau).

Memoire requise
Mémoire requise, en octets, pour le mode "full image", en supposant que 9 niveaux sont utilisés, avec 2 appareils donnés en exemple:

Pentax K10D (10.2MP) 3888 x 2608 Nikon D810 (36.3MP) 7360 × 4912

Base Configuration Minimale pour ouvrir une image dans RawTherapee, quand tous les outils sont off/neutre largeur*hauteur*12 K10D: 116MiB D810: 414MiB Quand l'utilisateur se sert de niveaux contraste, chroma ou teinte targetting/protection niveaux*largeur*hauteur*3 + largeur*hauteur*7 K10D: 329MiB D810: 1172MiB En plus lorsqu'on utilise Avoid Colour Shift largeur*hauteur*4 K10D: 39MiB D810: 138MiB Total K10D: 483MiB D810: 1724MiB

Afficher les niveaux d'ondelette
Ce menu possède 3 méthodes qui permettent de sélectionner et visualiser: et pour chacun de ces critères les 3 directions dans lesquelles s'effectuent la décomposition.
 * 1) chaque niveau de décomposition,
 * 2) les niveaux inférieurs au niveau sélectionné,
 * 3) les niveaux supérieurs au niveau sélectionné

Vous pouvez par exemple, sélectionner un niveau et voir l'incidence des changements de contraste. Vous pouvez aussi, par exemple, sélectionner "au dessus du niveau 8 + image résiduelle", et ainsi voir l'image résiduelle et l'action des divers paramètres du menu "Image résiduelle".

Vous pouvez choisir 3 arrières plans possibles : Le choix doit être guidé par l'objectif visé, notamment :
 * noir;
 * gris;
 * image résiduelle;
 * cherche-t-on à voir ou non l'image résiduelle ?
 * cherche-t-on à voir les détails des plus bas niveaux ?
 * cherche-t-on à utiliser les propriétés d'un masque flou (Unshap Mask)

Évidemment, l'histogramme général tient compte de ces choix et va permettre, par exemple de voir les incidences des réglages sur l'image résiduelle. Cet affichage vise pour l'essentiel, la pédagogie, la compréhension de ce qu'est un système à ondelettes et également l'utilisation d'un masque flou.

Les niveaux de contraste
Dans leurs principes, les niveaux de contraste, sont très proches de CBDL (Contrast By Detail Level), sinon que ce dernier est limité à 6 niveaux!

Par défault, 7 niveaux apparaissent dans ce menu. Vous pouvez réduire ou accroître ce nombre en modifiant Wavelet_levels/fr.

Rappel :
 * plus le nombre de niveaux est réduit, moins le système est sollicité, plus l'image résiduelle est proche de l'originale
 * plus le nombre de niveaux est élevé, plus le système est sollicité (temps de traitement, mémoire), plus on obtiendra d'effets, plus l'image résiduelle prendra l'effet d'un masque.

L'action sur les boutons, "Contrast +" et "Contrast -", permet d'obtenir une progression logique du micro-contraste. Plus pour les faibles niveaux et moins pour les niveaux élevés. Bien sûr, ce réglage est un cas général qui convient pour les faibles niveaux d’ondelettes, mais dans le cas de niveaux élevés, il est souvent préférable, mais c'est affaire de goût, de régler les curseurs des niveaux élevés (7 à extra) avec des valeurs négatives, afin de réduire le contraste pour ces hauts niveaux.

L'action sur le contraste local est linéaire ou homothétique. C'est à dire qu'il y a proportionnalité de l'accroissement ou de la réduction pour toute la plage de contraste local (faible, moyen, maxima).

Chaque niveau correspond à une zone - nombre de pixels concernés - variable selon le choix du niveau. Attention, l'action sur un niveau n'est efficace que si et seulement si le contraste original avant décomposition contient des zones contrastées pour ce niveau. Si une zone est uniforme en contraste, l'action du curseur sera nulle.
 * 1) niveau 0 : 2x2 pixels
 * 2) niveau 1 : 4x4 pixels
 * 3) niveau 2 : 8x8 pixels
 * 4) niveau 3 : 16x16 pixels
 * 5) niveau 4 : 32x32 pixels
 * 6) niveau 5 : 64x64 pixels
 * 7) niveau 6 : 128x128 pixels
 * 8) niveau 7 : 256x256 pixels
 * 9) niveau 8 : 512x512 pixels
 * 10) niveau Extra : 1024x1024 pixels

Le niveau "Extra", est toujours accessible en sortie TIF/JPG (sauf si la taille du fichier est inférieure à 1024*1024), mais dans le mode "Aperçu" (Preview), ce niveau ainsi que dans certains cas les niveaux 7 ou 8, n'est accessible que si la taille du "Crop" est suffisante. Un affichage du nombre maximum de niveaux disponibles dans le "Preview" est fourni, en dessous des curseurs.

Vous pouvez agir de manière limitative ou non sur la plage de luminance ci-après, et sur la teinte, voir à ce sujet Wavelet_levels/fr

All luminance
Si vous choisissez "All Luminance", chaque curseur aura la même action quelque soit, la luminance de la zone concernée, ombres, tons moyens, hautes lumières.

Highlight-Shadow
Si vous choisissez "Highlight - Shadow", plusieurs curseurs apparaissent qui permettent de cibler l'action :
 * sur une plage de luminance pour les hautes lumières (graduée en Luminance L*a*b* 0..100), avec la possibilité de choisir le nombre de niveaux concernés à partir du niveau 0 (celui des plus fins détails)
 * sur une plage de luminance pour les ombres (graduée en Luminance L*a*b* 0..100), avec la possibilité de choisir le nombre de niveaux concernés à partir du niveau 9 (celui des plus gros détails).

Par exemple, si le réglage des "hautes lumières" est "Top 75 - 98" et "Bottom 50-100", et le nombre de niveaux utilisés est 3:
 * l'action des 3 premiers curseurs sera à 100% sur la plage "Top 75-98",
 * l'action sera nulle entre une luminance de 0 et 50,
 * l'action, linéairement progressive, sera effectuée pour les luminances comprises entre Bottom 50 et Top 75, et entre Top 98 et Bottom 100.

On applique le même raisonnement pour les ombres, à partir des niveaux les plus élevés, par exemple seuls les niveaux 9, 8 peuvent être concernés. Si la somme des niveaux utilisés via les curseurs 'Highlight levels" et "Shadows Levels" est inférieure à 9, les niveaux intermédiaires auront une plage de luminance totale.

Ce dispositif permet de centrer l'action sur des plages de luminance, par exemple accroître les contrastes pour les fins détails et les luminances élevées, réduire les contrastes sur les plus gros détails pour les luminances faibles.

Chroma
La construction de ce module est similaire à celui du module Contraste. Vous disposez de 3 choix :
 * 1) All chroma : dans ce cas, toute la plage de chroma est concernée par la modification de chaque niveau, indépendamment des niveaux de contraste
 * 2) Pastel - Saturated : ici, vous pouvez choisir 2 plages limitatives, pour les tons pastels et les tons saturés, indépendamment des niveaux de contraste
 * 3) Link contrast levels : ici, les modifications de chroma sont directement liées à celles du contraste

All Chroma
Chaque niveau d'ondelette agit sur toute la plage de chroma de l'échelle L*a*b*, (chroma = sqrt(a*a + b*b) qui est une échelle ouverte, mais que j'ai limité à 0..140, ce qui devrait satisfaire la quasi totalité des cas.

Vous disposez de 9 curseurs qui permettent - comme ceux agissant sur le contraste - de jouer sur la chroma selon le niveau de détails.

Même remarque, que pour le contraste, l'action n'est possible que si l'image originale contient des zones correspondants au niveau choisis où la chroma varie.

Pastel - Saturated
Vous pouvez agir:
 * d'une part sur les plages des tons pastels et saturés, avec les zones de transition, même mode d'emploi que pour contraste Wavelet_levels/fr
 * d'autre part sur la répartition de l'action entre les tons pastels, et les tons saturés, par défaut le système est réglé sur 5, c'est à dire, que la plage limitative des tons saturés sera effective pour les 5 premiers niveaux, et la plage limitative sur les tons pastels pour les derniers niveaux les plus élevés.

Link contrast levels
Ici l'action sur la chroma - dans la mesure où bien sûr celle-ci varie dans l'image originale - sera directement proportionnelle aux réglages des curseurs des niveaux de contraste. Cette proportionnalité est obtenue à l'aide du curseur "chroma link": à 0 aucune action sur la chroma, à 100 action maximum.

Virage partiel
Ce "virage partiel" (toning) n'a peut-être pas la bonne appellation, ainsi que l'appellation des courbes, mais je n'ai rien trouvé d'autre...

On ne peut pas agir directement sur la teinte (hue) dans les niveaux d'ondelette, car seuls les canaux a* et b* sont décomposés, et on ne peut pas (ou peut être très difficilement) faire un lien mathématique des canaux a* et b* décomposés avec la teinte.

Je propose néanmoins 2 courbes bâties sur le même principe que la courbe "chroma", en abscisse le nombre de niveaux (limités à 9),en ordonnée la force de l'action, renforcement pour les valeurs supérieures à la ligne horizontale, affaiblissement pour les valeurs inférieures :
 * une courbe agissant sur l'ensemble des tons rouge-vert ;
 * une courbe agissant sur l'ensemble des tons bleu-jaune ;

Vous obtenez ainsi la possibilité de faire varier de manière différenciée, selon que le canal a* ou b* de l'image originale varie ou non, la chroma résultante, renforçant ou affaiblissant selon le niveaux, les teintes concernées.

Remarque : si les 2 courbes "Opacité Rouge-vert" et "Opacité Bleu-jaune" sont identiques, le système se comporte de la même manière que la courbe "chroma"

Débruitage et ajustements
Ces 4 doubles curseurs, viennent compléter "Noise Reduction (général)" et "Bords netteté (wavelet)".

En effet la gestion du bruit est toujours un compromis. L'histoire du traitement du bruit dans Rawtherapee est caractéristique de ce compromis:
 * où faut-il situer le débruitage ? au début de processus, à la fin ?
 * sur quoi et comment agir ?

Après plusieurs tâtonnements, le débruitage général a été placé juste au début du processus de traitement, avec le choix de :
 * traiter la luminance (avec des ondelettes) comme un bloc, c'est à dire pas de différence entre les niveaux. Par contre la différenciation tient au niveau de la prise en compte de la luminance (courbe)
 * traiter la chrominance avec un processus différent. Celle-ci nécessitant généralement des niveaux d'ondelettes plus élevés (4 à 7) et un traitement plus complexe.
 * d'ajouter un traitement "Fourier" pour affiner la luminance
 * d'ajouter un median

Alors, pourquoi ajouter un traitement avec "ondelettes niveaux" parce qu'il:
 * est en fin de processus, et va ainsi permettre de réduire l'impact du bruit "ajouté" par les processus généraux (exposition, courbes, gamma...)
 * agit séparément et indépendamment sur chacun des 4 premiers niveaux
 * permet la réduction de l'incidence du bruit pour le traitement "Noise reduction" en ondelettes, par exemple pour les ciels
 * ajuste conjointement le traitement du bruit et le niveau d'amplification / réduction de chaque niveau, par exemple dans les images d'astronomie.

Ici vous disposez d'une possibilité de retouche des 4 premiers niveaux (ceux des plus petits détails) et ainsi "ajuster" le débruitage et le contraste, notamment pour des images peu bruitées, ou à la suite d'un débruitage qu'on aura volontairement rendu moins agressif pour conserver des détails.

Vous pouvez si vous le souhaitez lier cette action à celle de "bords netteté" pour changer : a) le répartition de l'action sur les premiers niveaux; b) la prise en compte du bruit dans le contraste local.

Attention à ne pas confondre, ce débruitage - qui retire du bruit de luminance - à la fonction "Threshold low (noise)" dans "Edge detection" qui prend en compte le bruit (sans le réduire), pour ne pas accroître l'accentuation dans ces zones.

Bord netteté (luminance)
Ce dispositif, s'ajoute à ceux déjà présents dans RawTherapee (Masque flou USM, Déconvolution, Bords...). Son principe repose sur l'utilisation de la décomposition en ondelettes. Bien sûr, vue de loin cela s'apparente vaguement à "Masque Flou USM" dans la mesure où la décomposition en ondelette crée une image résiduelle qu'on peut assimiler à un masque. Mais là s'arrête la comparaison. La décomposition en niveaux d'ondelettes avec la méthode "Daubechies" est en quelque sorte une reconnaissance directes des contours, car elle scrute chaque niveau de détails. On a de fait le premier niveau (0) qui contient des détails d'un "rayon" de 1 pixel, le deuxième des détails d'un "rayon" de 2 pixels, etc.

Si vous souhaitez obtenir des résultats proches de "USM" ou "Deconvolution", il est quasi obligatoire de sélectionner la case à cocher "Détection des bords" et choisir une valeur élevée de "sensibilité du gradient" (70 ou plus - defaut=90). De plus il n'est pas souhaitable d'activer les premiers niveaux "Contrast (levels)" (ou CBDL) qui viendraient "perturber" le bon fonctionnement de l'algorithme. Par contre il est possible d'utiliser 'refine' dans "Denoise and refine" (avec la case à cocher "link with edge sharpness strength") qui viendra moduler l'action de "edge sharpness selon les niveaux modifiés.

Algorithme de base
Si l'algorithme s'intéresse uniquement aux détails les plus petits, et si on met en référence une valeur (que j'aie appelé "Rayon") et qu'on la compare au niveau en cours, on est capable d'ajuster l'accroissement du contraste uniquement pour ces niveaux, avec des valeurs d'accroissement nettement supérieurs à ceux que l'on peut obtenir avec les 10 curseurs "Contraste".

Vous disposez de 3 curseurs :
 * 1)  Rayon (Radius) : Son étendue va permettre d'accroître l'effet de perspective. La progression n'est pas linéaire et suit grosso modo une courbe en cloche. Son action n'est pas nulle si le curseur est à zéro. L'action discriminante est maximale (pour les niveaux d'ondelette faibles), pour des valeurs de rayon faibles, sans pouvoir prédire son niveau d'action. La valeur du "rayon" est impactée par le curseur "detail".
 * 2) Force : traduit la force de l'action. Mettre à zéro ce curseur annule toute action
 * 3) Détail : permet une répartition différente selon les niveaux, plus importante (en répartition) pour les niveaux faibles (0, 1..2) lorsqu'on déplace le curseur vers la droite.

et d'une combo-box avec 3 choix pour le premier niveau d'ondelettes :
 * inchangé : la répartition de l'algorithme de base est inchangée
 * Renforcé : le premier niveau est nettement plus pris en compte que les autres
 * Réduit : le premier niveau est nettement moins pris en compte que les autres

Dans certains cas, l'action conjointe de cette combo-box avec le curseur détail (Détail < 0 et combo-box=Réduit) peut amener d'importants artefacts.

Cette netteté est peu sensible au nombre maxima de niveaux, car par principe il ne s'intéresse qu'aux niveaux les plus faibles, qui sont toujours décomposés.

Lorsque vous activez dans "Denoise and Refine : Link with edge sharpness strength", vous avez la possibilité de modifier la répartition initiale de la force, en changeant manuellement les valeurs des niveaux 1, 2 et 3. Par exemple vous pouvez changer de manière importante la répartition initiale entre ces 3 niveaux en augmentant le niveau 1.

Contraste local
Vous pouvez agir sur la répartition du contraste local selon le niveaux initial de contraste par niveaux d'ondelettes. Ce niveau de contraste local provient de la décomposition en ondelettes et peut avoir été modifié par les traitements précédents. Dit autrement, vous pouvez par exemple : Ceci aura comme conséquences de modifier l'effet de perspective / relief de l'image...et/ou de réduire les contrastes pour les très faibles niveaux de contraste initial par exemple pour ne pas accroître les effets de brume ou de voile lorsqu'on accroît le contraste d'un niveau et en corrélation d’accroitre ou réduire la sensibilité au bruit.
 * réduire le contraste local pour les faibles niveaux de contraste initial
 * accroître le contraste local pour les niveaux moyens
 * réduire voire annuler le contraste local pour les valeurs élevées.

Vous disposez de 2 outils :
 * un double curseur ajustable : ces 4 curseurs sont une représentation des contrastes minima, moyens, moyens + un écart-type et maxima. Déplacer chaque curseur modifiera le contraste dans la plage de contraste concernée par le curseur. Par exemple, déplacer à gauche le curseur "haut-gauche" va réduire le contraste local, pour chaque niveau, vers la plage de contraste "moyenne".
 * une courbe, qui par défaut à l'aspect d'une courbe Gaussienne (en cloche) : a) le milieu de l'abscisse correspond à la valeur moyenne de contraste local, b) les deux-tiers de l'abscisse correspondent au contraste + un écart-type.

Détection des bords
Cet algorithme n'a aucun point commun avec ce qu'on peut retrouver dans les logiciels du commerce (avec masque, détection de halo,...). Il est utilisé - sans que j'ai pu disposer du code - en imagerie médicale couleur (je me suis inspiré d'une thèse sur le traitement d'images "Photographie" et "Médicale" en utilisant le principe de l'algorithme, mais en aucun cas ces algorithmes sont spécifiques ou dédiés à l'imagerie médicale) et dans les logiciels d'astronomie. Cet algorithme utilise pour la détection des bords des principes généraux, comme la sensibilité de gradient, un filtre passe-bas pour ne pas traiter les parties bruitées de l'image, un filtre passe-haut qui lui va sélectionner les contours. Bien sûr tout est fonction de la qualité de la décomposition en niveaux et de l'usage... : La méthode actuelle de décomposition (DWT - Daubechies) présente des insuffisances notamment pour les diagonales...une solution radicale d'amélioration (mais c'est une autre affaire - code, mémoire,... - ) est d'utiliser la Méthode de Kingsbury (Complex WT).
 * est-ce que le niveau 0, reprend les détails de 1 pixels et uniquement eux, et ainsi de suite pour les autres niveaux ?
 * est-ce que l'accroissement souhaité de contraste sera suffisamment continu pour ne pas créer d'artefacts ?

Vous disposez de 3 curseurs :
 * Sensibilité du gradient : plus vous déplacez le curseur à droite, plus l'algorithme de détection sera efficace, moins les effets du contraste local seront sensibles
 * Passe-bas (bruit) : ce curseur met en place un filtre Gaussien (qui varie d'une matrice 3x3 et d'un sigma=0.55, à une matrice 5x5 et un sigma de 1.4) qui n'agit pas directement sur l'image, mais sur l'amplification souhaitée. ce filtre va permettre : a) de réduire la prise compte du bruit, b) de ne pas prendre en compte les valeurs trop faibles de gradient
 * Passe-haut (détection) : ce curseur prend en compte la détection de la continuité des 3 composantes de la décomposition en ondelettes : verticale, horizontale et diagonale. Plus ces 3 composantes seront proches, plus l'amplification due à la détection des bords - et à la place du curseur - sera grande. A l'inverse plus ces 3 composantes seront différentes, plus la réduction sera importante.

Les résultats obtenus seront différents de ceux des algorithmes traditionnels (Masque flou, déconvolution...).

Je viens d'ajouter (juillet 2015), 3 fonctions qui étaient soit désactivées, soit présentes mais non documentées en option. Les valeurs par défaut correspondent aux valeurs précédentes du fichier "option".
 * Edge sensitivity: ce curseur modifie la sensibilité de l'algorithme qui compare pour chaque pixel les valeurs des directions horizontales - verticales et diagonales. Plus le curseur aura une valeur faible, plus les valeurs de ses 3 composantes seront différentes, plus le curseur aura une valeur importante, plus ces valeurs seront proches, plus on sera sur un bord.
 * Base amplification : ce curseur donne une valeur initiale pour les calculs de l'algorithme. Plus les valeurs seront élevées, plus la différenciation "edge" - "non edge" sera grande, mais plus le risque d’artefacts sera important.
 * Neighboring pixels : cet algorithme prend en compte les pixels voisins, et aura pour conséquence d'accroître la détection de bord. Vous avez 3 choix: none (sans), low (bas), high (élevé).

Sharp-mask et Clarté
La fonction "sharp-mask" est une nouvelle manière de traiter l'accentuation déjà présente dans RawTherapee ("Unsharp mask", "deconvolution", et "edge sharpness wavelet". Elle peut ou non se combiner avec ces 3 autres approches.

Utilisation d'un masque
Traditionnellement les masques flous sont utilisés pour l'accentuation des bords et accroître le sentiment de netteté des images. Pour cela une des méthodes utilisées est dite "Unsharp Mask": elle consiste à élaborer un masque flou de type gaussien - pour chaque pixel et de manière récursive on floute les pixels voisins - ensuite on soustrait ce masque de l'image originale, ce qui amène une accentuation. Les rayons utilisés sont faibles de l'ordre de grandeur de moins de 1 à quelques pixels.

Je me suis inspiré de ce principe pour utiliser un masque - non pas gaussien - mais où le masque utilisé correspond à une partie de la décomposition en ondelettes.
 * soit, sur le principe de "Unsharp Mask" utilisé dans Rawtherapee, en privilégiant les faibles 'rayons' (dans le cas des ondelettes cela n'a pas le même sens et il vaut mieux parler de niveaux [levels] et de masque de netteté (sharp mask). Les premiers niveaux peuvent être utilisés (jusque 4..) mais rien n'interdit d'aller au-delà.
 * soit, en privilégiant les très forts 'rayons' (niveaux élevés...qui au niveau 10 correspond à un 'rayon' de 512 pixels), et accroître l'impression de contraste local et de saturation locale de l’image. Certains utilisent la notion de Clarté (clarity).

Sharp-mask : Masque d’ondelettes pour accroître la netteté (accentuation)
Pour élaborer le masque, qui ici sera un masque de netteté (sharp mask) et réaliser l'accentuation: Vous pouvez changer le réglages "level 3" et mettre plus ou moins, cela revient à changer le rayon dans les méthodes traditionnelles (Unsharp mask...)
 * dans le menu "Sharp method" sélectionnez "Sharp-mask". Automatiquement les réglages de "Wavelet settings" vont être modifiés
 * 1) Background = black
 * 2) Process = below
 * 3) Level 3

Vous pouvez accroître ou réduire l'apparence du masque en agissant sur les premiers niveaux de contraste et/ou de chroma et/ou de "edge sharpness", mais aussi sur 'Denoise and refine'.


 * Vous pouvez agir sur la valeur de cette fusion en agissant sur les curseurs 'Merge luma' et 'Merge chroma'

Clarté - Masque d’ondelettes pour accroître le contraste local et saturation locale
Sélectionnez "Sharp method" = clarity, automatiquement les réglages de "wavelet settings" seront changés


 * Background = residual
 * Process = above
 * Level 7

Vous pouvez changer "level 7" et mettre plus (à condition que le réglage du curseur "wavelet levels" l'autorise) Plus le niveau sera élevé plus l'action "clarté" sera importante.


 * Vous pouvez agir sur la valeur de cette fusion en agissant sur les curseurs 'Merge luma' et 'Merge chroma'

Retinex in wavelet
Pourquoi un "Retinex" dans wavelet alors qu'il en existe déjà un dans "Exposure":
 * parce qu'il permet des effets photographiques différents, en combinant ondelettes et Retinex
 * parce qu'il permet aussi de traiter les fichiers Non Raw

La combo-box "Retinex method"
L'algorithme utilisé ici est semblable à celui mis en place à Retinex/fr. Tous les principes généraux sont identiques et certains réglages sont les mêmes. Par contre, du fait de la position dans "Wavelet" (Residual Image) ou à la fin du process 'Final Touchup', beaucoup de réglages sont supprimés ou simplifiés - Retinex/fr situé avant conversion RGB et avant tout traitement colorimétrique amène des contraintes qui ne sont plus de fait ici.

Avantages (+) et inconvénients (-) de Retinex/fr par rapport à Retinex in wavelet

 * (+) pas de différences entre "Preview" et image finale
 * (-) impossibilité de traiter TIFF / JPG
 * (+) pas d'artefacts liés aux très grands rayons
 * (+) possibilité d'utiliser les modes L*a*b* et HSL
 * (-) processus plus complexe
 * (-) traitement plus lent
 * (-) artefacts liés à la position dans le processus
 * (-) pas de Retinex chroma

Les 2 méthodes "Retinex wavelet"
Vous disposez de 2 méthodes - qui utilisent le même algorithme, mais avec des réglages de base différents :
 * Process located in 'Residual' : l'algorithme n'affecte que l'image résiduelle, qui est bien sûr liée aux nombre de niveaux. Plus le nombre de niveaux est élevé, plus l'impression de relief / perspective sera important. Il est quasi indispensable de 'compenser' l'action sur l'image résiduelle, par une action sur les niveaux (contraste, chroma, edge sharpness...). Ce mode peut amener une réduction des artefacts par exemple ceux liés à la couleur magenta des hautes lumières.
 * Process located in 'Final Touchup' : l'algorithme affecte l'ensemble de l'image et est donc indépendant du nombre de niveaux. C'est le dernier traitement du processus "Wavelet". D'une certaine manière cet algorithme est très proche de celui présent dans Retinex/fr, mais il y aura des différences entre Preview et l'image de sortie...
 * Il est possible de combiner l'une ou l'autre de ces méthodes avec l'ensemble des traitements Wavelet pour aboutir à des effets spéciaux de type "Tone mapping"...
 * Par souci de simplification il n'y a qu'un jeu de curseur pour les 2 méthodes (Residual et Final Touchup).
 * Afin de rappeler à l'utilisateur l'activation ou non de 'Retinex wavelet', un label est affiché dans "Final Touchup" si "Retinex wavelet method final touchup' est activé.

Les différents réglages

 * Retinex method : avec "Low" "Uniform" "High"
 * Low :améliore les zones de faibles intensités
 * Uniforme : tend à traiter les intensités faibles et les intensités fortes de manière équilibrée.
 * High : améliore le rendu des zones les plus claires
 * Strength : combine l'image "Haze-free" avec l'image originale. Strength=0 n'apporte aucun traitement "Retinex" à l'image. Strength=100 amène un traitement total, seule l'image "Haze-free" est affichée. Des valeurs inférieures à 50 sont recommandées.
 * Radius (Neigboring pixels) : prend en compte les pixels voisins par un algorithme "Différence de Gaussien", plus les valeurs sont fortes, plus l'avant plan sera affecté. Plus les valeurs sont faibles plus les zones distantes seront affectées. Agit directement sur le fichier "Transmission Map". Les valeurs de base de radius prennent en compte la position différente des algorithmes Retinex dans le processus.
 * Chroma : applique Retinex à la composante Chroma. Pour simplifier ce sont les mêmes réglages que pour la luminance qui sont utilisés. Le curseur 'Chroma' agit en proportionnalité de 'strength'. Si chroma=0, pas d'action, si chroma=50 "Retinex chroma" sera à 50% de 'strength'
 * Contraste (Variance) : ce coefficient pondère la moyenne et l'écart-type de "Transmission map". C'est un facteur clef de rendu de l'image. Il agit sur les seuils haut et bas de contraste du fichier "Transmission Map", plus les valeurs sont faibles plus l'image sera contrastée, plus les valeurs sont élevées plus l'image sera naturelle et les artefacts réduits. Ce contraste (variance) n
 * Gain et Brightness (Offset): Utilisés en conjugaison, ils permettent de positionner correctement l'image "haze-free". Vous pouvez vous aider des information contenues dans le GUI, et situer Min proche de zéro et Max proche de 32768. Gain et Offset agissent sur l'image "Haze-free" et sont sans action sur le fichier "Transmission Map"
 * Scale : des valeurs réduites favorisent le contraste (surtout avant-plan), mais peuvent générer des artefacts (impression de relief), des valeurs élevées adoucisent l'image mais peuvent accroître le bruit.
 * Threshold : ce coefficient agit sur les valeurs maximales et minimales de "Transmission map"
 * Transmission Map : cette courbe permet d'interagir avec le fichier "Transmission map", l'abscisse de la courbe représente la base de distribution de "Transmission map" (MinT, moyenne [mean], MaxT). Abaisser la partie gauche va réduire les valeurs minimales (celles relatives à l'avant plan) et réciproquement, abaisser la partie droite va réduire les valeurs maximales (celles relatives à l'arrière plan) et réciproquement. Cette courbe est un point clef de régulation de la qualité perçue de l'image.


 * un traitement Gaussien est appliqué afin de réduire les artefacts. Vous pouvez agir sur les ombres, les hautes lumières et le rayon. L'accroissement des temps de traitement est "raisonnable"

Reduce artifacts in blue sky
Souvent les images incorporant un ciel bleu sont légèrement bruitées. Ceci se caractérise par un moutonnement de taches moins teintées que les autres. Le procédé par ondelette du fait qu'il accroît le contraste local, peut générer de petits artefacts disgracieux. Cocher la case, va mettre en œuvre un median qui réduira ces artefacs.

N'hésitez pas à utiliser l'outil "Denoise" qui se situe en amont dans le processsus.

Hue tones (skin) targetting protection
Ce curseur est lié d'une part aux actions des curseurs et courbes "contrast" et "chroma" (Toning n'est pas concerné), et d'autre part au curseur "hue range (skin)"

Déplacer vers la droite va atténuer l'action des curseurs contraste et de la courbe chroma, pour la plage de teinte sélectionnée (par défaut "skin" - la peau). A l'inverse, déplacer le curseur vers la gauche va cibler l'action sur la plage de teinte sélectionnée

Hue range (skin)
Permet de sélectionner une plage de teinte (hue) qui pourra être modifiée par les curseurs "contraste" et la courbe "chroma". Par défaut, c'est la plage de teinte de la peau qui est sélectionnée. La plage est graduée en échelle L*a*b* : 100 * PI, +100*PI

Avoid Color Shift
Applique une action sur la chrominance et la luminance de l'image reconstituée, afin de prendre en compte l'espace de travail et de remettre les données via une intention relative à l'intérieur du gamut de l'espace de travail.

Image Résiduelle
A titre de rappel, l'image résiduelle :
 * utilise le même format de données que l'image originale (source) avant décomposition.
 * correspond à la différence entre l'image originale et la somme des niveaux décomposés (l'action sur chaque niveau n'a aucune incidence sur l'image résiduelle).
 * plus le nombre de niveaux est élevé, plus l'image résiduelle devient un masque, avec de plus en plus d’écarts par rapport à l'original.

La modification de l'image résiduelle est un des points clefs du traitement en ondelettes.

Par exemple cela va permettre :
 * 1) de travailler les ombres et les hautes lumières indépendamment des détails
 * 2) de réduire le contraste (et la chroma) global, pour pouvoir mieux percevoir les micro-contrastes
 * 3) modifier la chrominance pour réduire les artefacts dus à une trop grande action sur les niveaux (par exemple pour les ciels)
 * 4) réduire le voile atmosphérique  - en conjonction ou non avec d'autres outils (wavelet final touchup, Lab adjustement CC, exposure black, etc.)
 * 5) accroître les effets de perspective-relief de  type "tone-mapping"
 * 6) etc.

A noter que l'image résiduelle est quasi exempte de bruit. En effet le bruit de luminance se retrouve principalement dans les 3 ou 4 premiers niveaux de décomposition, le bruit de chrominance étant généralement situé vers les 4ème, 5ème et 6ème niveaux. Si le réglage général du nombre de niveaux se situe à 7 ou au-dessus, on peut dire que toutes les actions visant l'image résiduelle (contraste, chroma, etc.) n'auront quasiment aucune incidence sur le bruit.

Les curseurs Ombres et Hautes Lumières
En accroissant l'action de "Ombres" et en réduisant l'action de "Hautes Lumières", on débouchera les ombres et récupérera les hautes lumières. Cette action est absolument comparable à celle du module Shadows/Highlights/frdans le menu "Exposition". Bien sûr on peut aussi procéder à l'inverse... Attention, toutefois, ce dispositif ne remplace pas le principe de reconstruction des hautes lumières.

Deux curseurs complémentaires "Seuil" (Threshold) permettent d'affiner le travail. Par défaut :
 * celui relatif aux ombres est réglé à 30 (sur l'échelle 0..100 de la luminance L*a*b*), ce qui revient à dire que les valeurs de luminance inférieures au seuil seront modifiées et d'autant plus que la luminance réelle est faible;
 * celui relatif aux hautes lumières est réglé à 70.

Le curseur contraste
C'est un des points clefs du traitement... Par exemple en réduisant modérément le contraste, cela laisse plus de marge pour accentuer celui de chaque niveau, et ainsi accroitre les effets de perspective et de relief.

La combo-box 'Compression Method'
Vous avez le choix entre 2 méthodes: a) contrast; b) Tone-mapping. La seconde exécute un tone-mapping pour l'image résiduelle, à part la compression et le gamma, les réglages de la section "Tone-mapping" sont utilisés. Attention les réglages globaux afin d'obtenir des images correctes, nécessitent accroissement du contraste liés aux niveaux; que ce soit par "Contrast levels" ou par "edge sharpness".

Dans le premier cas (contraste) le curseur compression, réduit la plage utile des données (compression des données et de l'histogramme). Vous pouvez modifier la répartition ombres / lumières à l'aide du curseur gamma. A l'inverse en réduisant la compression, on va pouvoir réduire les effets de voile atmosphérique - sans égaler les algorithmes spécialisés (quoique!!) - sans toucher au reste de l'image; bien sûr rien n'interdit par ailleurs de modifier d'autres réglages comme "edge sharpenss" (qui permet une action différenciée)ou "contrast levels", "final touchup", "Lab adjustement CC"...

Cette méthode va en outre permettre: a) soit de mieux traiter des images à très forte dynamique; b) soit à accroitre (ou réduire) les effets de relief et de perspectives liés à l'utilisation de la méthode balance.

La gestion de la chroma
Même remarque pour l'utilisation du curseur "chroma" que pour le curseur contraste. Mais, en plus vous pouvez intervenir de manière différenciée sur les couleurs :
 * par défaut le "curseur" "teinte" (hue) est réglé sur la plage des bleus (ciel), mais bien sûr vous pouvez le modifier pour par exemple s'attacher au couleurs des fleurs ou de la peau.
 * le curseur "hue tones targetting/protection", permet :
 * 1) en le déplaçant vers la droite, de réduire l'action du curseur chroma par rapport à la couleur choisie
 * 2) en le déplaçant vers la gauche de cibler l'action sur la couleur choisie
 * 3) en position centrale, le curseur "chroma" a le même effet sur toute la gamme des couleurs.

La courbe teinte = fonction (teinte)
J'ai introduit cette courbe essentiellement à des fins pédagogiques, pour montrer ce que peut apporter une gestion "décalée" de l'image résiduelle. Les changements de teintes sur l'image résiduelle ne sont pas - évidemment - répercutés intégralement sur l'image globale et pas du tout sur les niveaux. Vous pouvez ainsi amener des effets spéciaux en modifiant la teinte de l'image résiduelle et la chroma des niveaux. Ceci permet d'envisager, si l'utilisateur le souhaite :
 * la mise en place d'un ajustement local sur l'image résiduelle
 * d'autres ajustements, semblables à ceux de "Lab adjustements" (L=f(H), C=F(H), etc.)

Toning and Color Balance
Cette fonctionnalité de l'image résiduelle a deux objectifs :
 * 1) Pour des fortes valeurs des réglages, elle va permettre de créer des effets spéciaux, similaires à ceux de "Color toning", mais en séparant l'action de la zone de l'image résiduelle de celle des contrastes locaux. Bien sûr vous pouvez utiliser cet outil en conjonction ou non avec l'outil "Toning" qui provient de la décomposition
 * 2) Pour les faibles valeurs, vous pourrez corriger la balance des blancs manuellement. Par exemple imaginez une scène avec un avant plan (là où il y a les contrastes locaux, là où les niveaux de décomposition joueront), avec des détails dans les ombres, et un arrière plan (ciel majoritairement) ensoleillé. Vous pourrez régler avec l'outil "White Balance" (température, Spot WB, etc.) la balance des blancs pour la partie plus dans les ombres, puis avec l'outil "Wavelet" (Toning and Color Balance", modifier pour l'arrière plan (image résiduelle dans ce cas) la balance des couleurs pour les hautes lumières, tons moyens et ombres.

A noter que cet outil fonctionne en mode "Lab" et donc ne met à disposition que 3 fois 2 curseurs :
 * pour la composante "b*" = bleu jaune
 * pour la composante "a*" = vert rouge (en réalité un léger magenta)

Watermark - Masque d'ondelettes pour générer des tatouages d'images (et sharp-mask)
Une des manières de réaliser des "watermark" est d'utiliser la décomposition en ondelettes. Du fait de la conception de Rawtherapee, il est aujourd'hui quasiment impossible de traiter 2 fichiers dans la même session. Ceci m'a conduit à trouver une autre solution qui pourra à terme être utilisée pour d'autres applications comme par exemple la fusion de plusieurs images HDR. A ce jour le principal obstacle tient à l'interface GUI qui ne permet pas de sélection locales à la souris.

Dans le cas du "tatouage d'images" ("watermark"), j'ai imaginé la solution décrite ci-après...je n'ai aucun élément de comparaison avec d'autres produits!

Cette solution est simple:


 * vous ouvrez dans RawTherapee un fichier de l'image qui tiendra lieu de "tatouage" (watermark). Cette image :
 * peut être de n'importe quel format, RAW, TIF, JPG,...à condition qu'elle soit reconnue par l'éditeur de Rawtherapee.
 * peut avoir été élaborée à l'aide Gimp ou de Photoshop ou Openoffice draw, etc.
 * peut avoir n'importe quelle dimension, si celle-ci est supérieure à la taille de l'image courante (celle à laquelle on "ajoutera" le "watermark"), les parties droite et inférieure seront tronquées.
 * afin de pouvoir déplacer le "tatouage" dans l'image, il est important que l'image qui sert de support (TIF, JPG...formats reconnus par RT) soit de faible taille par rapport à l'image à graver. Si par exemple le texte à tatouer fait 150x30 pixels, l'image TIF ou JPG doit être de taille avoisinante (par exemple 200x40 pixels)
 * il est important de rappeler le principe des "wavelets" : seules les variations sont prises en compte dans les niveaux d'ondelettes. Il est donc important que le fond soit le plus possible uniforme, et les textes, schémas, dessins doivent avoir un maximum de "relief".


 * vous traitez, si c'est nécessaire, l'image (que j'appelle "First image") avec RawTherapee : contraste, saturation, etc.

Lorsque vous estimez que l'image - qui constituera le tatouage - est correcte, vous pouvez la sauvegarder. Puis rendez-vous dans le menu "Merge Files and Watermark", activez. A noter que si vous souhaitez marquer plusieurs images avec le même tatouage, un seul fichier *.mer est nécessaire, et ainsi le marquage devient simple et assez rapide.
 * ouvrez l'onglet "wavelet levels" et activez le.
 * sélectionnez "Save L*a*b* for Watermark"
 * immédiatement, la configuration des "Wavelet settings" sera réalisée automatiquement:
 * Background =black
 * Process = below or equal the level
 * level 7
 * La seule chose que vous pouvez changer, est le niveau, ceci dépend du texte lui même, si les caractères sont petits et fins, un niveau de 4 ou 5 peut convenir, à tester selon goût, et selon le tatouage...
 * Cliquez sur la boite "Save L*a*b* datas (*.mer) : une boite de dialogue va s'ouvrir, choisissez le dossier où seront stockées ces données, par exemple entrez "tatou1.mer"

Vous pouvez, si vous le souhaitez utiliser le menu "watermark" pour réaliser un "sharp-mask" et agir sur l’accentuation de l'image. Pour réaliser cette action, le fichier watemark sera le même que le fichier en cours. De plus lors de l'opération "Save L*a*b* for watermark" vous devrez baisser le "level" qui est à 7 par défaut, et le positionner sur 2 ou 3 selon l'effet recherché.

Le système est maintenant prêt pour assurer la fusion de 2 images : l’image courante que vous souhaitez "tatouer", et les données contenant les informations à tatouer.

Ouvrez dans l'éditeur de RawTherapee, l'image à tatouer :
 * Traitez cette image comme il vous convient (balance des blancs, contraste, etc.)
 * ouvrez (si ce n'est déjà fait) l'onglet "Wavelet" et activez le.
 * allez au menu "Merge files and Watermark", activez
 * sélectionnez "Load L*a*b* and merge"
 * cliquez sur la boite "file": une boite de dialogue s'ouvre. Choisissez le dossier et le fichier du tatouage (ici tatou1.mer)
 * réglez l'intensité souhaitée de la luminance et de la chroma avec les 2 curseurs appropriés. Le curseur chroma permet - avec les valeurs négatives - de changer la couleur du tatouage.
 * positionnez le tatouage où vous le souhaitez, avec les 2 curseurs "vertical et horizontal shift". Il est évident que si la taille de l'image du tatouage est plus grande ou égale à celle de l'image à tatouer, aucun déplacement n'est possible!
 * vous pouvez voir l'image du tatouage - telle qu'elle sera incrustée - en activant la boite "Preview and Save method = First image"

Voilà c'est terminé, rien n'interdit de faire d'autres traitement à l'image...

Masque d'ondelettes pour générer des images HDR (simple)
Le processus de traitement sera identique au cas précédent (Watermark), mais avec une grande différence, au lieu de servir d'un fond "noir", et d'utiliser le process "below", on utilisera le fond "residual" et le process "above" :


 * sélectionnez "Save L*a*b* for HDR"
 * immédiatement, la configuration des "Wavelet settings" sera réalisée automatiquement:
 * Background = residual
 * Process = above the level
 * level 2
 * La seule chose que vous pouvez changer, est le niveau, plus celui-ci sera élevé, plus la tolérance de bougé entre les 2 vues sera importante, mais plus la perte de détails sera importante, plus le niveau sera faible, plus la fusion respectera les détails. Si vous choisissez "level 1", il n'y a aucun floutage de la fusion.
 * Cliquez sur la boite "Save L*a*b* datas (*.mer) : une boite de dialogue va s'ouvrir, choisissez le dossier où seront stockées ces données, par exemple entrez "premier.mer"

Ouvrez dans l'éditeur de RawTherapee, l'image à fusionner (la deuxième) :
 * Traitez cette image comme il vous convient (balance des blancs, contraste, etc.)
 * ouvrez (si ce n'est déjà fait) l'onglet "Wavelet" et activez le.
 * allez au menu "Merge files and Watermark", activez
 * sélectionnez "Load L*a*b* and merge"
 * cliquez sur la boite "file": une boite de dialogue s'ouvre. Choisissez le dossier et le fichier à fusionner (ici premier.mer)
 * réglez l'intensité souhaitée de la luminance et de la chroma avec les 2 curseurs appropriés.
 * ou sélectionnez "curve" et réglez celle-ci
 * les 2 curseurs "vertical shift" et "horizontal shift" permettent si c'est nécessaire un désalignement des pixels (si il y a eu un léger bougé entre les 2 clichés). Par défaut (curseurs à 50), il y a alignement des pixels. L'action sur les curseurs permet un déplacement de +- 2 pixels.


 * vous pouvez voir la première image - telle qu'elle sera fusionnée - en activant la boite "Preview and Save method = First image"

Voilà c'est terminé, rien n'interdit de faire d'autres traitement à l'image...

Attention, ce dispositif ne peut combiner que 2 images - ce qui est suffisant si vous choisissez correctement les 2 images, il est important de choisir celle qui servira à rendre les hautes lumières (la plus sombre) et celle qui complétera le rendu des ombres (la plus lumineuse). Je ne pense pas qu'il faille choisir les extrêmes ! Il me semble, à vérifier par des essais, que l'image la plus lumineuse doit être celle qui est sauvegardée au format *.mer

L'algorithme de fusion est ici sommaire, je prévois (quand ??) de l'améliorer.

Bien sûr l'ajout d'une souris et d'édition locale apportera, lorsqu'elle sera disponible,un plus très important. Néanmoins cette méthode en combinant après "fusion" l'action des curseurs "Threshold blend luma" et "Threshold blend chroma" (ici en positif), donne des résultats assez satisfaisants.

Fusion de fichiers pour créer des effets spéciaux (styles)
Les possibilités offertes par la fusion de fichiers sont quasi infinies. Je me suis inspiré du résultat de "A Neural Algorithm of Artistic Style" , pour élaborer un algorithme visant la création d'effets spéciaux, par exemple en "mélangeant" un fichier Raw (ou autre) avec une création artistique (peinture de Van Gogh...par exemple la Nuit étoilée! que j'ai ici redimensionnée avec LanczosNuit Etoilée) ou un autre fichier raw (ou autre) qui présente des caractéristiques de relief ou de couleurs (fleurs, peintures...).

L'algorithme que j'ai élaboré:
 * ne s'appuie pas sur les réseaux de neurones ou très partiellement, d'une part parce qu'il aurait fallu élaborer une autre base de décomposition que les ondelettes et, d'autre part parce qu'ils nécessitent des ressources importantes (mémoire, temps de traitement) pour des fichiers traités habituellement par Rawtherapee (dimensions de l'ordre de Width de 4000 à 8000 pixels, Height de 2500 à 5000 pixels).
 * par contre il utilise les ressources (importantes) de la décomposition et recomposition en ondelettes. Ceci ne veut pas dire que ce traitement est anodin : il nécessite de grandes quantités de mémoire (sensiblement le double d'un traitement habituel) et implique des temps de traitement assez importants de l'ordre de 10 secondes pour une sortie en TIF/JPG pour une image combinée de 4200*2800 et un ordinateur à processeur i7.
 * une des raisons des temps de traitement et de la consommation mémoire tient au principe de l'algorithme qui maintient ouvert simultanément la décomposition en ondelettes pour les 2 images ("first" et courante")!

Principe de l'algorithme et principales étapes

 * Élaboration des données de la première image (first), celle qui contient les effets de style. Par exemple à partir d'un fichier JPG ou TIF d'une peinture (Van Gogh, Monet,...Nuit étoilée) ou d'un Raw d'une scène fleurie par exemple "Colorspace_flowers.pef" :
 * il est important que la taille du fichier "first" soit du même ordre de grandeur que l'image courante dans laquelle on fera la fusion. Bien sûr l'algorithme détecte et ajuste les tailles respectives, mais si l'écart est trop important la perte de détail sera rédhibitoire
 * des écarts jusque 20% à 30% sont admissibles, par exemple fusionner une image "first" de 3900*2600 avec une image courante de 4300*2800 conviendra, mais fusionner la même image courante avec une "first" de 1000*600 donnera de mauvais résulats.
 * la première opération à effectuer est (si bien sûr on n'a pas de fichier "first" sensiblement aux bonnes dimensions) est de redimensionner l'image avec Rawtherapee en utilisant l'algorithme Lanczos (certes les détails n'auront pas la qualité de l'original, mais l'algorithme fonctionnera)
 * ensuite il faut générer le fichier *.mer de données L*a*b à partir de l'image "first". Pour cela aller dans "Merge files and Watermark" (après avoir activé "Wavelets levels", et éventuellement "traité" l'image [contraste, saturation, wavelet, etc.]), choisir "Save L*a*b* for style" - dans ce cas Wavelet settings est positionné à Process "all levels in all directions". J'ai laissé une option "size of image" pour laquelle je recommande vivement de sélectionner 1, si les ressources de votre matériel sont très limitées...


 * Ouverture de l'image courante, sur laquelle vous pouvez opérer les ajustements nécessaires (contraste, saturation, débruitage,...)
 * chargement des données *.mer : sélectionner dans "Merge files and watermark", "load L*a*b* and Marge for style", choisissez le fichier *.mer souhaité. Au bout de quelques secondes (le traitement nécessite d'importantes ressources), une image fusionnée apparaît avec les réglages par défaut que j'ai choisis. Ceux-ci sont empiriques et ne peuvent être considérés comme "bon", mais ils présentent un intérêt pédagogique en "obligeant" l'utilisateur à modifier ces réglages.
 * il est important de prendre en note que plus les niveaux de décomposition (et de recomposition) seront importants meilleurs seront les résultats. Ne pas hésiter à utiliser les niveaux 7, 8 ou 9. Bien sûr ceci a des conséquences sur les ressources nécessaires et les temps de traitement.
 * attention : les fichiers *.mer résolvent une partie du problème des pipelines de Rawtherapee; néanmoins il reste certains problèmes à résoudre comme l’affichage complet de l'image lors de zoom...
 * tel que l'algorithme est construit, la fusion s'opère après les traitements "ondelettes" de l'image courante et au début du traitement de l'image "first". Il semble évident qu'il est important - si bien sûr vous le souhaitez dans les effets recherchés - d'accroître les contrastes pour les niveaux de luminance et de chroma de l'image courante. Ce sont eux qu seront détectés dans la fusion.
 * synthèse du principe de l'algorithme:
 * création d'un fichier L*a*b* sauvegardé sur disque de type *.mer, à partir d'une image raw ou TIF ou JPG riches en couleurs et en contrastes locaux. Ce fichier *.mer est le résultat d'un traitement (qui peut être "neutre") en fin de processus ondelette.
 * chargement du fichier *.mer, décomposition en ondelettes (en général de 6 à 9 niveaux) et construction d'une donnée "pointeur" où sont stockées les valeurs des niveaux et des directions, pour le canal L* et les 2 canaux a* et b*
 * adaptation par l'utilisateur, à son goût, des caractéristiques de l'image courante : modification du contraste, saturation, etc. et du traitement en ondelettes (niveaux, image résiduelle, Retinex, Final, etc.)
 * fusion des 2 images, par mélange du fichier "pointeur" (décomposition de l'image "first") et des niveaux et image résiduelle de l'image courante, à l'aide des réglages ci-après.

Quels sont ces réglages

 * Ceux qui concernent l'image qui contient les effets de style ("first"):
 * agir sur l'intensité de la fusion de chaque niveau de contraste de l'image "first" avec l'image courante. Par défaut j'ai mis de basses valeurs pour les faibles niveaux afin de limiter les artefacts qui pourraient être dus à la qualité de l'image "first". Plus les curseurs seront poussés à droite, plus l'image "first" apparaîtra dans la fusion
 * merge Residual : cette action va fusionner l'image résiduelle provenant de la décomposition de l'image "first" avec l'image résiduelle de l'image courante. Par défaut j'ai choisis une faible valeur.
 * merge chroma style : afin de simplifier l'utilisation et éviter 9 curseurs supplémentaires, l'utilisation du curseur unique agit sur la fusion des canaux "a*" et "b*" de l'image "first" et de l'image courante. pour chacun des niveaux choisis (7...9) la fusion prendra en compte les valeurs des curseurs de contrastes, majorés d'un pourcentage représenté par la valeur du curseur.
 * Style hue (first) : vous pouvez avec cette "flat curve" accroître ou réduire l'intensité de la fusion en prenant en compte les couleurs de l'image "first". Cette courbe agit sur les niveaux de la luminance et de la chrominance.
 * les 3 curseurs direction (verticale, horizontale, diagonale) qui agissent sur les valeurs des 3 directions de l'image "first" avant fusion avec l'image courante (la luminance et les 2 canaux chroma "a*" et "b*" sont concernés. Les valeurs par défaut sont arbitraires...


 * Ceux qui concernent l'image courante
 * la méthode "Shape and texture" :Cette méthode vise l'utilisation simplifiée d'un réseau de neurones. Selon la méthode sélectionnée, "Neural three" ou "neural four", chaque niveau est recomposé en fonction des 3 ou 4 niveaux voisins afin de mieux détecter la texture de l'image. Vus les temps de traitement (plusieurs dizaines de secondes voire minutes!) j'ai abandonné l'idée d'un traitement automatique par apprentissage, pour ne garder qu'un curseur, qui permet au choix de l'utilisateur et selon l'image d'accroître (ou réduire...) la détection de texture. Par défaut j'ai choisi le niveau 8, qui amène "souvent" un accroissement de la détection...
 * la courbe "shape detection style" (détection de forme): cette courbe représente en abscisse une fonction gaussienne pour chaque niveau (1 à 9), des 3 composantes - L* (contraste) et a* b* (chroma). Par défaut la courbe "préserve" les valeurs de haut contraste et haut chroma (au sens micro contraste et micro chroma)de l'image courante...dans cette situation les pourtours de l'image courante tendront à être préservés. Si on inverse la courbe, les contrastes et chroma de l'image "first" viendront se superposer à l'image courante.
 * le double curseur "style hue" et le curseur "style targetting/protection", agissent sur le même principe que d'autres menus dans Rawtherapee (Skin protect). Agir sur ces curseur accroîtra ou réduira l'action pour certaines couleurs.

Évolutions
Et bien sûr si un jour nous disposons de contrôles locaux, les améliorations seront notables.

Fusion de fichiers pour images HDR (complexe)
Ce nouvel algorithme HDR, est nettement plus complexe que celui repris ci-dessus (simple). En effet, dans ce nouveau cas, les 2 images (sous et surexposées) sont décomposées en ondelettes selon le nombre de niveaux choisis par l'utilisateur. L'avantage est un contrôle total du système (en dehors des contrôles locaux), les inconvénients : complexité à l'utilisation (et à la conception), besoins importants en ressources.

Principe de l'algorithme
Une partie de l'algorithme est commune avec "style". On combine 2 images:
 * la première "first" est l'image surexposée qu'il est nécessaire de sauvegarder en un fichier de données L*a*b* *.mer. Cette image peut (doit) avoir été traitée pour ajuster exposition, contraste, saturation, "ca" correction, franges, bruit, etc. Quelques recommandations : a) rechercher avant tout le bon rendu des basses lumières; b) éviter si possible d'utiliser des images par trop surexposées qui risquent d'amener des dérives de chroma; c) plutôt privilégier les expositions proches de "neutral" pour éviter le bruit, etc.
 * la seconde "courante" est l'image sous exposée qui sera ouverte directement par Rawtherapee. Rien n'interdit (on doit la) de traiter cette image avant fusion, mais il est important de préserver les hautes lumières. De plus il est important d'éviter la montée du bruit, on privilégiera les réglages proches de "neutral"...penser à traiter les franges, etc.
 * il est possible d'utiliser HDR++ avec une seule image! Mais il y aura évidemment une perte de qualité liée à l'étendue initiale de l'exposition. Vous pouvez à partir d'un seul fichier Raw, TIF, JPG, élaborer l'image surexposée à partir de Rawtherapee, en privilégiant le rendu des basses lumières (en jouant sur exposition, contraste, luminosité, courbes, etc.) et la sauvegarder en fichier de données L*a*b* (*.mer). Puis réduire l'exposition de la même image (en jouant sur exposition, contraste, etc.). Ensuite suivez le même processus que pour 2 images différentes, et ouvrez le fichier *.mer...
 * mais pourquoi cet algorithme n'utilise que 2 images alors que d'autres process en utilisent plus (3...)? La raison est simple:
 * dans le cas où le travail se fait très en amont dans le process (avant interpolation), les données sont brutes, sans balance des blancs, sans contrôles, les plages d'exposition et de chroma utiles sont réduites, il peut être utile de combiner plus de 2 images pour arriver à un résultat correct.
 * dans le cas présent, la fusion se fait quasiment en fin de process, en re-combinant 2 décompositions en ondelettes d'images avec une large étendue de luminance et de chroma. Ces images sont équilibrées en balance des blancs et contraste. Seule l'étendue de l'exposition est réduite. Néanmoins selon le boitier et les conditions de prises de vue, il est possible d'avoir pour chaque image une latitude d’exposition de 7 à 12 IL. En les combinant adroitement, il doit être possible de traiter tous les cas avec seulement 2 vues. Vues, qu'il faudra choisir "manuellement" à la suite de la prise de vues en rafale!


 * plusieurs "outils" de la méthode "style" sont conservés pour simplifier le développement, mais si cela est nécessaire, rien ne s'oppose à avoir des outils courbes spécifiques. Outils et courbes conservés : curve shape detection, curve style hue (first), curseur merge chroma first

Comment fonctionne le système :
 * sauvegarde des données de l'image "first" au format L*a*b* (*.mer)
 * ouverture de l'image courante, (avec réglages proches de "neutral", puis ouverture des données (*.mer)
 * sont présentés à l'utilisateur :
 * une "flat" courbe "merge luma curve ++". Cette courbe où en abscisse est représentée la luminance de l'image "first" (surexposée), et en ordonnée un multiplicateur d'action qui agit: a) sur chaque niveau de décomposition pour la luminance et la chroma de l'image "first" en fonction du réglage de chaque niveau de cette image; b) sur les composantes luminance et chroma de l'image résiduelle. On peut ainsi différencier de re-combinaison en fonction de la luminance de l'image "first"
 * une série de curseur (selon le nombre de niveaux de décomposition) qui va permettre de différencier l'action de re-combinaison selon le niveau. Par défaut j'ai choisi une valeur moyenne de 70%. Ces curseurs agissent directement sur le contraste de luminance, mais aussi via le curseur "Merge chroma first" sur la chroma
 * un curseur "Merge residual HDR++" qui va combiner les images résiduelles en luminance et chroma.
 * une courbe "style hue" qui agit sur les niveaux de l'image "first" pour la luminance et la chroma et va permettre de différencier l'action selon la teinte, par exemple réduire l'action pour le vert des feuillages (risque de flou du au vent...)
 * une courbe "shape detection", où en abscisse est une gaussienne du contraste de l'image courante. Par défaut cette courbe affaiblit la re-combinaison pour les zones déjà contrastées. Bien sûr rien n'interdit de redresser la courbe et ainsi d'obtenir une accentuation (forte) qui va agir sur l'ensemble des niveaux.
 * vous pouvez choisir comment sera réalisé le traitement en ondelettes :
 * si vous choisissez "begin", les traitements en ondelettes, par exemple : les niveaux, "edge sharpness", Retinex,...concerneront l'image ré-assemblée;
 * si vous choisissez "end", les traitements ondelettes, ne s'appliqueront uniquement à l'image courante.

Évolutions
Les perspectives sont complexes et à deux niveaux :
 * mettre en place un contrôle local simplifié, pour supprimer les zones floues dues au déplacement d'objets entre les prises de vues

Balance méthode
Cette "balance" modifie la répartition entre d'une part, les composantes verticales et horizontales de la décomposition et d'autre part, la composante diagonale. Selon la force de cette répartition, dont le principe est proche de celui de "edge preserving decomposition" (Tone mapping) qui s'appuie  elle sur la "Factorisation de Cholesky d'une matrice"

Elle amplifie, quelquefois considérablement, les effets de "contrast level" et "edge sharpeness".

Pour chaque niveau, sur toute la plage de contraste, l'action est linéaire en fonction du contraste initial.

Vous pouvez utiliser les réglages de "residual image", notamment "compression residulal strength" pour le contraste. Ces réglages permettront d’accroître (ou réduire) les effets de perspective et de relief.

Cette méthode présente deux réglages utiles :

Curseur
Si vous déplacez le curseur vers la droite, l'effet "tone-mapping" sera de plus en plus prononcé. Si vous le déplacez vers la gauche, l'effet est différent et aboutit notamment à une baisse du contraste. Les valeurs élevées et basse de luminance sont prises en compte afin de réduire la puissance du curseur et éviter les artefacts.

Courbe
Cette courbe agit sur la balance en fonction de la luminance de l'image. Par défaut les parties sombres ou hautes lumières sont réduites afin d'éviter les artefacts (clipping).

De plus j'ai ajouté un curseur :

Delta balance levels
Ce curseur, lorsqu'il est à zéro, amène un traitement identique de l'ensemble des niveaux de décomposition. En déplaçant le curseur à gauche, les bas niveaux sont accentués, et vers la droite ce sont les bas niveaux qui sont réduits et les hauts niveaux accentués.

Chroma balance
Cette case à cocher enclenche l'effet de balance sur la composante chroma de la décomposition, les réglages de "curseur" et "courbe" sont utilisés.

Final local contrast
Cette courbe agit de manière non linéaire sur le contraste des niveaux de décomposition. Le milieu de l'abscisse correspond à la valeur moyenne de contraste local, les deux-tiers de l'abscisse correspondent au contraste + un écart-type.

Cette courbe est située en fin de traitement, juste avant la recomposition et bien sûr ne concerne que les niveaux de contraste.

Elle va permettre de réduire ou accroitre les effets de "a)contrast levels", "b)edge sharpness", "c)balance method", mais aussi le principe même de d)décomposition - recomposition qui sera modifié par cette courbe, même sans action sur a)b)c.

Par défaut j'ai mis une courbe "plate à zéro" qui est sans effet, mais j'aurais pu mettre une courbe avec une réduction pour les hautes valeurs de contraste local (ceci reste possible avec les pp3).

Attention, cette courbe ne fait pas double emploi avec la précédente de "contrast balance", l'une est fonction du contraste local initial - qui n'a pas de rapport avec la luminance - l'autre est fonction de la luminance...et pas du contraste initial.

Final contrast curve
Cette courbe est sans rapport avec les précédentes, elle agit sur la composante Lab de l'image après recomposition. Elle est située en fin de traitement "niveaux d'ondelettes" et permet de modifier le contraste global de l'image. Son utilisation est similaire aux autres courbes diagonales présentes dans RawTherapee.

Une autre lecture de Rawpedia
Je propose au lecteur une autre manière de lire les paragraphes précédents avec une logique différente, probablement autant, voire plus technique, mais plus proche de l'utilisation.

Les ondelettes quel intérêt pour la photographie ?
A quoi cela sert ? c'est quoi ? c'est difficilement compréhensible ! Lorsqu'on agit sur un curseur selon le cas il ne se passe rien ou alors des artefacts apparaissent, etc. etc. Telles sont les commentaires qu'on retrouve à propos de Rawtherapee Wavelet ! Alors effectivement c'est quoi ?
 * 1) en imagerie traditionnelle, tout est en 2 dimensions (largeur - hauteur), chaque pixel / zone est caractérisée d'une part par ses coordonnées et d'autre part par des données RGB ou Lab qui conditionnent directement luminance, contraste, saturation. Bien sûr il existe pour certains logiciels des possibilités de modifications locales via ou non par des calques, mais quelque soit le nombre de calques ou leurs caractéristiques on intervient toujours de manière globale (même si la zone est petite) en 2 dimensions.
 * 2) avec les ondelettes c'est totalement différent...on peut parler de pseudo-3D. Bien sûr on conserve les coordonnées (on ne voit pas comment on pourrait s'en passer!), mais au lieu d'avoir une description linéaire, on obtient par décomposition une représentation avec, d'une part, une image résiduelle (aux caractéristiques proches de l'image originale en tant que support) et, d'autre part, autant de niveaux que l'image peut en contenir. Ces différences qui se traduisent dans chaque niveau (contraste et chroma) proviennent : a) du bruit numérique ; b) des différences de contrastes (chroma) dues aux effets de bords; c) des différences de contraste (chroma) dues à la brume ou autres phénomènes optiques dus à la scène.

Alors bien sûr la logique de traitement sera différente...c'est évident...Ce n'est ni plus, ni moins complexe - sinon le degré de complexité due à la 3ème (pseudo) dimension - qu'une imagerie traditionnelle. Mais évidemment les algorithmes seront spécifiques, différents de l'imagerie traditionnelle, et bien sûr nécessitent un apprentissage. Ici on intervient sur chaque niveau, sachant qu'un niveau n'a des informations que si et seulement si, il y a des variations de luminance / chroma. Une zone d'aplats donnera toujours 0 au niveau de la décomposition.

On voit immédiatement l’intérêt (ou non) de cette décomposition : la possibilité d'intervenir séparément sur la zone de contraste (chroma) globale (image résiduelle) et chacun des niveaux. L'action (plus habituelle) sur les niveaux va permettre par exemple de réduire le bruit, ou accroître de manière différenciée le contraste pour aboutir à des effets de relief ou de perspective...

Dans le cas de Rawtherapee nous nous servons d'un algorithme de décomposition performant (Daubechies) qui permet notamment pour chaque pixel et chaque niveau l'utilisation de 3 directions (horizontale - verticale - diagonale). Cette 3ème dimension fera souvent la différence avec d'autres logiciels utilisant les ondelettes. De plus, les algorithmes utilisés ne se limitent pas - comme dans beaucoup de logiciels 'wavelet' - aux curseurs de modifications du contraste (et/ou chroma), mais permettent des actions différenciées : Afin d’acquérir des possibilités en termes de "tone-mapping", "réduction des effets de brume", accentuation, etc.
 * 1) à l'intérieur de chaque niveau
 * 2) entre les niveaux
 * 3) pour l'image résiduelle
 * 4) pour le traitement global de l'image

Alors, bien sûr, on pourra dire que cela ajoute de la complexité...C'est vrai, mais pourquoi se priver de fonctionnalités qui vont amener de nouvelles possibilités logicielles !

Les ondelettes est-ce complexe ? Cela va-t-il changer nos habitudes ?
Est-ce complexe ? : oui et non...
 * 1) oui : car cela change nos habitudes et oblige à penser 3D
 * 2) non : car une fois qu'on a compris le principe, ce n'est pas plus complexe (et je pense - moins complexe) que par exemple les calques de Photoshop.

Alors bien sûr cela va changer nos habitudes...Mais rappelez vous il y a quelques années vos premières retouches avec un logiciel de traitement d'image : qu'est-ce que c'est que ce truc..le mode RGB, le mode Lab, les pixels, etc. Celui qui me dit que Photoshop est simple et que la création - gestion des calques est évident...pourra très facilement s'adapter aux fonctionnalités des ondelettes.

Tout est question d'apprentissage et d'habitudes, sachant que dans ce cas, on introduit de nouvelles données!

Alors ? que faire ?
 * 1) travailler par essais-erreurs ? pourquoi pas, mais de manière limitée afin d'enrichir une démarche 'logique'
 * 2) il y a des principes de base à connaître développés dans Rawpedia et dans ce complément qui doivent guider l'action et limiter ces essais-erreurs aux premières expérimentations ou à certaines améliorations.

Quels sont les ondelettes utilisées par Rawtherapee, incidences des réglages ?
Rawtherapee, utilise la décomposition en ondelettes discrètes selon la méthode de Daubechies, qui permet notamment la décomposition en 3 directions. Ce que ne permet pas la méthode (plus simple) du chapeau Mexicain utilisée par une majorité de logiciels du marché. Actuellement - tant qu'un processus de retouche locale performant ne sera pas implanté dans Rawtherapee - la méthode de Kingsbury, nettement plus performante au niveau des détails, mais considérablement plus exigeante en ressources, ne sera pas implémentée.

Rawtherapee, permet de choisir :
 * 1) le nombre de niveaux de décomposition : de 2 à 10. Plus le nombre est petit et plus l'image résiduelle sera "proche" de l'originale...et plus les réglages seront intuitifs, par contre plus les possibilités liées aux ondelettes seront peu utilisées. Plus le nombre sera grand, plus importantes seront les retouches possibles (jusque des détails de 1024*1024 pixels), notamment pour déboucher des ombres...
 * 2) le niveau ondelettes Daubechies : par défaut il est à 4 (D4) ce qui doit convenir dans la majorité des cas. Modifier ce niveau va permettre - sans que j'ai pu trouver une corrélation évidente - d'affiner la qualité des niveaux faibles (la littérature universitaire affirme que le meilleur rendu des détails est obtenu avec D2), ou celle de l'image résiduelle.

Peut-on avoir un idée de ce qui est contenu dans chaque niveau de décomposition ?
Bien sûr et c'est très simple, il suffit d'entrer dans la rubrique "Wavelet settings" et de sélectionner selon son souhait. Par exemple sélectionner Background : grey (pour mieux percevoir les détails, car la réalité de la décomposition est un fond noir)et Process : below or equal, et level 3, permettra de visualiser le contenu des niveaux 1, 2 et 3. Attention, les choix faits ici se répercutent sur la prévisualisation (ce que l'on voit dans l’aperçu) mais aussi sur l'image de sortie et sur l'histogramme.

Cet histogramme va permettre de guider les actions notamment l'incidence des ajustements sur l'image résiduelle.

Avec une décomposition en ondelettes lorsqu'on parle de contraste, c'est quoi ?
Comme dirait quelqu'un : "c'est une très bonne question et je vous remercie de l'avoir posée"...

En imagerie traditionnelle, le contraste est toujours global (même au niveau élémentaire), l'action du contraste va modifier les caractéristiques des valeurs RGB (ou Lab) des pixels concernés ou avoisinants.

Ici, en ondelettes, c'est différent et même totalement différent :
 * 1) chaque niveau de décomposition (pour 2x2 pixels..jusque 1024x1024) contient les valeurs de contraste local pour chaque pixel. Si il n'y a pas de contraste le niveau est à zéro, si le contraste est faible ou moyen (par exemple pour du bruit de luminance), on aura des valeurs (si on parle en valeurs L*a*b* utilisée dans Rawtherapee - valeurs réelles comprises entre 0 et 32768 pour L) aux environs de 100 à 400. La valeur moyenne, qui bien sûr dépend de chaque image et de chaque niveau sera souvent comprise vers des valeurs de 400 à 600. Les valeurs maximales seront souvent aux environ de 5000 à 10000. Le spectre de ces valeurs est constituées de données négatives et positives et chaque 'groupe' est traité séparément dans les algorithmes.
 * 2) Lorsqu'on agit sur le curseur d'un niveau on accroitra les valeurs de chaque niveau de manière homothétique. Par exemple une valeur faible située à 100 avant action sur le curseur passera à 150, la valeur moyenne située à 500 passera à 750, la valeur maxi qui était à 6000 passera à 9000. On voit immédiatement les limites de cette action - même si dans une majorité de cas elle est pertinente - les valeurs faibles souvent liées au bruit seront amplifiées...d'où accroissement du bruit visible, les valeurs très élevées (souvent liées aux bords) seront trop accentuées, d'où apparition d'artefacts.
 * 3) Il apparaît à l'évidence, 2 modifications possibles des algorithmes : a) en fonction de la luminance de l'image initiale, pour cibler l'action sur une plage de luminance; b) en fonction du contraste local initialement présent, pour différencier l'action selon le contraste initial (celui qui précède l'action en cours) et permettre ainsi d'accroître le contraste local, sans ajouter de bruit ou d'artefacts.

Ces modifications sont possibles :
 * pour la luminance dans le menu "Contrast" avec les curseurs "Highlight luminance range" et "Shadow luminance range"
 * pour la luminance dans le menu "Final Touchup" pour l'image recomposée (niveaux + résiduelle) avec la courbe "Final contrast"
 * pour le contraste local dans le menu "Edge sharpness" avec la courbe ou le curseur "Local contrast"
 * pour le contraste local dans le menu "Final Touchup" avec la courbe "Final contrast". Dans ce cas à titre d'exemple les valeurs reprises ci-dessus 150 pourra devenir 50, la valeur moyenne de 750 pourra devenir 1000, et la valeur maxi pourra passer de 9000 à 7000.

Il est également important de signaler que le contraste de l'image recomposée (finale) sera la somme (même si ce n'est pas une somme arithmétique exacte) entre la valeur des contrastes locaux pour chaque niveau et le contraste global de l'image résiduelle. Il semble évident que dans une majorité de cas, afin d'éviter les artefacts et les dépassements de gamut, lorsqu'on augmente significativement les contrastes locaux par les curseurs niveaux, il faut corrélativement abaisser le contraste de l'image résiduelle (et réciproquement). On peut le vérifier, en partie, avec l'histogramme général et celui de l'image résiduelle.

Avec une décomposition en ondelettes lorsqu'on parle de chroma, c'est quoi ?
On peut faire ici exactement les mêmes remarques, commentaires à propos de la chroma qui devient 3D, exactement comme le contraste, pas de différences sinon qu'au lieu d'utiliser L* on utilise sqrt(a*a + b*b).

Par contre il n'y a pas de courbes :
 * de correction de la chroma en fonction de la chroma locale (équivalent de la courbe de edge-sharpness), pas plus que celle de "Final touchup"
 * de correction de la chroma de l'image reconstituée dans "Final touchup".

Bien sûr, il est possible, si les utilisateurs le souhaitent, de les ajouter...mais cela accroît la complexité!

Pourquoi est-il difficile voire impossible de passer des réglages d'une image à une autre ?
Il n'est pas impossible de passer les paramètres via un pp3 (partialpaste, etc.), mais ils ne produiront pas les mêmes effets. En effet comme expliqué plus haut, les structures du contraste et de la chroma ne sont pas les mêmes qu'en imagerie traditionnelle, et donc tout va dépendre de l'image...Je ne pense pas qu'il y ait de différences profondes liées au type de fichiers (NEF, CR2, PEF, etc.)

La différence va provenir pour l'essentiel de l'éclairage de la scène au moment de la prise de vue :
 * y-a-t-il du voile atmosphérique: celui-ci va modifier la répartition entre l'avant plan et l'arrière plan, réduisant le contraste des sujets lointains, en accentuant l'écart avec l'avant plan ,
 * y-a-t-il des différences d'illuminants ou d'exposition qui a leur tour vont changer les rapports entre les divers plans ?
 * y-a-t-il des zones où la détection des bords va être amplifiée...par la nature des teintes, par exemple un paysage avec de grosses zones de tons neutres avec de forts contrastes ?
 * etc.

Bien sûr il y aura des moyens pour réduire ou accroitre ces écarts, mais ils ne permettront pas une portabilité facile

Pourquoi voit-on apparaître des artefacts dans certains cas avec une utilisation conjointe de CIECAM?
Le code de CIECAM utilise des données spécifiques : J (lightness), Q (brightness), etc. qui sont proches mais différentes des valeurs Lab.

Si on souhaite considérablement réduire les artefacts, il faudra (comme d'ailleurs pour CBDL ou Tone-mapping) écrire une version spécifique de Wavelet, utilisant les données CIECAM plutôt que Lab...beaucoup de travail en perspective.

Le panel image résiduelle – quel usage ?
J'ai déjà beaucoup écrit sur le panel "image résiduelle", néanmoins une redite ne fait pas de mal.

Comme son nom l'indique l'image résiduelle est la "différence" entre l'image originale et la "somme" des niveaux de décomposition.

Lorsqu'on choisit plus de 6 niveaux, on peut quasiment dire que l'image résiduelle est exempte de bruit. Donc, modifier le contraste (global) de cette image, ou la chroma n'aura quasiment aucune incidence sur le bruit.

Il est important de noter, que si on veut éviter les artefacts et les sorties de gamut, il faut maîtriser la "somme" niveaux + image résiduelle; Si l'image originale est déjà proche des limites, accroître de manière significative le contraste ou la chroma des niveaux, va aboutir quasi inévitablement à des artefacts ou à des hors gamut. Jouer sur l'image résiduelle, en accroissant ou diminuant contraste et chroma va permettre de rester dans les limites.

Pour modifier le contraste vous pouvez utiliser 3 méthodes, inclues dans "Image résiduelle" :
 * 1) changer le contraste seul, vous voyez immédiatement les incidences, la variation de contraste est quasi linéaire - avec bien sûr une gestion des limites - en fonction de la position du curseur.
 * 2) utiliser la méthode de compression "contrast", on est un peu dans le même cas que précédemment, sinon que la variation du contraste est une combinaison logarithme-exponentielle, modifiant plus en profondeur le contraste des valeurs extrêmes en maintenant les valeurs centrales. Le curseur compression gamma, va permettre de recentrer s'il le faut l'histogramme (certes cela semble complexe, mais pas tant que cela !)
 * 3) utiliser la méthode de compression "tone-mapping". Ici, c'est différent, on va agir sur l'image résiduelle en modifiant les contrastes en profondeur (comme le fait tone-mapping), il est quasi indispensable, afin de ne pas aboutir à des images laides, de modifier en profondeur les niveaux.

Cette image résiduelle pourra par exemple, permettre de réduire les effets de brume, ou autoriser une action différentielle sur ombre et lumière pour remettre une image à forte dynamique dans le rang.

Le traitement du bruit : pourquoi 2 traitements ?
Dans Rawtherapee, il y a 2 processus de traitement du bruit.
 * le premier appelé "Noise reduction" se situe en début de processus de RT, juste avant la conversion colorimétrique. Il s'appuie:
 * sur un traitement par ondelettes, pour le bruit de luminance et de chrominance. Ce traitement utilise les premiers niveaux de décomposition pour le bruit de luminance, et sur les niveaux plus élevés pour le bruit de chrominance. Dans tous les cas, il n'y a pas de différenciation accessible à l'utilisateur selon les niveaux; le traitement différencié du bruit repose sur l'analyse de l'importance du bruit pour chaque niveau.
 * sur un traitement par la méthode de Fourrier, qui complète le traitement luminance
 * sur un traitement par median


 * le second qui se situe en fin de processus de RT, et utilise l'outil "Niveaux d'ondelettes". Dans ce cas seuls sont accessibles les 4 premiers niveaux de décomposition.
 * ce traitement va permettre de compléter "Noise reduction" ou traiter le bruit des actions postérieures à "Noise reduction"
 * ce traitement est différencié selon les niveaux, de manière accessible à l'utilisateur.
 * il utilise pour la luminance le même algorithme que "Noise reduction (wavelet)"

Il n'y a donc pas incompatibilité entre les deux traitements, mais complémentarité. Ils utilisent tous les deux les ondelettes, mais de manière différente, et chacun à une extrémité du processus de traitement RT.

Les réglages sont-ils interdépendants, par exemple lors de l'utilisation de "denoise" et "edge sharpness" ?
Oui et Non !

Bien sûr en première approche c'est vrai...et évident! Si on accroît "edge sharpness" sans précautions, le bruit va croître. De plus la reconstruction après décomposition prendra en compte ce changement!

Mais, car il y a de nombreux mais :
 * si on souhaite utiliser edge-sharpness pour créer quelque chose de semblable à 'unsharp mask', il est indispensable d'activer 'edge detection" et utiliser les réglages proches de 'defaut' pour 'gradient sensitivity'...et accroître 'Threshold low (noise)' pour prendre en compte le bruit et éviter d'augmenter la force pour ces zones, etc...ceci est affaire de goût!
 * si l'image est assez bruitée ou fortement bruitée il est recommandé de traiter au préalable avec 'noise reduction'; on peut compléter on non le traitement du bruit par "denoise and refine'
 * il est évident que les effets de 'contrast by details levels' et de 'wavelet levels' se cumulent pour la luminance et les niveaux jusque 5. En effet CBDL est très proche de 'wavelet levels" sinon qu'il n'intègre pas la dimension diagonale et qu'il utilise la méthode de Haar équivalent de "D2 low" pour wavelet.
 * si on utilise "edge sharpness" avec "detection", il semble évident - sauf si on souhaite des effets spéciaux de ne pas activer les premiers niveaux de 'contrast levels', par contre il est possible (si Link est activé) d'utiliser "refine" de "denoise and refine" pour modifier la répartition des niveaux de 'edge sharpness'.
 * on est libre ou non d'utiliser 'chroma levels"...attention dans certains cas ceci peut amener des halos colorés.
 * on est libre ou non d'utiliser les niveaux élevés de 'contrast levels' (par exemple 5 à 9)...
 * on est libre ou non d'utiliser les propriétés de l'image résiduelle...qui à partir du niveau 6 ou 7 n'est pas bruitée...on peut donc accroître ou réduire son contraste sans risque...sinon ceux d'une non maîtrise (excès ou insuffisance de contraste, etc.)!!
 * on est libre ou non d'utiliser les propriétés de 'Final Touchup' qui vont permettre de modifier le contraste :
 * pour les niveaux (local) : a) contrast balance method; b) final local contrast.
 * pour le global : Final contrast curve.

Donc, en résumé, il y a bien une certaine interdépendance pour les premiers niveaux de contraste, mais la marge de manoeuvre est très importante pour les autres paramètres.

Pourquoi et quand regarder l'histogramme de l'image résiduelle ?
Dès qu'une image présente une faible ou un très fort contraste global, l'utilisation de l'image résiduelle et de son histogramme, va permettre de guider l'action.
 * faut-il réduire ou accroitre le contraste ou la chroma ?
 * cherche-t-on des effets spéciaux (tone-mapping, perspective, etc.)
 * souhaite-t-on réduire le voile atmosphérique ?
 * les images sont-elle à forte dynamique ?
 * souhaite-t-on (module en cours)différencier la balance des blancs pour l'avant plan et l'arrière plan ?
 * etc.

Comment réduire le voile atmosphérique ?
Bien sûr, il y a d'autres moyens qui peuvent être utilisés en conjugaison ou non avec "wavelets" (Retinex exposure...dont c'est une des finalités, point noir, courbes RGB, etc.). La correction du point noir semble incontournable (onglet exposition)

Ce que je propose ne peut égaler les outils spécialisés (quoique !!) pour traiter le voile atmosphérique, mais apporte un plus non négligeable.

Ici, en observant l'histogramme de l'image résiduelle, on verra que cet histogramme est amputé des parties basses lumières et hautes lumières. Il est évident que le nombre de niveaux aura une incidence...affaire de goût!

Agir sur le contraste de l'image résiduelle soit par : Va permettre (ces 2 algorithmes donnent des résultats différents), en conjonction - si c'est nécessaire avec un changement du contraste des niveaux: On peut également si nécessaire modifier la chroma de l'image résiduelle et des niveaux, selon l'image et l'effet recherché.
 * le curseur contraste afin de l'accroître
 * la méthode de compression contraste, conjointement si c'est nécessaire, à compression gamma
 * soit par conjugaison de ces 2 méthodes
 * soit par "edge sharpness"
 * soit par "Contraste niveaux"
 * soit les deux

On peut aussi, modifier le chroma de l'image globale, par une courbe Lab CC:.

On peut aussi, avec l'outil wavelet, agir sur le menu "Final Touchup" et selon goût agir sur un à trois des paramètres :
 * Final local contrast (le plus efficient me semble-t-il !)
 * Contrast balance - mais qui peut amener des effets "tone-mapping" pas toujours souhaitables !
 * et si nécessaire - de mon point de vue le moins efficace ici - "Final contrast curve"

Pourquoi certaines images ont un aspect tone-mapping ?
A partir du moment où on modifie substantiellement les contrastes des niveaux, on verra apparaître une notion de perspective ou de relief.

Attention aux artefacts dus à de trop fortes valeurs.

Vous pouvez réduire l'action à l'aide de :
 * la courbe "edge sharpness"
 * la courbe "final contrast"
 * etc.

Comment accentuer-réduire l'aspect tone-mapping ?
Vous disposez de plusieurs méthodes qui peuvent se combiner :
 * accroître les niveaux de manière différenciée, en conjugaison avec un travail sur l'image résiduelle
 * utiliser modérément "edge sharpness : local contrast", l'action sur la courbe va permettre de contenir les artefacts dus à de trop fortes valeurs
 * utiliser Retinex in wavelet, ou Retinex Exposure en conjonction avec l'outil Wavelet
 * utiliser "Final Touchup : contrat balance méthode". Ici l'action sera nettement accrue en jouant sur la combinaison des 3 directions horizontale - verticale et diagonale, en contrôlant l'action sur la diagonale.
 * agir sur "Final Touchup : final local contrast" qui va permettre de réduire le contraste local pour les faibles valeurs de contraste local (et ainsi éviter la montée du bruit), ainsi que pour les hautes valeurs et prévenir les artefacts.

Le bruit numérique, comment le prendre en compte ?
Il y a plusieurs manière de traiter le bruit:
 * 1) à l'aide du module "Noise Reduction" qui utilise pour sa part essentielle lui aussi des ondelettes (ce module utilise également une transformée de Fourier pour la luminance" et un filtre "median"). Au niveau du traitement en ondelettes tous les niveaux sont traités avec la même amplitude, avec bien sûr un traitement en interne différencié en fonction du bruit réel.
 * 2) à l'aide du module "Wavelet" - "Denoise and refine". Dans ce cas seul est traité, le bruit de luminance et uniquement pour les 4 premiers niveaux, ce qui devrait convenir dans une majorité de cas.

Plusieurs cas peuvent se produire:
 * 1) l'image originale est fortement bruitée en luminance et chrominance. Dans cette situation il faut privilégier l'usage du module "Noise reduction", et ramener le bruit de luminance au minimum acceptable si on veut continuer par un traitement en ondelettes avec "wavelet levels".
 * 2) l'image originale est peu ou pas bruitée...Le bruit risque d'être apporté par le traitement en ondelettes qui risque dans certains cas d'accroître le bruit. Dans ce cas, on pourra utiliser "Denoise and refine" pour éliminer le bruit restant (accentué ou non par le traitement en ondelettes). On pourra par exemple réduire le bruit du niveau 2 et amplifier légèrement (refine) l'action sur les niveaux.

Quel traitement pour les images « astro » ?
Bien sûr tout dépend du niveau de bruit de l'image "astro", mais en règle générale :
 * 1) on pourra réduire le bruit des étoiles en agissant sur les 3 curseurs "Denoise and Refine"
 * 2) amplifier le contraste local par action sur les curseurs inférieurs
 * 3) réduire ou accroître le contraste de l'image résiduelle (ciel profond)

Les portraits ?
Ici, le processus sera équivalent à celui de CBDL...


 * 1) On réglera l'image générale par les niveaux d'ondelletes, l'image résiduelle, et "edge sharpness"?... selon le cas
 * 2) puis on pourra soit cibler l'action sur la peau de manière directe (protection) ou indirecte (cible : targetting)

Les 2 méthodes présentent chacune des avantages et sont plus liées à des souhaits photographique! Est-ce qu'on souhaite détacher le portrait sur une arrière plan moins contrasté, ou l'inverse. Là encore l'action sur l'image résiduelle pourra venir compléter l'action.