Local Adjustments/fr

From RawPedia
Jump to navigation Jump to search

Texte rédigé par Jacques Desmis (mise à jour 9 septembre 2019)

Quel type de contrôle local?

Lorsqu'on observe les différents logiciels du marché on trouve plusieurs types de contrôles locaux

  1. les contrôles de type "lasso", associés à des calques et masques de fusion, comme par exemple dans Photoshop (c). Ce type de contrôle est majoritaire dans les logiciels (Photoshop, Gimp, Darktable...) et l'avis des utilisateurs est obligatoirement orienté vers ceux-ci au détriment du point 4. ci-dessous moins connu!
  2. les dispositifs de suppression de "yeux rouges", ou de "spot" (poussières...) liés aux imperfections du capteur
  3. les brosses qui permettent des mini corrections locales
  4. les contrôles de type U-points, utilisés jusque récemment dans Nikon Capture NX2 (c), ou comme complément à d'autres logiciels comme Nik Software (c), et récemment dans DxO ou Capture NXD. Pour qui a tâté de ces dispositifs (encore minoritaires aujourd'hui) il n'est pas question de revenir aux calques et masques de fusion! Ce type de contrôle nécessite un apprentissage différent de ceux de type lasso-calque et un désapprentissage cognitif de ceux-ci. De mon point de vue, ils sont globalement plus performants.

