Courbe de saturation
Informations techniques
- Description
- Remappez la saturation et la luminosité à l’aide de courbes.
- Objectif
- Correctif ou créatif.
- Entrée
- Relatif à la scène, linéaire, RVB.
- Traitement
- Darktable UCS / JCH (perceptuel).
- Sortie
- Relatif à la scène, linéaire, RVB.
Remappe la saturation et la brillance d’une image en fonction de sa propre valeur d’entrée, à l’aide de deux courbes indépendantes et modifiables. Contrairement à un curseur de saturation ou de vibrance plat, chaque courbe vous permet de décider exactement de la quantité de correction appliquée à chaque point le long de la plage de saturation - par exemple, protéger les couleurs déjà vives tout en augmentant celles presque neutres, ou l’inverse.
Un filtre guidé optionnel sensible aux bords peut lisser la valeur à partir de laquelle les courbes sont lues, de sorte que la correction varie progressivement sur les bords de saturation au lieu de changer brusquement.
🔗Introduction
Les contrôles globaux de saturation et de vibrance appliquent un seul coefficient, parfois pondéré par la chrominance, à l’ensemble de l’image. Il s’agit souvent d’un instrument trop brutal : les tons de peau, le ciel et le feuillage se situent généralement à des points différents de la plage de saturation, et les pousser tous de la même quantité donne rarement un résultat naturel.
La Courbe de saturation trace une courbe sur toute l’étendue d’un axe de saturation perceptuellement normalisé, de 0 à 100 % de la limite du gamut local, et vous permet d’ajouter, déplacer ou supprimer des nœuds de commande n’importe où le long. Une seconde courbe indépendante fait la même chose pour la brillance, la dimension perceptuelle qui se comporte comme un changement d’exposition tenant compte de la saturation. Les deux courbes sont lues en utilisant la saturation de chaque pixel comme valeur de recherche, de sorte que la correction est locale à la saturation du pixel plutôt qu’à un masque spatial, à moins que le filtre guidé soit activé (voir [Filtre guidé]]](#guided-filter)).
🔗Principes généraux
La valeur RVB de chaque pixel est convertie en un espace colorimétrique perceptuel et réduite à deux nombres : un angle de teinte et une saturation normalisée entre 0 (neutre) et 1 (la limite de gamme pour cette teinte et cette luminosité). Cette valeur normalisée est recherchée sur les courbes de saturation et de brillance, et les hauteurs de courbe résultantes deviennent des facteurs de correction multiplicatifs, appliqués à teinte constante.
Deux formules perceptuelles sont disponibles, à partir du paramètre Formule de saturation :
JzAzBz (2021) : La formule originale. Utilise l’espace colorimétrique uniforme JzAzBz, qui ne tient pas entièrement compte de l’effet Helmholtz-Kohlrausch et peut se comporter moins nuancée près du noir.
Darktable UCS (2022) : L’espace colorimétrique uniforme de Darktable, conçu spécifiquement pour la manipulation de la saturation. Il prend en compte l’effet Helmholtz-Kohlrausch et inclut un modèle de cartographie de gamut intégré et plus précis, donnant des résultats plus homogènes sur toute la plage de luminosité. Il s’agit de la formule par défaut et recommandée.
Les couleurs qui, après correction, se situeraient en dehors de la gamme de destination font l’objet d’un écrêtage doux à teinte constante vers la saturation la plus proche comprise dans le gamut, au lieu d’être soumises à un écrêtage brutal. Cela permet des ajustements de courbe plus forts sans postérisation ni écrêtage près de la limite du gamut. L’écrêtage doux ou soft-clip est appliqué une fois après la courbe de saturation et une autre fois après la courbe de brillance.
🔗Contrôles du module
Le module comporte deux onglets, un par courbe, un rang de contrôles partagés sous le graphique de courbe et une section pliable Filtre guidé.
🔗Onglet de saturation
Courbe de saturation : Trace le multiplicateur de saturation de sortie (axe y) par rapport à la saturation d’entrée normalisée (axe x). La courbe par défaut est une ligne plate à 50 %, un multiplicateur neutre et unitaire. Déplacer un nœud au-dessus de la ligne médiane augmente la saturation à ce point de la plage d’entrée ; le déplacer en dessous la diminue.
-
Cliquer sur la courbe pour ajouter un nœud, faire glisser un nœud existant pour le repositionner
-
Ctrl+clic droit sur un nœud pour le réinitialiser à sa valeur neutre
-
clic droit sur un nœud pour le supprimer, lorsque plus de deux nœuds sont présents
-
Double-cliquez n’importe où sur le graphique pour réinitialiser la courbe active
-
Faire défiler à la molette de la souris sur un nœud pour déplacer sa valeur ; Ctrl+défilement à la molette pour des écarts plus grands
: L’arrière-plan du graphique montre un histogramme compressé logarithmiquement de la distribution de saturation d’entrée de l’image, afin que vous puissiez voir quelles parties de la plage sont identifiées avant de placer des nœuds. Une bande de gradient sous le graphique montre le gradient perceptuel sans teinte correspondant, pour référence.
🔗Onglet Brillance
- Courbe de brillance
- : Fonctionne de manière identique à la courbe de saturation, mais son multiplicateur de sortie s’applique à la dimension de brillance perceptuelle. Les changements de brillance agissent à teinte constante et combinent un décalage de luminance et de chrominance orthogonal à la saturation pure, plus proche d’un réglage d’exposition local tenant compte de la saturation.
-
Les mêmes interactions entre nœuds s’appliquent que pour la Courbe de saturation. Le changement d’onglets ne réinitialise pas l’autre courbe : les deux sont toujours actifs et peuvent être combinés. Les deux courbes sont consultées pour la même valeur d’entrée d’un pixel donné, qu’il s’agisse de la saturation brute de ce pixel ou, avec le filtre guidé actif, de sa valeur lissée.
🔗Commandes partagées
Pipette de couleurs : Échantillonne la saturation normalisée au point sélectionné et la superpose sur le graphique de la courbe active comme guide vertical, en utilisant le comportement de la pipette standard. Utilisez-la pour localiser l’endroit où un sujet, comme la peau ou le ciel, se trouve sur l’axe d’entrée avant de modifier la courbe. Lit toujours la saturation brute et non filtrée par pixel, quel que soit le réglage du filtre guidé.
Affiche le masque de saturation : Affiche ou masque un aperçu en niveaux de gris de la saturation normalisée de l’entrée utilisée pour la recherche des deux courbes, qui s’affiche à la place de l’image. Les zones plus claires correspondent à une saturation d’entrée plus élevée. Avec le filtre guidé désactivé, cela affiche la saturation brute par pixel. Une fois activé, cela affiche la coordonnée exacte décrite sous Protection de la gamme de neutre avec laquelle les deux courbes sont recherchées – brute près du neutre, entièrement lissée au-dessus de la zone protégée. Protection du bruit ne décale jamais cette coordonnée, dans le masque ou dans la correction réelle ; il amortit uniquement les facteurs de saturation et de brillance résultants après la recherche de la courbe, il n’y a donc pas de signature visuelle distincte dans ce masque. Quoi qu’il en soit, le masque reflète l’entrée du module, et non aucune correction appliquée par les courbes.
Formule de saturation : Sélectionne le modèle de normalisation perceptive, décrit dans Principes généraux. Affecte les deux courbes et n’est pas destiné à être modifié régulièrement, d’où sa place dans la ligne partagée plutôt que dupliquée par onglet.
🔗Filtre guidé
Lissage optionnel sensible aux bords de la valeur de saturation avec laquelle les deux courbes sont recherchées. Disponible uniquement avec la Formule de saturation Darktable UCS ; toute la section est désactivée lorsque JzAzBz est sélectionné.
Utiliser un filtre guidé : Permet le lissage. Désactivé par défaut. Désactivé, la recherche de courbe de chaque pixel utilise sa propre saturation brute et normalisée. Activé, cette valeur est mélangée à la sortie d’un filtre guidé scalaire rapide avant d’être utilisée comme recherche pour les deux courbes, de sorte que les pixels voisins avec une saturation similaire sont attirés vers une valeur commune, lissée localement. Réduit les halos et les crénelages aux limites entre les régions saturées et neutres, en particulier avec des courbes agressives et des changements de brillance.
Rayon du filtre : Rayon de voisinage, en pixels, utilisé pour les statistiques locales du filtre guidé. Des valeurs plus grandes donnent une valeur de recherche plus fortement lissée avec une influence spatiale plus large ; des valeurs plus petites maintiennent le lissage plus serré autour des structures locales.
Dégradé des bords : Contrôle la force avec laquelle le filtre suit les bords du signal de saturation. Les valeurs inférieures préservent les bords plus durs et maintiennent la valeur lissée alignée sur la structure de saturation sous-jacente ; les valeurs plus élevées donnent des transitions plus douces et moins ancrées aux bords.
Protection de la gamme de neutre : Centre, en pourcentage de la plage de saturation normalisée, d’une zone proche de la saturation nulle qui est protégée du filtre guidé. Les pixels situés au niveau ou en dessous du côté protégé de cette zone conservent leur propre saturation brute et non filtrée comme valeur de recherche de courbe au lieu de celle lissée ; les pixels situés au-dessus sont recherchés avec la valeur entièrement lissée. Augmentez cette valeur pour garder une plus grande partie de la plage presque neutre intacte par le lissage.
Largeur de transition de protection : Largeur, en pourcentage, de la pente lisse centrée sur Protection de la gamme de neutre sur laquelle la valeur de recherche passe de brute à entièrement lissée. Des valeurs plus larges donnent un transfert plus doux et plus progressif au lieu d’une coupure nette entre les parties protégées et filtrées de la plage.
- Protection du bruit
- : Réduit la force des corrections de saturation et de brillance - et non la valeur de recherche de courbe elle-même - pour les pixels où le résidu local du filtre guidé ressemble à du bruit plutôt qu’à un véritable bord de couleur, sur la base d’une estimation de confiance par pixel calculée avec le filtre. Des valeurs plus élevées atténuent encore davantage les facteurs appliqués vers l’absence de changement (unité) dans ces régions. N’a d’effet que lorsque Utiliser un filtre guidé est activé.
-
Contrairement à Rayon du filtre, _Dégradé des bords, Protection de la gamme de neutre et Largeur de transition de protection, ce contrôle n’a pas d’empreinte visible dans l’aperçu Masque de saturation : ces quatre-là décalent tous la coordonnée à laquelle les courbes sont recherchées, que le masque affiche directement, tandis que Protection du bruit agit après cette recherche, sur la sortie des courbes. Jugez de son effet sur l’image elle-même plutôt que sur le masque.
Remarque : Rayon du filtre, Dégradé des bords, Protection de la gamme de neutre, Largeur de transition de protection et Protection du bruit ne sont actifs que lorsque Utiliser un filtre guidé est activé.
🔗Guide des usages
🔗Flux de travail de base
Lorsqu’elles sont activées pour la première fois, les deux courbes sont par défaut une ligne plate et neutre et l’image reste inchangée.
-
Utiliser la pipette de couleurs sur un sujet que vous souhaitez cibler, par exemple la peau ou le ciel, pour voir où se situe sa saturation sur le graphique,
-
Activer brièvement le masque de saturation pour confirmer quelles régions de l’image correspondent à quelle partie de l’axe x de la courbe,
-
Ajouter un nœud près de la position choisie et faites-le glisser vers le haut pour augmenter ou vers le bas pour réduire la saturation dans cette plage ; la superposition de l’histogramme montre dans quelle mesure l’image est affectée,
-
Ajouter des nœuds supplémentaires pour protéger une extrémité de la plage, par exemple en gardant intactes les couleurs déjà vives près du bord droit, tout en en ajustant une autre,
-
Passer à l’onglet brillance si les couleurs corrigées ont besoin d’une correction de luminance/chroma à teinte constante pour paraître équilibrées, ce qui est souvent utile après une forte augmentation de saturation,
-
Si des réglages forts de courbe produisent des halos ou des crénelages autour de bords saturés, activez le filtre guidé et revérifiez l’aperçu du masque – qui reflète directement le rayon du filtre, l’adoucissement des bords, protège les gammes neutres et la largeur de transition de protection – puis jugez séparément la protection contre le bruit par rapport à l’image elle-même, car elle n’a aucune empreinte dans le masque.
🔗Choisir une formule
Laissez la formule sur Darktable UCS sauf si elle correspond au comportement d’une ancienne modification ou d’un style créé avec JzAzBz. La commutation des formules modifie la manière dont la saturation des entrées est normalisée et modifie donc l’effet des nœuds de courbe existants. Le passage à JzAzBz désactive également entièrement la section Filtre guidé ; ses paramètres sont conservés mais n’ont aucun effet jusqu’à ce que vous reveniez à Darktable UCS.
Remarque : vous devez revérifier les courbes par rapport à la superposition de l’histogramme après avoir changé de formule.
🔗Utiliser le filtre guidé
Le filtre guidé n’est disponible qu’avec la formule Darktable UCS. Cela ne change pas ce que font les courbes ; cela change principalement la valeur de saturation à laquelle elles sont évaluées pour chaque pixel. Commencez avec le rayon par défaut et augmentez-le si des halos persistent sur de grandes transitions de couleur ; augmentez le dégradé des bords uniquement si les transitions semblent encore trop abruptes par la suite. Étant donné que le lissage se situe en amont des deux courbes, il affecte ensemble les résultats de saturation et de brillance ; il n’existe pas de contrôle séparé du filtre guidé par courbe. Si les zones quasi neutres telles que le ciel ou la peau commencent à paraître inégales ou marbrées une fois le filtre guidé activé, augmentez Protection de la gamme de neutre (et adoucissez le transfert avec Largeur de transition de protection) pour les maintenir plutôt sur leur propre saturation brute. Si des paramètres de courbe forts amplifient le bruit visible dans des régions par ailleurs plates et peu détaillées, augmentez la Protection du bruit pour amortir la correction à cet endroit ; jugez cela par rapport à l’image corrigée, et non au masque de saturation, car ce contrôle n’a aucune coordonnée à afficher à cet endroit.
🔗FAQ
🔗Pourquoi la courbe fait-elle référence à une valeur normalisée au lieu de la chrominance brute ?
Les valeurs brutes de chrominance ou de saturation ne sont pas limitées de manière cohérente entre les teintes et les niveaux de luminosité : la même chrominance numérique peut être à peine visible pour une teinte et fortement tronquée pour une autre. La normalisation de l’entrée à la limite du gamut local, de 0 à 1, pour la teinte et la luminosité actuelles permet à la courbe de se comporter de manière cohérente sur l’image : un nœud placé à 80 % signifie toujours 80 % du chemin vers la couleur la plus saturée physiquement affichable à cette teinte et cette luminosité.
🔗En quoi est-ce différent de la notation de saturation perceptuelle de Balance de couleur RVB ?
Balance de couleur RVB applique un seul coefficient de saturation perceptuelle et de brillance, éventuellement réparti entre les ombres, les tons moyens et les hautes lumières via des masques de luminance. Au lieu de ça, la_courbe de saturation_ permet à la correction de varier en continu en fonction de la saturation propre du pixel, indépendamment de sa luminance. Les deux modules sont complémentaires et peuvent être utilisés ensemble : masquage basé sur la luminance dans Balance de couleur RVB, affinage de la saturation ici.
🔗Le filtre guidé mélange-t-il l’image corrigée avec l’original ?
Non. Il ne mélange pas les pixels intacts et corrigés après coup. Il lisse uniquement la valeur de saturation introduite dans les courbes de saturation et de brillance de chaque pixel, avant qu’une correction ne soit calculée. Un pixel est toujours entièrement traité à travers les courbes ; ce qui change, c’est à quel point de la courbe il est évalué.
🔗Traitement interne
Voici l’ordre interne des opérations au sein du module, pour chaque pixel actif :
-
conversion du pipeline RVB en XYZ, puis vers l’espace perceptuel sélectionné, JzAzBz ou darktable UCS JCH,
-
calcul de l’angle de teinte et la saturation normalisés par rapport à la limite du gamut local,
-
Si le filtre guidé est activé (Darktable UCS uniquement), calculé sur CPU ou, le cas échéant, GPU via OpenCL : exécutez le filtre guidé sur un masque scalaire pleine image pour obtenir une valeur lissée, estimez une confiance de bruit par pixel à partir du résidu local et de l’énergie des couleurs des bordures, et mélangez la valeur brute vers celle lissée à l’aide de la zone Protection de la gamme de neutre/Largeur de transition de protection comme poids du mélange ; sinon, utilisez directement la valeur de l’étape 2,
-
Recherche des courbes de saturation et de brillance à cette valeur (éventuellement mélangée) pour obtenir deux facteurs de correction,
-
Si le filtre guidé est activé, amortissement des deux facteurs vers l’unité proportionnellement à la protection contre le bruit multipliée par la confiance du bruit du pixel,
-
Application du facteur de saturation à teinte constante, en tronquant légèrement par rapport à la limite du gamut,
-
Application du facteur de brillance à teinte constante, orthogonale à la saturation,
-
Nouvel ajustement en douceur du résultat par rapport au gamut de destination,
-
Retourne à l’espace RVB du pipeline graphique.
🔗Mises en garde
La modification de l’espace RVB de travail en milieu de session modifiera le comportement des nœuds de courbe existants, puisque 80 % de la limite de gamut sous un profil n’a pas la même saturation absolue que sous un autre. Si vous modifiez le profil de travail, revérifiez les courbes par rapport à la superposition de l’histogramme.
L’aperçu du masque de saturation montre l’entrée du module dans les courbes, brutes ou lissées par filtre guidé, et non la sortie corrigée. Il s’agit d’une aide au diagnostic pour façonner la courbe, et non d’un aperçu du résultat final.
Remarque : l’activation du filtre guidé ajoute un coût de calcul qui évolue avec le rayon du filtre. Des rayons très grands augmenteront sensiblement le temps de traitement sur les images haute résolution.
Le filtre guidé et ses contrôles Protection de la gamme de neutre, Largeur de transition de protection et Protection du bruit ne prennent effet qu’avec la formule de saturation Darktable UCS ; ils sont inertes sous JzAzBz.