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é.
- show saturation mask
- Toggles a grayscale preview of the normalized input saturation used to look up both curves, shown in place of the image. Brighter areas correspond to higher input saturation. With the guided filter disabled, this shows the raw per-pixel saturation. With it enabled, it shows the exact coordinate described under protect near-neutrals that both curves are looked up with – raw near neutral, fully smoothed above the protected zone. noise protection never shifts this coordinate, in the mask or in the actual correction; it only damps the resulting saturation and brilliance factors after the curve lookup, so it has no separate visual signature in this mask. Either way, the mask reflects the module’s input, not any correction the curves apply.
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é
Optional edge-aware smoothing of the saturation value that both curves are looked up with. Only available with the darktable UCS saturation formula; the whole section is disabled when JzAzBz is selected.
- use guided filter
- Enables the smoothing. Disabled by default. Off, each pixel’s curve lookup uses its own raw, normalized saturation. On, that value is blended toward a fast scalar guided filter’s output before being used as the lookup for both curves, so neighboring pixels with similar saturation are pulled toward a common, locally smoothed value. Reduces halos and stair-stepping at boundaries between saturated and neutral regions, especially with aggressive curves and brilliance changes.
- filter radius
- Neighborhood radius, in pixels, used for the guided filter’s local statistics. Larger values give a more strongly smoothed lookup value with broader spatial influence; smaller values keep the smoothing tighter around local structures.
- edge feathering
- Controls how strongly the filter follows edges in the saturation signal. Lower values preserve harder edges and keep the smoothed value aligned to the underlying saturation structure; higher values give softer, less edge-anchored transitions.
- protect near-neutrals
- Center, as a percentage of the normalized saturation range, of a zone near zero saturation that is protected from the guided filter. Pixels at or below the protected side of this zone keep their own raw, unfiltered saturation as the curve lookup value instead of the smoothed one; pixels above it are looked up with the fully smoothed value. Raise this to keep more of the near-neutral range untouched by the smoothing.
- protection transition width
- Width, as a percentage, of the smooth ramp centered on protect near-neutrals over which the lookup value fades from raw to fully smoothed. Wider values give a gentler, more gradual handover instead of a sharp cutoff between the protected and filtered parts of the range.
- noise protection
- Reduces the strength of the saturation and brilliance corrections – not the curve lookup value itself – for pixels where the guided filter’s local residual looks like noise rather than a real color edge, based on a per-pixel confidence estimate computed alongside the filter. Higher values damp the applied factors further toward no change (unity) in those regions. Only has an effect while use guided filter is enabled.
-
Unlike filter radius, edge feathering, protect near-neutrals and protection transition width, this control has no visible footprint in the saturation mask preview: those four all shift the coordinate the curves are looked up at, which the mask shows directly, while noise protection acts after that lookup, on the curves’ output. Judge its effect on the image itself rather than on the mask.
Note: filter radius, edge feathering, protect near-neutrals, protection transition width and noise protection are only active when use guided filter is enabled.
🔗Guide des usages
🔗Flux de travail de base
When first enabled, both curves default to a flat, neutral line and the image is unchanged.
-
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é
The guided filter is only available with the darktable UCS formula. It does not change what the curves do; it mainly changes which saturation value they are evaluated at for each pixel. Start with the default radius and increase it if halos persist across large color transitions; increase edge feathering only if transitions still look too abrupt afterward. Because the smoothing sits upstream of both curves, it affects the saturation and brilliance results together; there is no separate guided-filter control per curve. If near-neutral areas such as skies or skin start looking patchy or mottled once the guided filter is on, raise protect near-neutrals (and soften the handover with protection transition width) to keep them on their own raw saturation instead. If strong curve settings amplify visible noise in otherwise flat, low-detail regions, raise noise protection to damp the correction there; judge this against the corrected image, not the saturation mask, since this control has no coordinate to show there.
🔗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,
-
if the guided filter is enabled (darktable UCS only), computed on CPU or, where available, GPU via OpenCL: run the guided filter over a full-image scalar mask to get a smoothed value, estimate a per-pixel noise confidence from the local residual and color-edge energy, and blend the raw value toward the smoothed one using the protect near-neutrals/protection transition width zone as the blend weight; otherwise use the value from step 2 directly,
-
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.
The guided filter, and its protect near-neutrals, protection transition width and noise protection controls, only take effect with the darktable UCS saturation formula; they are inert under JzAzBz.