Dans la version présente de Rawtherapee, l’algorithme développé est proche dans le principe du point 4. ci-dessus, les U-points avec quelques possibilités pour 2. Bien sûr, le code de Nik Software m'est inconnu, mais il y a quelques années j'ai été séduit par la facilité d'utilisation et les performances des U-points, et j'ai entrepris de développer un produit qui ne ferait pas appel, ni au lasso, ni aux calques, ni aux masques de fusion (même si j'en ai récemment ajouté en complément).

Bien sûr rien n'interdit d'avoir les 3 possibilités (Lasso-calque, retouches spot, U-points) !

Quels défis à résoudre?

Plusieurs problèmes généraux sont à résoudre afin d'obtenir un fonctionnement fluide :

  • permettre un nombre quasi illimité de RT-spot (spot de contrôles);
  • adapter les algorithmes locaux aux problèmes d'échelle, car beaucoup d'algorithmes tiennent compte de la taille de l'image - donc de la zone traitée. Cet aspect est fondamental, notamment avec les courbes qui agissent sur toute l'image;
  • adapter - lorsque c'est le cas - les algorithmes RGB du code principal, en mode L*a*b* utilisé par le contrôle local
  • minimiser l'occupation mémoire et les temps de traitement en sortie JPG et TIF;
  • permettre des mises à jour logicielles faciles en cas d’évolution des algorithmes ou d'évolution du nombre de méthodes ;
  • optimiser les écarts entre "preview" et sortie JPG / TIF;
  • etc.

Pour chaque RT-spot :

  • permettre selon le cas, une action dans la zone sélectionnée ou à l'extérieur de la zone sélectionnée;
  • permettre selon le cas une détection de forme pour délimiter l'action ou une action également répartie sur toute la zone sélectionnée;
  • assurer une transition entre le cœur de la zone traitée et le reste de l'image;
  • etc.

Actuellement, les RT-spot (spot de contrôles) sont opérationnels, pour le mode Lab, et pour les méthodes suivantes:

  1. Color and light : lightness, chrominance, contraste, Color correction, en mode normal avec quatre courbes L=f(L), L=f(H), C=f(C), H=f(H) avec possibilité de masques et inverse ;
  2. Exposure : en mode normal avec possibilité de masques et inverse;
  3. Shadows Highlight : en mode normal avec possibilité de masques et inverse;
  4. Local Contrast en mode "unsharp mask" et "wavelet";
  5. Vibrance;
  6. Soft Light;
  7. Smooth - Blur and Noise : en mode normal, inverse, avec possibilité de masques;
  8. Retinex : en mode normal et inverse, maintenant avec gestion de la courbe "transmission gain" et "masques" (spéciaux);
  9. Sharpening : en mode normal et inverse;
  10. Tone Mapping avec possibilité de masques;
  11. Contrast By Detail Levels : en mode normal avec possibilité de masques;
  12. Denoise : en mode normal avec possibilité de masques.

Développement - Performance - Interface graphique - GUI

L'ensemble de l'équipe de Rawtherapee a contribué au développement, mais en particulier:

  1. Principe des algorithmes - code de base - Jacques Desmis
  2. Amélioration des performances (vitesse, mémoire...) - Ingo Weyrich
  3. Interface GUI - Pierre Cabrera. Elle me semble simple et intuitive.

Aide - Tooltip

Vous pouvez désactiver l'aide qui apparaît pour certains sliders, expanders, comboBox,... et qui peut être gênante.

Aller dans "Preferences " - "General" - "Show local adjustements Tooltip"

Principes généraux

L'Objet RT-spot

Comme je l'ai évoqué, le système utilisé est proche de celui mis au point par Nik Software, avec de grandes différences :

  • chaque RT-spot, peut être considéré comme un objet qui comporte plusieurs champs - à ce jour environ 100 (Il y a 180 événements gérés!), constitués de curseurs, courbes, combobox, checkbox, mask;
  • chaque champ, regroupé en paquets peut être ou non activé, et peut avoir des valeurs variables selon sa nature ;
  • les paquets sont des ensembles cohérents pour l'utilisateur : color & light, exposure, local contrast, shadows highlight, soft light, tone mapping, vibrance, Smooth blur and noise, retinex, sharpening, contrast by detail level, denoise ;
  • l'ensemble des RT-spots fonctionne en mode L*a*b* - contrairement au mode pleine image qui est soit en mode "RGB" avant demosaicing, soit en mode "rgb", soit en mode L*a*b*
  • les "RT-spots objets" sont gérés - création, modification, suivi - dans une boucle "for";
  • il n'y a pas de duplication de code.

La délimitation des zones - l’aperçu de la zone RT-spot

Lorsque l’utilisateur sélectionne un RT-spot (spot de contrôle),l’image à l’écran montre:

  • un centre "C", constitué d'un cercle dont on peut faire varier : a) le diamètre, b) la position avec la souris ou les curseurs;
  • quatre "points délimiteurs" horizontaux ou verticaux ("T" top, "B" bottom, "L" left, "R" right) dont on peut faire varier les positions avec la souris ou les curseurs.

On aboutit à :

  • une zone globale (rectangle) délimitée par les 4 "points délimiteurs" ("T", "B", "L", "R"): cette zone est celle où sont opérés les calculs des différents algorithmes (Exposure, Retinex, Shadows Highlight, etc.). C'est à l'intérieur de celle-ci (sauf bien sûr en mode inverse) que sont calculés et appliqués les algorithmes de détection de couleur et de structure.
  • 4 zones (à l'intérieur de la zone globale), dont on ne peut pas faire varier l'orientation; ces 4 zones ont chacun de leurs sommets reliés par une ellipse imaginaire ou un rectangle (settings).

Il est possible de pointer les limites des zones en dehors de la zone "preview".

A terme, il doit être possible, même si l'utilité me semble discutable du fait de l'algorithme de détection de forme - à noter que DxO et Capture NXD n'ont qu'une sélection circulaire - , de remplacer l'ellipse ou le rectangle, par une courbe (courbe de Beziers ou polygone) tracée à l'aide de la souris, à condition :

  • que la transformée homothétique - de centre le centre du Spot "C" - de chacune des 4 courbes n'ait pas d'intersection avec la courbe originale.
  • chacune des 4 courbes passe par 2 "points délimiteurs" "T" ou "B" et "L" ou "R"
  • chacune des 4 courbes soit à l'intérieur des 4 rectangles "C", "T", "L", "C" ou "C", "T", "R", "C" ou "C", "B", "L", "C" ou "C", "B", "R", C" ou à l'intérieur de la zone globale en permettant l'homothétie comme évoqué ci-dessus
  • permettre l'élaboration de 4 LUT de type y=f(x)

Cette "amélioration" intellectuellement satisfaisante, ne devrait être que d'un apport négligeable (sauf cas spécifiques) - dans le cas des RT-spots. Néanmoins il sera toujours possible de faire coexister les actuels RT-spot avec des contrôles par"lasso" de type Photoshop (c).

A noter que l'utilisation de un ou plusieurs masques (avec 1 ou 2 Spots), peut suppléer à ces "nouvelles" courbes.

Les 3 types de gradient

L'objet RT-spot est conçu sur le principe de 3 gradients:

  • gradient du à la dissymétrie possible. En plaçant le centre du spot dans un angle du Spot et en faisant varier hauteur et largeur on crée naturellement un gradient différentiel avec les 2 gradients suivants :
  • gradient du à la transition - réglable - du centre vers la périphérie du Spot : 3 sliders permettent une variation différentielle
    • "Transition value" : jusque la valeur choisie "x" - l'algorithme est appliqué à 100% du centre jusque "x%" de la zone sélectionnée, puis une décroissance est assurée jusque 0, pour atteindre la périphérie du Spot. Avec cette transition on aboutit à 3 zones (à noter que en mode inverse, ces 3 zones sont inversées !):
      • zone 0 : celle située à l'extérieur du rectangle de sélection et à l'extérieur des 4 courbes aucune action;
      • zone 1 : celle située à l'intérieur des 4 courbes où est prise en compte l'action des curseurs "transition" : action progressive
      • zone 2 : celle située à l'intérieur des 4 courbes, proche du centre "C", où n'est pas prise en compte l'action des curseurs "transition" : action complète
    • "Transition weakening" : fait varier l'intensité géographique de la transition: 1 linéaire, jusque 10 transition à très forte décroissance (puissance 10).
    • "Transition differentiation XY" : Si le slider est différent de zéro, crée un gradient différentiel entre l'abscisse et l'ordonnée. Les valeurs négatives réduisent la zone de transition en ordonnée, et l'inverse pour les valeurs postives.
  • gradient de couleur (en fait de deltaE) grâce à la fonction "Scope" (étendue) - cette fonction prend en compte le deltaE. Plus les valeurs sont faibles, moins les écarts de couleur (L, C, H) sont pris en compte, à partir de Scope=80, l'étendue augmente pour à 100 atteindre une action égale quelque soit les couleurs. 3 sliders permettent de faire varier le gradient
    • deltaE Weakening : intensité de l'action en fonction du deltaE - 1 linéaire - jusque 10 à très forte décroissance (puissance 10)
    • Threshold deltaE-scope  : interagit sur les valeurs de deltaE prises en compte et "scope" - réduit ou accroît la sensibilité - à utiliser selon l'image. Les images à fort gamut (fleurs, couleurs artificielles..) supportent des valeurs élevées de ce slider
    • balance deltaE ab-L : Pour une valeur de 1, le calcul du deltaE prend en compte de manière égale les 3 composantes L* , a* , b*. Les valeurs supérieures vont accroître l'action de la L* et réciproquement

Ainsi, tous les modules (y compris CBDL, Retinex, TM, etc.), ainsi que les modules agissant principalement sur la luminance (Color and Light, Exposure, Shadows Highlight...) réalisent de fait des gradients, croissants ou décroissants. Le centre du Spot étant toujours le point de référence.

Les 2 types de RT-spot

Deux types de RT-spot sont proposés:

  • Normal: chaque nouveau spot prend en compte les réglages des précédents - si bien sûr ils sont dans la zone d'action commune - on peut parler d'action récursive.
  • Excluding : chaque nouveau spot réinitialise, l'image à partir des données originales, mais garde pour les calculs, les références de l'image modifiée par les autres RT-spots.

Dans les deux cas, vous avez accès à la quasi totalité des réglages : Color and Light, CBDL, Blur, etc.

Commentaires sur le "Excluding spot":

  • il est dans le principe assez similaire au "Contre point" de Capture NX2(c) et permet de défaire des actions trop invasives par exemple une "bavure" non désirée, ou d'empêcher l'action sur une partie déterminée, par exemple si l'utilisateur souhaite accroître la saturation d'un portrait et qu'il veut exclure l’œil ou une partie avec une exposition différente.
  • l'algorithme que j'ai utilisé est très proche de ceux présents jusqu'ici dans "local adjustements", il est fondé sur les différences de deltaE et aussi sur la structure de l'image (via une transformée de Sobel Canny). Il n'est pas "parfait" mais devrait satisfaire 70% des cas.

Comment se servir de "Excluding spot"

  1. il suffit de placer le nouveau spot sur la zone à exclure
  2. choisir dans le menu "Settings", Spot method = "Excluding spot"
  3. Puis régler "Scope", "Transition", "Spot size" ainsi bien sûr que 4 limiteurs de zone, pour obtenir les effets désirés. Vous pouvez utiliser si nécessaire, des réglages complémentaires (comme pour le spot normal) par exemple "Color and Light", "Exposure", etc...
  4. dans certains cas (faible différence de deltaE...) il peut être nécessaire d'ajuster le curseur "Threshold deltaE-scope" - notamment en réduisant la valeur par défaut.
  5. dans le cas de zones avec aplats, vous pouvez utiliser "Structure" qui pourra aider dans certains cas à une meilleure délimitation de l'action.

Les références teinte, chroma, luminance et le principe de l'algorithme

Afin de mettre en œuvre un algorithme performant de détection de forme :

  • la zone du cercle central, sert de référence. En fonction du diamètre choisi par l'utilisateur, le système calcule, la moyenne de la teinte (hue), de la chroma, et de la luminance (lors de l'utilisation de Denoise, ou de Global quality = Enhanced + chroma denoise", ces différentes valeurs sont calculées après un léger floutage pour réduire l'impact du bruit) .
  • le choix du diamètre de la zone centrale dépend de l'usage. Par exemple pour un feuillage, l'utilisateur aura intérêt à choisir une valeur faible afin de ne sélectionner que le vert du feuillage; à l'inverse pour la peau l'utilisateur aura intérêt à accroître le diamètre afin d'éviter les prises en compte de données parasites (bruit, cils, etc.).
  • pour chaque quart, et en fonction du curseur "scope", le système prend en compte :
  1. en premier lieu de l'écart de deltaE (différence perçue entre 2 couleurs prenant en compte, la teinte, la chroma et la luminance)entre la zone centrale et le pixel courant) ;
  2. puis, un algorithme s'appuyant sur ce deltaE , atténue l'action en fonction de l'écart entre la zone centrale et le pixel courant.
  3. la modification d'action utilise soit une loi linéaire, soit une loi 'puissance' (parabolique, cubique,....) en fonction du réglage de "DeltaE weakening" dans settings (1 conduit à une loi linéaire, 2 parabolique, etc.)

Ceci va permettre de différencier l'action selon les critères énoncés ci-dessus, comme par exemple, si le cercle central se trouve dans un feuillage, de limiter l'action à l'ensemble du feuillage sans toucher à l'arrière plan (ce qui est impossible avec un lasso). De plus si un autre feuillage se situe dans la zone couverte, celui-ci sera également concernés par la modification.

  • l'action sur le curseur transition va permettre de faire varier l'action : si le curseur est réglé sur 50, la moitié (linéaire) de la zone concernée verra une application à 100% de l'effet, puis une transition agira régressivement jusqu'aux limites de la zone. Cette régression est par défaut "linéaire"; vous pouvez changer pour une régression parabolique ou une autre puissance, en agissant sur "transition weakening"
  • si on accroît la valeur de "scope", progressivement l’ensemble de la zone sélectionnée est prise en compte quelque soit la couleur, la chroma et la luminance.
  • si on réduit la valeur de "scope",l'action se limitera aux pixels très proches (en termes de deltaE) de la zone de référence.
  • si scope est supérieur à 80, progressivement l'ensemble de la zone est concernée de manière identique (pas du tout de prise en compte du deltaE). Ce mode de travail doit rester exceptionnel et n'est en général pas recommandé sauf par exemple pour créer des gradients de luminance .

L'algorithme de détection de forme est opérationnel en mode "normal" - son implantation en mode inverse s'accompagne de restrictions.

Cet algorithme va avoir ses performances modifiées, si l'utilisateur choisit : "Quality enhanced + chroma denoise". Ce second choix apporte une très légère réduction du bruit de chroma afin de supprimer les artefacts possibles liés à des images légèrement bruitées (à noter dans le cas + chroma denoise, un accroissement des besoins en mémoire et du temps de traitement).

Au dessus de la valeur de "scope" choisie, l'algorithme "deltaE" n'est pas pris en compte (voir ci-après).

Prévisualisation des zones sélectionnées

Dans "Mask and modifications", si vous sélectionnez "Preview selection deltaE", vous aurez un aperçu des zones de l'image affectée par la sélection.

Les zones sélectionnées - celles qui seront sujettes à être modifiées par la luminance, contraste, chroma,... - apparaissent généralement en jaune (il est possible si souhait de changer cette couleur pour du rouge, du bleu ou du vert..). ou une composition de la couleur initiale avec le jaune. L’ensemble apparaît sur un fond gris.

Les curseurs et courbes agissant sur la couleur sont sans effet avec cette sélection. Les curseurs et courbes agissant sur la luminance ont un effet avec cette sélection.

"Scope" est le réglage le plus sensible puisque il agit directement sur le deltaE.

Les 3 curseurs situés en "Settings": a) Threshold deltaE-scope, b) DeltaE weakening, c) Balance deltaE ab-L ont également un effet avec cette sélection.

Vous pouvez régler l'intensité de la sélection en changeant la valeur "Previewselection=5" dans le fichier "options" : des valeurs comprises entre 1 et 40 sont possibles.

DeltaE utilisé

J'ai choisi la version la plus simple du deltaE.

Si on évalue les valeurs L*a*b* dans l'intervalle : L [0..100] a [-128..+128] b [-128..+128]

  • Si Lc, ac, bc sont les valeurs du pixel courant
  • Si Lr, ar, br sont les valeurs de la référence (converties des valeurs LCH de base)
  • deltaE = sqrt(SQR(Lc - Lr) + SQR(ac - ar) + SQR (bc - br))

Correspondance avec la valeur de "scope":

  • il y a une relation entre scope et deltaE et l'affaiblissement (weakening), et "threshold deltaE-scope"
  • threshold deltaE-scope agit sur l'étendue de prise en compte
    • par défaut threshold deltaE-scope = 2 conduit à des valeurs de deltaE prises en compte de 2 à 155
    • si vous réduisez threshold deltaE-scope, la valeur maximale va être réduite jusque 130, à l'inverse si vous augmentez au maximum, le maximum deltaE sera de 230. De mon point de vue il faut réserver cette situation aux images avec de très grosses variations de gamut, par exemple des fleurs aux couleurs éclatantes. Par contre accroître légèrement threshold deltaE-scope (3 à 5) permet un rendu différent du système.
      • un deltaE de 230 ne peut se rencontrer que dans des cas extrêmes, par exemple 80 d'écart sur L, 158 sur a, 145 sur b... (uniquement accessible pour les très grands espaces de travail, avec des couleurs de base telles fleurs éclatantes ou couleurs artificielles, et action importante sur les sliders chroma et luma)

Cas avec threshold deltaE-scope = 2 (défaut)

  • les deltaE pris en compte varient de 2 (scope=0) à 155 (scope=100). Bien sûr ce choix est arbitraire on peut changer les 2 seuils mini et maxi (voir ci-dessus), mais il semble fonctionner dans une majorité de cas.
  • 2 n'est pas perceptible par l'oeil (mais ici ce n'est pas l'objectif recherché)
  • 155 correspond à des valeurs très élevées, par exemple 80 d'écart sur "a" (composante rouge vert), 80 sur "b" (composante bleu jaune"), 80 sur "L" ou autre exemple 50 sur "L", 105 sur "a" et 100 sur "b"

Par exemple lorsque "scope" est réglé sur 15, ceci signifie que toutes les couleurs telles que deltaE < 3 seront traitées telles quelles sans atténuation. Celles avec deltaE > 27.5 seront ignorées, les valeurs intermédiaires sont affaiblies d'autant plus qu'on se rapproche de deltaE = 27.5, par exemple:

  • un deltaE de 3 correspond par exemple à (il y a d'autres combinaisons...):
    • delta L = 2
    • delta a = 1
    • delta b = 2
  • un deltaE de 15 correspond par exemple à (il y a d'autres combinaisons...) :
    • delta L = 10
    • delta a = 9
    • delta b = 6.6
  • ou encore un deltaE de 27.5 par exemple à (il y a d'autres combinaisons...) :
    • delta L = 15
    • delta a = 14
    • delta b = 18.3

Lorsque on augmente "scope", par exemple à 50, toutes les couleurs telles que deltaE < 4.5 seront traitées telles quelles sans atténuation. Celles avec deltaE > 80 seront ignorées, les valeurs intermédiaires sont affaiblies d'autant plus qu'on se rapproche de deltaE = 80, par exemple:

  • un deltaE de 80 correspond par exemple à (il y a d'autres combinaisons...):
    • delta L = 20
    • delta a = 62
    • delta b = 44,7

Etc.

Algorithme complémentaire - détection de structure

L'algorithme de Sobel-Canny permet en association avec le filtre "Guide Filter" qui lisse les irrégularités, d'utiliser la différence entre la référence (cercle central) et la valeur de la structure en chaque point de l'image.

Cet "écart" est ajouté au calcul de deltaE pour mieux déterminer les contours et les zones à réduire l'effet. Ce système est efficace, si:

  • la référence est dans une zone avec une assez importante structure
  • la zone à affaiblir est un aplat ou avec une structure faible.

Structure est implanté dans "Color and Loght" et "Exposure" ainsi que dans "Excluding spot". Dans le sens Aplats vers structure vous pouvez agir si nécessaire, sur "Threshold structure" (Settings), la valeur est fonction du niveau de bruit.

Il est possible d'utiliser "structure" lorsque :

  1. les différences de deltaE sont très faibles et qu'on souhaite une différenciation
  2. et lorsque que se trouve accolée une zone avec structure et une autre avec aplats

Algorithme complémentaire - Soft process (Soft radius)

Certains algorithmes peuvent être agressifs:

  • Color and light
  • Exposure
  • Contrast By Detail Level

L'utilisation de "GuideFilter" sur la variation de luminance entre l'image originale et l'image modifiée, va permettre d'adoucir le résultat.

Nota : Shadows-Highlight possède par conception cet algorithme.

Actuellement seule la luminance est traitée... rien ne s'oppose à traiter la dimension "couleur" soit sous la forme de "Chroma" (C*) soit sous la forme des 2 composantes a* et b*

Algorithme complémentaire - Mask

Les 7 modules "Color and Light" , "Exposure", "Shadows Highlight", "CBDL", "Tone mapping", "Retinex" , ["Smooth and blur" + "Denoise"] (ces 2 derniers ont un masque commun) ont la possibilité d'utiliser un masque, mais "retinex" est une exception aux informations ci-dessous. Pour 4 modules : "Color and light", "Exposure", "Shadows highlight", "Smooth and Blur" ces masques peuvent être utilisés en mode inverse (avec des limitations) Pour 2 modules "Smooth and Blur" et "denoise", le masque est commun. Celui-ci vise 2 objectifs:

  1. augmenter la sensibilité de détection et donc permettre une meilleure sélection des objets (objectif principal), sans modifier l'image, lorsque l'algorithme deltaE n'est pas suffisamment pertinent (rare).
  2. aboutir à des effets spéciaux en combinant l'image du masque et celle originale.

Dans les 2 cas, l'image est modifiée avant le traitement par les algorithmes de "Color and Light", "Exposure", "Shadows Highlight", "CBDL", "Tone mapping", "Smooth and Blur" et "Denoise" mais ces modifications sont prises en compte par les algorithmes de "locallab" que ce soit la détection de forme, les transitions, ... L'utilisateur dispose de 3 courbes qui sont au démarrage toutes positionnées à 1 (maximum) :

  • C=f(C) la chrominance varie en fonction de la chrominance, l'utilisateur peut ainsi diminuer la chroma pour améliorer la sélection
  • L=f(L) la luminance varie en fonction de la luminance, l'utilisateur peut ainsi diminuer la luminosité pour améliorer la sélection
  • L et C = f(H) la luminance et la chrominance varient en fonction de la teinte, l'utilisateur peut ainsi diminuer la luminosité et la chroma pour améliorer la sélection

De plus, un curseur "radius" - utilisant "GuideFilter" permet de diminuer les artefacts et adoucir les transitions. Vous pouvez modifier le masque - avec bien sûr l'incidence inverse sur l'image - à l'aide de 3 curseurs qui jouent:

  • sur la chroma en adaptant sa force à la valeur réelle rencontrée qui dépend de plusieurs facteurs dont la grandeur de l'espace de travail (sRGB, Prophoto, ...)
  • sur le gamma et la pente (même principe par exemple que le gamma sRGB) en agissant uniquement sur la luminance L*, avec une courbe sans discontinuité.

Comment procéder, pour l'essentiel pour l'objectif n°1 ?

  • pour satisfaire l'objectif n°1 il est impératif de ne pas (ou peu) modifier la zone où se trouve le "spot". Le GUI permet de visualiser sur la courbe elle même la valeur de L, C ou H à éviter de modifier, c'est à l'utilisateur de positionner correctement le point des courbes qui ne sera pas modifié.Il suffit de positionner le sommet de la courbe à chacun de ces points (limite de la transition gris foncé, gris clair) selon le cas.
  • ensuite en examinant le masque, vous pouvez réduire très raisonnablement les valeurs de chroma, ou luma, selon le cas. Des valeurs de 0.8 à à.9 doivent être suffisante dans la majorité des cas
  • pour satisfaire l'objectif n°1, il est souhaitable que le(s) curseur(s) "blend" soi(en)t à zéro.

Pour l'objectif n°2, tout est fonction de ce que l'on veut faire, mais je recommande quand même d'appliquer le même processus que ci-dessus, sinon que les valeurs d'affaiblissement peuvent être plus importante. A noter que le masque utilisé dans n°2, sera aussi utilisé pour accroître la sélection.

  • pour satisfaire l'objectif n°2, il est souhaitable que les curseur "blend" ne soient pas à zéro: si vous réglez blend avec des valeurs négatives, l'image complémentaire au masque sera soustraite de l'image originale, et ajoutée avec des valeurs positives de "blend".

Plusieurs assistances sont proposées pour aider aux processus :

  • visualisation du masque dans tous les cas
  • visualisation des modifications sans le masque (pas en inverse)
  • visualisation des modifications avec le masque (pas en inverse)

et également pour l'action sur la structure, l’aperçu d'un masque de structure (pas en inverse). Il n'est - ceci peut paraître évident - pas possible d'utiliser plusieurs masques en même temps...

A noter la consommation importante de mémoire liée à ces masques lors de la sélection de zones étendues.

Utilisation isolée des masques

Chaque module équipé de "mask" peut être utilisé sans activer les commandes internes à chaque module. Par exemple:

  • "CBDL" qui est le premier module utilisable (après denoise), peut être utilisé uniquement pour les masques, sans utiliser les sliders...Ceci va permettre de modifier l'image au début du process; par exemple modifier le gamma de l'image!
  • "Color and Light" est le dernier module utilisable (juste avant "avoid color shift"), peut être utilisé uniquement pour les masques, sans utiliser les sliders ou les courbes. Ceci va permettre de modifier l'image à la fin du process.

Bien sûr, les 3 autres modules avec "mask" - Exposure - Shadows Highlight - Tone mapping - [Smooth and Blur - Denoise] peuvent aussi être utilisés seuls.

Cas spécifique de Retinex

Le module masque de Retinex ressemble aux autres mais:

  • il ne permet l'accès à l'objectif 1) "accroître les capacités de sélection" que en mode "normal" (pas d'utilisation de transmision map)
  • lorsque l'option "Use transmission map" est choisie, le comportement n'est plus "traditionnel":
    • mais va permettre une exploitation de "Retinex" exploitant au maximum les effets de contraste local. A noter que le système se comporte de la même manière pour les valeurs positives ou négatives de "blend"
    • avec "Use transmission map" la fonction d'aide indiquant graphiquement les valeurs "référence" 'hue", "Luma", "Chroma" sont totalement erronées...

Le fonctionnement en mode inverse

Lorsqu'il est proposé, le fonctionnement en mode inverse est simplifié, certaines fonctions ne sont pas implémentées (mask partiel, certaines courbes,...).

Simuler le fonctionnement en mode pleine image (similaire au "main menu")

Vous pouvez, aux différences de rendus des algorithmes - par exemple Exposure qui se comporte différemment entre "local" et "main" -, faire fonctionner "Local Adjustements" comme "main", pour cela choisissez :

  • Settings
    • Normal spot
    • Shape RT-spot area = Rectangle (de préférence)
    • Transition value = 99
    • positionnez le RT-spot de telle manière que les 4 délimiteurs soient en dehors du Preview
  • Module choisi (Color and Light, Exposure,......., Denoise)
    • Scope = ce que vous voulez, 100 si vous souhaitez simuler le mode "pleine image"

Avoid color shift

Cette case à cocher vise deux objectifs :

  • mettre les couleurs dans le gamut de l'espace de travail courant (working profile) en utilisant une colorimétrie relative ;
  • ajuster les couleurs à l'aide d'une correction "Munsell" - notamment les rouges-orangés et les bleus-pourpres, lorsque la saturation dans le domaine L*a*b* a évolué notablement.

Quelques particularités du mode local (par rapport à Lab adjustements)

Voici quelques informations qui peuvent intéresser l'utilisateur. Ces informations sont souvent des particularités du mode local

Color and Light

  • Les algorithmes utilisés pour la luminance et le contraste sont différents de ceux utilisés par "Lab adjustements", ce qui peut amener quelques différences de rendu.
Original
Avec Color correction grid
  • Vous disposez d'une fonction "Color correction grid" qui peut être selon le cas :

Deux méthodes sont possibles: Color Toning et Direct

  • Color Toning
  1. Dans ce cas, la luminance est prise en compte dans la variation de la chroma
  2. l'équivalent d'une fonction H=f(H) si le "point blanc" de grid reste à zéro et si vous ne faites varier que le "point noir"
  3. l’équivalent d'un "Color toning" si vous faites varier les 2 points.
  • Direct
  1. Dans ce cas, il y a action directe sur la chroma


Vous pouvez agir sur l'effet souhaité avec "strength", mais aussi avec les autres fonctions notamment "scope" qui permet de délimiter l'action, par exemple en isolant une couleur parmi d'autres.
















  • Le mode inverse, est maintenant doté de la fonction "scope", il peut servir pour l'essentiel, à réaliser des dégradés (gradient), simulation de vignettage, ou de cadres dégradés, ou générer des effets spéciaux. Dans le cas de cadres dégradés, si vous sélectionnez -100 pour "lightness", et réduisez la chrominance, et sélectionnez une valeur de "scope" supérieure à 75, la "bordure" sera noire.


Courbes

  • Une courbe L=f(L) et une C=f(C) permet de moduler la luminance ou la chrominance pour chaque RT-spot (spot de contrôle) en fonction de la luminance ou de la chrominance.
  • Une courbe L=f(H) permet de moduler la luminance pour chaque RT-spot en fonction de la teinte.
  • Une courbe H=f(H) permet de moduler la teinte pour chaque RT-spot en fonction de la teinte.

Pour les rendre actives, il est nécessaire d'activer la combobox "Curves type".

Color and Light dispose de deux améliorations : mask et structure.

En mode "inverse" les courbes L=f(H) et H=f(H) ne sont pas implémentées ainsi que l’aperçu des modifications.

Exposure

Ce module "ressemble" à celui en mode global RGB, mais :

  • il fonctionne entièrement en mode L*a*b*, d'où des différences de rendu;
  • il n'a pas les curseurs "lightness, chroma et contraste" dont les fonctions sont déjà présentes dans "Color and Light"
  • un curseur "chroma compensation" est une particularité du mode L*a*b* : il permet d'éviter une variation de saturation apparente - le réglage par défaut devrait convenir dans une majorité de cas.
  • vous avez le choix entre l'algorithme standard et un "Poisson discrete equation' (PDE)

Algorithmes PDE

Ces algorithmes sont de 2 types:

Ipol - Contrast attenuator (modifié par jacques)

  • Ce 2eme algorithme qui est un "atténuateur de contraste" (ce n'est pas un "Dynamic Range Compression") PDE possède 3 curseurs :
    • Laplacian threshold qui réalise une convolution ignorant les valeurs inférieures au seuil
    • Linearity qui permet d’accroître la luminance pour les valeurs inférieures à la moyenne
    • Balance PDE qui équilibre le résultat en mélangeant le résulta PDE à standard (1 = 100% PDE)
    • Gamma qui modifie la répartition de la Luminance avant et après le Laplacien


N'hésitez pas à modifier les réglages "traditionnels" utilisés dans Exposure :

  • valeurs négatives de 'black'
  • gamma inférieur à 1
  • réduction des valeurs habituelles de "Exposure compensation"
  • action sur Shadows
  • etc.

PDE résoud l'équation de Poisson (Laplacien + Fourier) après une transformée de Fourier : il apporte des résultats différentes qui adoucissent l'image et atténuent le bruit.

Fattal Tone mapping - Compress Dynamic Range

Légèrement différent de celui du menu principal avec 3 curseurs "standard", Amount, Detail, Anchor, plus un curseur "Details levels" (sensible à la taille du RT-spot). Il permet notamment:

  • d'accroître la compression dynamique des images.
  • de rendre l'image utilisable pour les masques (sinon la luminance sera souvent très faible) et permettre ainsi avec un deuxième RT-spot, proche du premier, qui permet l'apport du masque pour les images difficiles.

Autres

  • un curseur "shadow" qui utilise le même algorithme que "Shadows-Highlight", mais limité à shadows et avec les paramètres par défaut : il utilise pour pondérer l'action en fonction de la luminance, le même curseur que celui des "shadows compression" , en effet soit ils sont exclusifs (black ou shadows), soit ils vont dans le même sens. Ce curseur supplémentaire "simplifie" l’usage pour l'utilisateur!
  • il y a une seule courbe "contraste", similaire à celle de L=F(L) présente dans "Color and Light". Il est évident que le rendu de cette courbe est différent de "Tonecurve" qui agit en mode RGB. Vous pouvez si vous le souhaitez activer les 2 courbes L=f(L) dans "Color and Light" et "Exposure"
  • ne pas hésiter à utiliser modérément "highlight compression" qui améliorera la sélection.

Exposure dispose de deux améliorations "mask" (partiel en inverse) et "structure" (pas en inverse).

Il peut servir de gradient (graduated filter), dans ce cas choisir des valeurs de "scope" élevées.

Shadows-Highlight est une alternative possible, notamment si le RT-spot est dans une zone d'ombre importante.

  • Remarque : éviter de placer le Spot dans des parties à très faible luminance, les résultats peuvent être inattendus

Warm - Cool

Un curseur permet :

  • de faire varier la "chaleur" de la zone sélectionnée.
  • de réduire ou supprimer certains artefacts de couleurs, par exemple dus à de multiples illuminants,...

A noter que l'algorithme ne correspond pas à une balance des blancs - même si cela en a l'apparence. L'algorithme utilise une partie de CIECAM02, le processus CAT02 qui est probablement la meilleure adaptation chromatique disponible. Par rapport à la référence D50, lorsque vous souhaitez réchauffer l'image, le curseur va au contraire abaisser la température des "viewings conditions", et bien sûr l'accroître lorsque vous souhaitez "refroidir" la zone concernée. A noter que vous pouvez obtenir un résultat similaire pour l'image entière en utilisant le module CIECAM02, avec :

  • "Scene conditions" : WP model ==> free temp + green + cat02, temperature = 5000K, Surround = average, CAT02 adpatation = 100, Yb=18, Scene absolute luminance = 400
  • aucun réglage dans "Image adjustements"
  • "Viewing conditions" : CAT02 adaptation = 100, Viewing absolute luminance = 400, Surround = average, Yb=18, et bien sûr réglage de la température souhaitée.

Shadows Highlight

Seul le mode "Lab" est disponible.

Cet algorithme associé à la notion de RT-spot et de "scope" est une alternative à Exposure, notamment lorsque le Rt-spot est dans une zone d'ombre où la luminance est très faible.

Il est doté d'un module "inverse" et de masques (partiel en inverse).

Il peut servir de gradient (graduated filter), dans ce cas choisir des valeurs de "scope" élevées.

Dans les cas d'importants débouchage des ombres, l'utilisation de "Local denoise" peut être nécessaire.

Vibrance

Module similaire à celui du menu principal.

Local contrast

Vous disposez de 2 options

  1. Unsharp mask : l'algorithme est similaire à celui du menu principal
  2. Wavelet : l'algorithme correspond à une utilisation - très simplifiée - du module wavelet, combinant un algo proche de "Final contrast local" et "contraste pour l'image résiduelle".

Unsharp mask

Rendu différent du fait de la position dans le processus.

Une case à cocher "Use Fast Fourier" a été ajoutée, elle permet d'utiliser la transformée rapide de Fourier, pour générer le flou (blur) nécessaire à "Local contrast"

  • La formule utilisée est la formule de Gauss qui s'applique après la transformée et avant la transformée inverse.
  • formule de Gauss G(x,y) = (1/2*PI*sigma) * exp(-(x2 + y2) / 2* sigma2).
  • version adaptée à Fourier : G(x,y) = exp((-sigma)*(PI * x2 + PI * y2))

Cette formule par définition est exacte quelque soit le rayon sigma.

A noter la différence de rendu avec la fonction utilisée dans Rawtherapee qui utilise une série de formules approximatives.

La FFT (Fast Fourier Transform) a un temps de traitement qui ne dépend que la surface a traiter, l'application de la fonction de Gauss, est quasi instantanée et indépendante du rayon. A noter l'optimisation de la FFT lorsque les dimensions (H, W) de la zone correspondent à la décomposition en facteurs premiers et uniquement ceux-ci. 2^n, 3^p, 5^q, 7^r, 11^a, 13^b (avec a + b = 0 ou 1).

Wavelet

Vous disposez:

  • d'une courbe qui agit sur le contraste, attention on n'agit pas sur la luminance mais sur les décompositions, par exemple le milieu de la courbe correspond à la valeur moyenne de chaque niveau de décomposition (contraste apparent), l'extrémité droite au maximum...
  • d'un sélecteur de "level" (niveau) - l'algorithme réduit automatiquement le niveau si l'espace disponible (taille du spot - ou dimension du preview) est insuffisante : au niveau 8, il faut au minimum 512 pixels, au niveau 7 256, au niveau 6 128, au niveau 5 64, au niveau 4 32, au niveau 3 16, au niveau 2 8, au niveau 1 4
  • un curseur qui agit sur le contraste de l'image résiduelle
  • un curseur qui agit sur la saturation (chroma) de l'image résiduelle
  • des fonctions "Clarity" et "Sharp Mask"
    • c'est le sélecteur de niveaux qui permet de choisir entre "Clarity" et "Sharp mask", pour les valeurs inférieures ou égales à 4 "Sharp Mask", pour 5 et au dessus "Clarity"
    • "Merge Luma" permet de sélectionner l'intensité de l'effet recherché sur la luminance.
    • "Merge chroma" permet de sélectionner l'intensité de l'effet recherché sur la chroma.
    • un slider "Soft radius" (algorithme GuidedFilter linéaire) permet de réduire les halos et les irrégularités.

Tone Mapping

  • Ajout d'un slider "saturation" (formule de Mantiuk quelquefois insuffisante)
  • Strength est renommé en "Compression strength" - sa vraie fonction.
  • Gamma est étendu de 40 jusque 400
  • Changement de Iterates de 5 à Edge stopping * 15 (il faudrait faire la même chose au niveau algo principal)
  • ajout d'une "checkbox" : "Normalize luminance". Dans le cas activé, l'image finale a la même moyenne et la même variance que l'image initiale.
  • Mask


Tone-Mapping associé à "scope" permet de réaliser - entre autres -une fonction clarté (clarity), limitée à une zone d'action.

Soft Light and Original Retinex

Soft Light est identique à celui du menu principal

Original Retinex

Après essais, j'ai tenu à ajouter - exclusivement en mode local, l'algorithme original de Retinex. Cet algorithme est différent de ceux utilisés par ailleurs, y compris dans Rawtherapee. Il essaie de traduire la perception de l’œil lorsque il y a des ombres et des variations de luminance; perception de l’œil qu'un capteur photographique a du mal à rendre. Par exemple pour un portrait au flash ou en lumière forte le visage verra souvent apparaître des zones ombre ou lumineuse trop accentuées - qu'on pallie quelquefois avec des fonctions telles "dodge" and "burn"

Il peut dans certains cas remplacer cette fonction "dodge" and "burn" qui indiquent avec une brosse les endroits à assombrir ou éclaircir. Dans le cas de ce Retinex original PDE cette opération est automatique.

Je me suis servi du code trouvé sur "Ipol" https://www.ipol.im/pub/art/2011/lmps_rpe/ que j'ai modifié et adapté à Rawtherapee et au "contrôle local"

Cet algorithme complexe se décompose en plusieurs étapes:

  • lecture de l'image
  • utilisation d'un Laplacien discret avec seuil qui permet de déterminer l'intensité du Laplacien : les valeurs de "strength" aux environs de 70 amènent un "threshold" interne du Laplacien aux environs de "4" (référence habituelle des transformées de Laplace). Ce Laplacien va éliminer les petites variations de luminance inférieures au "threshold"
  • Le curseur "Laplace threshold deltaE" permet une différenciation du seuil du Laplacien selon le deltaE. Sous la valeur sélectionnée un Laplacien "plein effet" est choisi, au dessus de la valeur un 2ème Laplacien 60% plus faible est combiné avec le premier. Cette action est différente de celle de "scope" qui réduit l'action mais globalement. Ceci permet de mieux séparer l'avant-plan de l'arrière plan.
  • création d'une transformée de Fourrier - 2 dimensions (DCT Discrete Cosinus Transform)
  • résolution de l'équation de Poisson (PDE) pour "équilibrer" le système
  • transformée inverse de Fourrier - 2 dimensions
  • normalisation de la luminance par rapport à l'image d'origine : même moyenne et même écart-type.

Vous pouvez avoir un aperçu du processus avec le menu "Show process Fourier" qui permet de voir les différentes étapes;

  1. création du Laplacien variable (1ère étape)
  2. transformée de Fourier (DCT : discrete cosinus transform) de ce Laplacien
  3. résolution de l'équation de Poisson (PDE : Poisson discrete equation) sous la décomposition de Fourier : notez la relative proximité de cette image (sous sa forme Fourier) et celle du Laplacien
  4. transformée inverse - non visible dans cet aperçu... mais vous avez le résultat final!
  5. normalisation de la luminance (ici "absence de")

A tester, notamment dans les portraits...

Smooth Blur and Noise

Vous avez le choix entre 3 méthodes:

  1. Gaussian Blur and Noise : un filtre gaussien est appliqué, Blur n'est actif que si Radius supérieur ou égal à 2. En réduisant notablement la valeur par défaut de "scope" et en agissant éventuellement sur "Luminance only" il est possible d'obtenir des flous différenciés selon la teinte.
  2. Median : vous pouvez choisir entre 3x3, 5X5, 7X7, 9X9 et le nombre de passes de 1 à 4 (ces medians sont directement dérivés de ceux de Denoise)
  3. Guided Filter luminance : vous pouvez sélectionner "radius" et "threshold", l'ensemble agit sur l'impression de force.

Vous disposez de masques et aperçu des modifications y compris en mode inverse.


Vous disposez de 2 méthodes :

  • "normal" : l'algorithme de détection de forme a été amélioré. Il se rapproche de celui utilisé dans les autres modules.
  • "inverse" : ce nouvel algorithme utilise les mêmes processus que "normal" et par l'utilisation de "scope" l'utilisateur peut cibler plus précisément l'action.

Attention:

  • travailler en mode inverse, va flouter des zones importantes qui ne pourront pas être corrigées ensuite
  • l'action de "scope" peut être déroutante dans certains cas : par exemple pour un portrait les yeux - différents de la peau - seront floutés si "scope" est trop faible.

Retinex

Avertissement important

Retinex exige de sévères conditions pour fonctionner de manière optimale. Il est indispensable d'avoir l'étendue nécessaire pour mettre en oeuvre les très importants rayons de flou gaussien. L'architecture de Rawtherapee ne permet pas dans le "preview" d'avoir dans tous les cas les conditions qui permettent cette mise en oeuvre. En conséquence il y aura des différences entre l’aperçu à l'écran et la sortie "TIF ou JPG". Ces différences sont d'autant plus importantes que:

  • le spot est de petite taille;
  • les valeurs de "scale" sont élevées;
  • "radius" est important.
  • "chroma" est utilisé au delà de 40

L'algorithme "pleine image" n'est pas soumis à ces restrictions !

De plus la quantité de ressources consommées, mémoire, temps de traitement augmente avec :

  • la taille du spot
  • "radius" élevé
  • "scale" élevé
  • "chroma" est utilisé au delà de 40
  • utilisation de masques

On peut facilement atteindre des valeurs de 6 ou 8 GB de mémoire consommée ! Par exemple une image de D850 : 8280*5512 - Retinex : spot au delà des limites de l'image, Radius = 500, Scale = 10, pas de masques, aboutit à plus de 9GB nécessaires !!

Fast Fourier Transform

Une case à cocher "Use Fast Fourier" a été ajoutée, elle permet d'utiliser la transformée rapide de Fourier, pour générer le flou (blur) nécessaire à Multi Scale Retinex

  • La formule utilisée est la formule de Gauss qui s'applique après la transformée et avant la transformée inverse.
  • formule de Gauss G(x,y) = (1/2*PI*sigma) * exp(-(x^2 + y^2) / 2* sigma^2).
  • celle appliquée est sa version "Fourier" G(x,y) = exp((-sigma^2)*(PI * x^2 + PI * y^2))

Cette formule par définition est exacte quelque soit le rayon sigma.

A noter la différence de rendu avec la fonction utilisée dans Rawtherapee qui utilise une série de formules approximatives. Il est possible (pas recommandé) d'utiliser la variable Fftwsigma=true dans "options". Si vous basculez sur "false", l'algorithme FFT sera modifié pour essayer de s'approcher de la formule "ancienne".


La FFT (Fast Fourier Transform) a un temps de traitement qui ne dépend que la surface a traiter, l'application de la fonction de Gauss, est quasi instantanée et indépendante du rayon.

Optimisation FFT

A noter l'optimisation de la FFT lorsque les dimensions (H, W) de la zone correspondent à la décomposition en facteurs premiers et uniquement ceux-ci. 2^n, 3^p, 5^q, 7^r, 11^a, 13^b (avec a + b = 0 ou 1)

  • Cette optimisation n'est pas effective si dans le sens de la hauteur de l'image les 2 limites du Spot sont au-delà de l'image, identique pour la largeur.
  • Cette optimisation n'est pas effective dans le Preview, si les dimensions du spot sont au-delà du Preview.
Précision des calculs

La version FFTW est "float", après plusieurs essais cette précision semble suffisante, les erreurs après une transformée suivie d'une transformée inverse, concernent sur une image entière quelques pixels isolés avec des différences inférieures à 1/1000ème, sur la globalité de l'image pas de différences mesurables.

Il doit être possible - si la nécessité s'impose - d'installer dans GitHub - la version "double" de FFTW

Fonctionnalités

Le nombre de réglages est différent, par rapport au mode standard. D'autre part, "Retinex local" agit en fin de processus contrairement au mode standard qui est au début du processus Raw. Vous disposez en plus du module "raw" Retinex pleine image

  • un curseur "Chroma" qui permet d'agir sur la couleur en plus de la luminance : ce curseur n'agit pas sur la saturation (ou partiellement), mais agit sur "C" (LCH) de la même manière que sur "L", la luminance. Afin de réduire les besoins en ressources (mémoire, temps de traitement), jusque Chroma = 40, Retinex chroma n'est pas appliqué, mais seulement un ajustement de la chromaticité "C" (saturation). A partir de Chroma=21 , Retinex est appliqué.
  • un curseur "Guide filter radius" qui permet de réduire la brume à partir de "transmission map" et accessoirement de réaliser un adoucissement (soft) en fin de processus.
  • un curseur "dehaze" qui utilise l'algorithme dehaze pleine image. La combinaison des 2 algorithmes de réduction du voile atmosphérique (Retinex et Dehaze) permet une résolution élevée du traitement du voile atmosphérique, chacun des algorithmes ayant ses points forts - en particulier Retinex permet de différencier avant et arrière plan et Dehaze est globalement plus facile et pertinent dans l'action.
  • "scale" possède la particularité de sélectionner le mode "linéaire" plutôt que l'algorithme "logarithmique" pour les valeurs inférieures ou égales à 2. Si vous choisissez scale=1, l'algorithme "Retinex" est partiellement court-circuité et le process se comporte comme "local contrast" mais avec des valeurs de réglages nettement plus importants - certaines fonctionnalités ont disparues (choix du mode "Low, Uniform, High", pas de courbe "Transmission gain"), d'autres ont des réglages différents (contrast, Threshold).
  • "Darkness" et "Lightness" sont sans effet lorsque la valeur pas défaut "1" est choisie. Dans les autres cas, la dernière étape de "Multiple scale Retinex" se voit appliquée un algorithme proche de "local contrast", ces 2 curseurs, associés à "Strength" vont permettre de jouer en amont sur le contraste local.
  • les autres sélections possibles : "Méthode : low, uniform, high", "Strength", "Radius", "Threshold", "Contrast", ont un principe similaire à ceux du module principal, même si certains réglages et effets induits sont un peu différents.
  • ajout d'une "checkbox" : "Normalize luminance". Dans le cas activé, l'image finale a la même moyenne et la même variance que l'image initiale.

Possibilité de "masques" dont le fonctionnement est globalement similaire aux autres masques, mais qui a ses particularités - absence du renforcement de la sélection deltaE lorsque "transmission map" est activé - mais qui dans ce cas peut aboutir a des valeurs de "local contrast" élevées.

Par exemple pour traiter une image fortement brumeuse

  • en première étape agir dans le menu principal avec la fonction "dehaze", dans certains cas l'arrière plan ne sera pas ou peu impacté et restera brumeux
  • puis sélectionner "locallab" et "Retinex", positionner le spot dans la zone brumeuse puis
    • agir sur "dehaze"
    • puis régler "radius" avec une valeur élevée (supérieure à 100 ou 150)
    • régler contraste avec une valeur faible (inférieure à 100)
    • agir sur "scope", strength et chroma pour obtenir l'effet souhaité.

Les résultats sont la plupart du temps assez imprédictibles, par exemple certaines images seront peu sensibles au curseur "Threshold", d'autres très sensibles... Mais globalement ce module à deux usages essentiels - avec des réglages différents :

  • traiter les images brumeuses
  • réaliser un contraste local avec des valeurs importantes, avec possibilité de simuler "Clarity"...

Sharpening

Seul le mode "RL deconvolution" est proposé, vous devez travailler en mode 1:1 (zoom 100%) .

Contrast By Detail Levels

  • zone minimum d'action : 64x64 pixels - mais vous pouvez utiliser conjointement les propriétés de "Transition" pour réduire la zone d'action.
  • à utiliser de préférence en mode 1:1 (zoom 100%)
  • pas de curseurs pour la gestion de la peau; le système utilisé par les RT-spot le remplace.
  • ajout d'un curseur pour la chroma
  • ajout de "image résiduelle" avec 2 possibilités - "Clarity" - et contraste
  • ajout d'un curseur "Blur levels" qui va permettre :
    • de flouter le résultat lors du traitement des défauts de capteur
    • d'opérer un flou sélectif par niveau, par exemple pour simuler un Bokeh

Masque en mode normal.

Cet algorithme permet plusieurs améliorations "locales"

  • par exemple réduire les défauts de la peau
  • accroître les perspectives et le relief sur des zones de couleurs et de structure (comme le wavelet), mais en limitant l'action (par scope) à des zones délimitées.
  • retirer des défauts (tâches étendues grises ou de couleurs) sur le capteur

Rappel - si la zone sélectionnée est grande et comprends plusieurs objets similaires en "teinte", "chroma", luma" et 'contrast", l'algorithme ne sélectionnera que celles-ci, laissant le reste de l'image inchangée.

Denoise

Cette fonction permet 6 usages et doit être utilisé en mode 1:1 (zoom 100%):

  1. grâce à la sélection "Global quality" - enhanced + chroma denoise, elle réduit très légèrement sans intervention de l'utilisateur le bruit de chroma pour améliorer la sélection dans des images légèrement bruitées
  2. Ne sélectionner qu'une zone à débruiter (par couleur...) et laisser le reste de l'image bruitée
  3. Débruiter une zone qui aura vu le bruit s'accroître notamment à cause d'un accroissement important de l'exposition, ou de débouchage des ombres
  4. Venir en complément de l'algorithme principal. Par exemple faire un réglage général a minima, puis dans certaines zones choisies réduire le bruit plus profondément.
  5. Comme le traitement "local" est plutôt en fin de processus (le module Denoise principal est en début), il va autoriser une réduction du bruit généré par les traitements intermédiaires.
  6. apporter un flou gaussien par niveau (pour les faibles niveaux 0, 1 et 2) pour simuler un bokeh


  • Zone minimum d'action pour les ondelettes (wavelet) : 128 pixels * 128 pixels
  • moins de curseurs et de courbes
  • par contre, vous pouvez différencier l'action sur la luminance et la chrominance en fonction de la grosseur du bruit - fine (3 niveaux pour la luminance) ou coarse.
  • de plus vous avez à votre disposition, 1 curseur "DCT"
    • l'algorithme utilise pour la luminance une transformée de Fourier (FFT - fast fourier transformed - DCT discrete Cosinus transformed)
    • les curseurs à 0, l'action de la DCT est maximum, si vous souhaitez restituer des détails, accroissez les valeurs.
  • Un curseur "Scope" permet de faire varier - avec un algorithme simplifié - l'action selon le deltaE du sujet, par exemple renforcer l'action sur la peau et laisser le fond bruité (luminance et chrominance). Au delà de "scope=80", progressivement - jusque 100 - toute la zone sélectionnée aura la même intensité de dé-bruitage, bien sûr en tenant compte de la transition.
  • Un très léger accroissement de la saturation est exécuté, si vous actionnez l'un ou l'autre des curseurs "chroma".

Qualité améliorée

  • Si vous déplacez le curseur "coarse" à 1, aussi bien pour la luminance que pour la chrominance un algorithme "amélioré" est utilisé - en réalité il fait "2 passes".
  • A la position "1" l'algorithme améliore seulement l'algorithme "fine"
  • A partir de "2" l'algorithme "coarse" est activé.

Equalizer

Vous disposez de 2 "equalizers", aussi bien pour la luminance que la chrominance.

  • Le premier renforce (par défaut) l'action sur les basses lumières. A "0" l'action sur les lumières hautes / moyennes / basses est identique.
  • Le second équilibre la force d'action sur le canal "rouge -vert" ou sur le canal "bleu - jaune"

Bilateral filter

Ce dispositif est la réplique du "Impulse denoise" des rubrique générales. de mon point de vue son action va au delà du bruit d'impulsion.


Nota : vous pouvez exclure, ou moduler l'action à l'intérieur d'une première zone sélectionnée, en ouvrant un RT-spot "Excluding spot" et en agissant sur Scope.

Cas d'usage spécifique : réduction des défauts (capteur sale, yeux rouges, ...)

Par conception "Local Adjustements" n'a pas été conçu pour éliminer ces défauts. Néanmoins par effet de bord, certains défauts apparents et gênant en photographie peuvent être réduits voire supprimés. Ceci bien sûr n'est pas incompatible avec d'autres modules plus spécialisés incorporés ou non à "Local adjustements"... Au moins 3 fonctions présentes, en adaptant l'usage, peuvent être utilisées, séparément ou ensemble :

  • "Color and light" pour des défauts ponctuels ;
  • "Contrast by detail level" pour des défauts répartis ;
  • "Blur and Noise" en complément éventuel : attention cette action est assez destructrice - à utiliser avec modération.

Vous pouvez agir soit:

  • directement, cas général, sur le fichier "raw", ou "TIF", etc.
  • soit sur le fichier flat-field si vous en avez élaboré un.

Utilisation avec le module "Color and Light"

  • Activez "Color and Light"
  • Vous pouvez utiliser l'équivalent d'une fonction "yeux rouges" en choisissant un encadrement assez serré de l’œil - sélecteur circulaire centré sur le rouge, délimiteurs de spot proches de l’œil - une valeur de scope réduite, puis agir sur réduction "lightness" -100, et réduction chrominance -100.
  • De la même manière vous pouvez réduire les défaut du capteur de type "Spot IR", en choisissant un encadrement assez serré du défaut - sélecteur circulaire centré sur le défaut, délimiteurs de spot proches du défaut - puis agir sur "chrominance" en réduisant la valeur, agir éventuellement sur "scope" pour réduire l'étendue de l'action.
  • Vous pouvez dans des cas simples, réduire les défauts de type "capteur encrassé" notamment lorsque celui-ci est gras. Ceci se traduit par des taches qui apparaissent sur les fonds unis. Pour cela choisissez un encadrement assez serré du défaut - sélecteur circulaire centré sur le défaut (adaptez la taille du spot) , délimiteurs de spot pas trop proches du défaut pour permettre une transition peu visible. Puis: a) réduisez "Transition" à des valeurs faibles - transition weakening élevé; b) agissez sur "luminance" et éventuellement sur "chrominance" pour approcher le rendu de la zone polluée à celui de la zone saine; c) agir modérément sur "scope" pour moduler l'action souhaitée. d) possibilité d'utiliser "Color correction grid - direct", ainsi que "Softradius"

Utilisation avec le module "Contrast by detail levels"

Dans le cas de capteur encrassé (de type "graisse"), et lorsque la zone est importante ou pour une série de petits défauts, Il peut être utile d'utiliser "Contrast by details levels" qui va agir comme un outil "wavelet" sur la luminance et aussi si nécessaire sur la chrominance. Dans ce cas:

  1. mettez le Spot de sélection sur un défaut prononcé (en adaptant sa taille si nécessaire);
  2. choisissez une zone de sélection large pour couvrir la majorité de la surface concernée par les défauts;
  3. Sélectionnez une valeur de transition assez importante (selon le cas) et "transition weakening" élevé;
  4. Activez "Contrast by detail levels" et agissez sur les niveaux 3 , 4 (rarement 5) ou plus faibles en réduisant le contraste (valeurs inférieures à 100) et en agissant si nécessaire sur le curseur chroma.
  5. Agissez éventuellement sur "Blur levels" (qui fonctionne par niveaux) pour flouter le résultat.

Attention, la zone d'action est limitée à 64x64 pixels, en dessous de ces valeurs, CBDL est désactivé pour éviter le crash - la décomposition en ondelettes de Harr, nécessite au mimima 64x64 pixels.

Temps de traitement et utilisation de la mémoire

Lorsqu'on utilise la sortie JPG ou TIF, et pour le mode "normal", l'algorithme n'effectue les calculs que pour la zone délimitée. En ce sens les temps de traitement et l'occupation mémoire sont réduits. Bien sûr le temps de traitement va dépendre du nombre de spots de contrôles, de leur taille, et du type de traitement.

Les plus gros consommateurs de temps sont

  • "Retinex" : forte influence de la taille du spot, de "radius" et de "scale" et de "chroma" au delà de 40, ainsi que de FFTW.
  • "Tone Mapping" : "edge stopping" accroît linéairement le temps de traitement. "Reweigthting iterate" multiplie par sa valeur les temps de traitement. On peut très facilement attiendre des temps de plusieurs dizaines de secondes.

Si on exclue "Denoise" , "Sharp" et "Retinex", les temps de traitement sont de l'ordre de quelques dixièmes de seconde par spot de contrôle, et le besoin en mémoire de l'ordre de quelques centaines de M.

Quatre réglages agissent fortement sur les temps de traitement et le besoin en mémoire :

  • denoise qui ajoute selon la taille du spot de contrôle de l'ordre de 1 seconde et 1 M de mémoire.
  • quality "enhanced + chroma denoise", qui ajoute environ selon le spot de contrôle de l'ordre de 0.5 seconde à 1 seconde et 0.6 M.
  • "mask" ("Color and Light", "Exposure", "Shadows Highlight", "CBDL", "Tone mapping", "Retinex", "Tone mapping, "Smooth and blur" et "Denoise") accroît nettement les besoins en mémoire. Attention si votre machine a des capacités limitées et si vous sélectionnez une grande zone.
  • l'option FFTW (Retinex, Local contraste) même optimisée peut accroître ou réduire les temps de traitements - dans tous les cas elle améliore la qualité:
    • pour des petites tailles et moyennes tailles de Spot (jusque 2000 * 2000 pixels) FFTW sera plus rapide
    • pour les grandes tailles (5000 * 4000 pixels), FFTW sera plus lent

Aspects logiciels

Comme le traitement est itératif pour chaque Rt-spot, il est important de connaître l'ordre

  • Smooth Blur and noise, Denoise, Contrast By Detail Level, Vibrance, Tone mapping, Shadow Highlight, Soflight, Local contrast, Sharp, Retinex, Exposure, Color and light, Avoid color shift
  • Comme évoqué dans le texte, certaines fonctions ont été réécrites, soit pour s'adapter à l'échelle, soit par qu'elle fonctionne en mode Lab au lieu de RGB

Quelques questions ?

Et le détourage des objets ?

C'est une question fréquemment posée !

  • Dans une majorité de cas, l'algorithme de détection de forme sera largement suffisant pour ne sélectionner que ce qui est nécessaire, avec à la fois la commande "scope" et les curseurs prévus dans "settings" - shape detection et transition
  • l'utilisation de "exclude spot" doit permettre de résoudre les cas délicats
  • les masques prévus dans 7 modules - Color and Light, Exposure, Shadows Highlight", CBDL, Tone mapping, Smooth and Blur et Denoise doivent aussi permettre d'améliorer la sélection dans quelques cas.
  • la sélection peut être encore améliorée en choisissant 2 spot, très proches mais chacun sur une "couleur" (au sens deltaE) différente, avec 2 masques complémentaires

Si un spécialiste GUI est capable par exemple d'agir sur les 4 ellipses et les transformer en courbes de Beziers (chacune inscrite dans le rectangle centre X Y), alors avec une simple LUT on pourrait simuler un détourage... pour les irréductibles des détourages, calques...

Comment réaliser un gradient de luminance (graduated filter) ?

La réponse peut étonner, mais avec quasiment tous les modules ! Plus sérieusement 3 modules permettent seuls - ou combinés entre eux - de réaliser ce gradient de luminance

  1. shadows-highlight (celui que je recommande)
  2. exposure
  3. Color and light

Pour cela :

  • utiliser la dissymétrie possible de la forme du Spot, en plaçant le centre proche soit de la zone sombre dont doit partir le gradient - en évitant si possible le point le plus sombre lorsque la luminance est très faible, soit de la zone lumineuse - en évitant si possible le point le plus lumineux lorsque la luminance est très forte
  • par exemple si la zone sombre est en bas à gauche et qu'on souhaite éclaircir l'image en diagonale, placer le spot en bas à gauche et ouvrir le spot vers le haut et à droite avec l'angle souhaité pour le gradient
  • agir sur "shadows" ou "highlight" - avec le module 1. ou "exposure" avec le module 2., ou les sliders et courbes du module 3.
  • régler - accroître la valeur de "scope" pour obtenir l'effet souhaité (exclusion ou non de certaines couleurs...)
  • agir éventuellement sur les curseurs "Shape detection" pour accrôitre ou réduire l'effet - selon la valeur de "scope"
  • régler la "transition value", "transition weakening" et "transition differentiation" pour obtenir l'affaiblissement souhaité

Essayez aussi les fonctions "inverse" !

La rotation possible du Spot, peut paraître nécessaire a priori, mais:

  • elle va compliquer le code
  • il n'est pas sûr que cet apport soit indispensable, sinon lorsque la taille du RT-spot est proche de l'image entière, et que l'axe du gradient est proche de X ou de Y.

Et le "Spot removal" pour retirer les défauts

En consultant les paragraphes précédents, je pense qu'une majorité de défauts peuvent être traités avec les modules actuels, même si "Local Adjustements" n'a pas été conçu pour cela:

  • yeux rouges
  • défauts - poussière sur le capteurs (1)
  • Spot IR (Infrarouge)
  • graisse (1)

Avec 2 modules - Color and light, CBDL.


Mais bien sûr ceci dont (1) n'est pas incompatible avec un futur module "classique" à base de "brosse" ou autre algorithme

A quoi sert l'association Retinex - Dehaze ?

Chacun des 2 algorithmes a ses points forts

  • Dehaze est très performant globalement, mais "ignore" les arrières plans
  • Retinex est performant sur la différenciation avant - arrière plan, mais peut produire du halo

La combinaison des 2 : Dehaze à partir de l'image globale (ou locale) et Retinex pour la partie locale de l'arrière plan, permet de résoudre la quasi totalité des cas

Pourquoi y a-t-il un "masque" pour chacun des modules concernés et pas un "masque global" ?

Simplement parce que chacun des modules "Exposure" , "Color and "Light", "Shadows highlight", "CBDL", "Tone mapping" subit les traitement récursif des autres modules - exactement comme l'ensemble des modules de Rawtherapee, interagissent l'un sur l'autre. J'ai fait une exception pour "Smooth and Blur" et "Denoise" qui ont en commun un masque, car:a) ils sont en début de processus "Local adjustements" et n'ont que peu d’interactions.

Avoir un masque global, revient par comparaison à n'avoir qu'une seule courbe pour gérer l'ensemble des courbes de Rawtherapee.

Bien sûr, par simplification, il n'y a que 7 modules avec "masques", rien n'interdit de l'étendre aux autres...ce n'est qu'une question de temps...si la demande s'en fait sentir

Pourquoi n'y a-t-il pas toutes les fonctions de Rawtherapee avec le mode "local" ?

Le mode local est fondé et articulé autour du concept "L*a*b*" et de la notion de deltaE (Lab nécessaire), une majorité de modules "principal" ont leur équivalent "local"

Par contre, les modules "rgb" après démosaicing ou "RGB" avant demosaicing nécessiterait une autre approche que le concept du deltaE. Donc rien d'impossible, par exemple pour réaliser un module "balance des blancs locale"...

Remarque : il est tout à fait possible de réaliser un mode global "plein écran" à partir de "Local adjustements" : régler transition sur 99, choisir un spot (rectangulaire) tel qu'il soit plus grand que le preview.

Comment modifier uniquement l'ensemble des feuillages d'une image ?

L'algorithme permet de ne sélectionner qu'une couleur, par exemple les feuilles d'un arbre.

Pour cela:

  • la taille du spot doit être réduite pour ne cerner que la couleur concernée.
  • Ajuster "scope" sur des valeurs faibles.
  • Étendre l'action du RT-spot pour prendre en compte - si vous le souhaitez - l’ensemble des feuillages de l'image (par exemple si il y a plusieurs arbres)
  • Agir sur les champs que vous souhaitez modifier (luminance, saturation, etc.)

Comment réaliser la fonction "Clarté" (Clarity)

Au moins 3 façons :

  1. en utilisant CBDL et en agissant sur "Residual image - Clarity" - effet "moyen"
  2. en utilisant Tone-Mapping - effet "fort" - notamment avec l'usage de gamma et amount et des valeurs modérées de "compression" (attention aux temps de traitement)
  3. en utilisant Local-contrast - effet "faible"

Et pourquoi pas avec Retinex... qui est une autre manière de réaliser un "local contrast" - plus difficile à manipuler, mais l'algorithme de principe est proche.

Un masque sur la totalité de l'image (ou partielle) peut permettre de modifier le gamma de l'image et affaiblir - renforcer la luminance de certaines zones.