Farbbalance RGB

Ein Modul für Fortgeschrittene, das Farbkorrekturwerkzeuge (Color Grading) aus der Kinematografie in die fotografische, in die szenenbezogene Pipeline bringt.

Dieses Modul ist für Anfänger ohne Kenntnisse der Farbtheorie nicht geeignet, die eher bei Chroma Global und Globale Lebendigkeit bleiben sollten bis sie ein gutes Verständnis der Farbdimensionen von darktable haben.

🔗Einführung

Die Farbanpassung ist ein wichtiger Bestandteil der Bildbearbeitung. Sie kann dazu beitragen, unerwünschte Farbstiche zu entfernen oder auch eine kreative Farbänderung bewirken, die den Bildern Atmosphäre verleiht. In den Zeiten der Filmfotografie wurde der größte Teil der Farbwirkung durch die Filmemulsion und die Entwicklungschemikalien erzielt, wobei ein gewisses Farbtuning am Vergrößerungsgerät mit Farbköpfen vorgenommen wurde. Dies benötigte erhebliche Ressourcen und war meist der Filmindustrie vorbehalten, wo diese Aufgabe von einem Koloristen übernommen wurde.

Im digitalen Zeitalter, wo RAW-Bilder flach und eben aussehen, nehmen Farbanpassungen die gleiche Rolle ein, wie ehemals die Filmemulsion durch Einfügen von Farbversätzen für die Ästhetik. Es kann auch helfen die Farbpalette einer Reihe von Bildern zu harmonisieren, die vielleicht unter unterschiedlichen Umständen aufgenommen wurden, um einen einheitlichen Look zu erreichen. Für diese Arbeit ist der Vektor-Scope außerordentlich nützlich.

Koloristen teilen Farbanpassungen in zwei unterschiedliche Schritte:

  1. Die erste Farbanpassung zielt darauf ab, ungewollte Farbstiche zu beheben und einen neutralen Ausgangspunkt zu erzeugen,

  2. die zweite Farbanpassung gibt dem Bild sein endgültiges Aussehen und seine Stimmung.

Die erste Farbanpassung überlässt man am besten dem Modul Farbkalibrierung, das in einem physikalischen Bezugssystem arbeitet und besser geeignet ist für Korrekturen der Lichtquellen. Farbbalance RGB dient andererseits eher einer zweiten Farbanpassung. Eine neutralisierende, erste Farbanpassung sollte eine Übertragung der zweiten Farbanpassung zwischen Bildern mit ähnlichen Anforderungen (mit Stilen, Voreinstellungen oder Kopieren & Einfügen) vereinfachen.

🔗Generelle Prinzipien

Das Modul Farbbalance RGB ist eine Verbesserung gegenüber der American Society of Cinematographers Color Decision List (ASC CDL) und gestattet durch Alpha-Masken den Effekt exakt zwischen Schatten und Lichtern aufzuteilen. Die klassische Farbentscheidungsliste (CDL) wirkt im gesamten Luminanz-Bereich, und jedem der Parameter wird – als Seiteneffekt der Mathematik – in einigen Teilen des Bildes mehr Gewicht beigemessen.

Dieses Modul arbeitet in den meisten Teilen (_4 HSL, Chrominanz, Lebendigkeit, Kontrast) in einem linearen RGB-Farbraum, der speziell für Farbkorrekturen geschaffen wurde. Dieser Farbraum zeigt eine gleichförmige Verteilung von wahrgenommenen Farbtönen unter Beibehaltung einer physikalisch-skalierten Luminanz1. Der wahrnehmbare Teil des Moduls (Sättigung und Brillianz) arbeitet im JzAzBz2-Farbraum. Dieser sieht ein wahrnehmbares Skalieren sowohl für die Helligkeit als auch Chromatizität vor, was für HDR-Bilder geeignet ist. Beide Farbräume stellen sicher, dass Sättigungs- und Chrominanzänderungen auf einen gleichbleibenden Farbton wirken, was für die meisten anderen Sättigungswerkzeuge von darktable nicht gilt (insbesondere im veralteten Modul Farbbalance.

Das Modul Farbbalance RGB erwartet eine szenenbezogene, lineare Eingabe und erzeugt eine szenenbezogene RGB-Ausgabe, die abhängig von Moduleinstellungen auch nicht-linear sein kann (Kontrast und Stärke wird die Ausgabe delinearisieren).

Farbbalance RGB prüft bei seiner Ausgabe, ob die abgestuften Farben in den RGB-Farbraum der Pipeline passen (standardmäßig Rec 2020) und wendet eine leichte Sättigungsbeschneidung (Clipping) bei konstanten Farbtönen an. Dies erfolgt mit dem Ziel, Farbwerte außerhalb des Gamuts auf die nächsten Werte innerhalb des Gamuts abzubilden indem Chrominanz und Helligkeit skaliert werden. Das verhindert, dass durch Chrominanz- und Sättigungseinstellungen Farben aus dem gültigen Bereich ausbrechen und erlaubt damit, drastischere Anpassungen sicher auszuführen.

Hinweis: Dieses Modul hält sich an die CIE-Definitionen von Chrominanz und Sättigung, die in Abschnitt Farbdimensionen von darktable erklärt werden.

🔗Moduleinstellungen

🔗Register “Allgemein”

Farbverschiebung
Rotiert alle Farben des Bildes um einen Winkel in der Chromazitätsebene bei konstanter Luminanz und konstantem Chroma. Diese Einstellung kann genutzt werden, um Fehlfarben auf einem Subjekt zu entfernen oder schnell die Farben eines Objektes zu ändern. Diese Änderung wird am besten lokal mit Masken angewendet.
Globale Lebendigkeit
Wirkt auf die Chrominanz-Dimension der Farben im gesamten Bild, bevorzugt auf Farben mit geringer Chrominanz. Die Chrominanz von neutralen Farben wird damit verstärkt, ohne dies für bereits farbige Pixel zu übertreiben.
Kontrast
Diese Einstellung wirkt auf den Luminanz-Kanal, wobei Farbton und Chrominanz gleich bleiben. Die Einstellung des Stützpunkts (im Tab Maskierung unter Kontrast-Graustützpunkt) erlaubt den neutralen Punkt der Kontrastkurve zu setzen:
  • am Stützpunkt verändert die Kontrastkurve die Luminanz nicht,
  • unterhalb des Stützpunkts senkt die Kontrastkurve die Luminanz für positive Kontrastwerte oder erhöht diese für negative Werte,
  • oberhalb des Stützpunkts erhöht die Kontrastkurve die Luminanz für positive Kontrastwerte oder senkt diese für negative Werte.

Der Stützpunkt hat einen Standardwert von 18.45 % und passt so zur aktuellen, szenenbezogenen Bearbeitung und für die meisten Anwendungsfälle (die globale Helligkeit sollte, wie empfohlen, mit dem Modul Belichtung eingestellt sein).

Der Kontrast-Algorithmus ergibt natürliche Resultate, die den zentralen Teil der Kontrastkurve von analogem Film nachempfinden. Jedoch wird er auch den Dynamikbereich des Bildes erhöhen, was Einstellungen in Filmic RGB in der Pipeline nichtig macht. Für globale Kontrasteinstellungen sollte normalerweise das Modul Tonwert-Equalizer genutzt werden. D.h. der Kontrast-Regler in Farbbalance RGB sollte nur mit Masken eingesetzt werden, z.B. für selektive Korrekturen des Vorder- oder Hintergrunds.

🔗Lineares Chroma Grading

Lineares Chroma-Grading beeinflusst die Chroma-Dimension proportional zu ihrem Eingabewert bei konstantem Farbton und konstanter Luminanz. Sie wirkt global mit einem kleinen Koeffizienten (verwendet Chroma Global), wie auch auf die Masken Schatten, Mittelgrau und Lichter (definiert im Register Maskierung unter Verlauf der Luminanzmasken).

🔗Perzeptive Farbsättigung

Perzeptive Farbsättigung beeinflusst die Luminanz-, wie auch die Chrominanz-Dimensionen, bei konstantem Farbton in einem Wahrnehmungsraum proportional zum Eingabewert. Dies erfolgt global mit einem kleinen Koeffizienten (bestimmt durch Sättigung Global) und in jeder Schatten-, Mitteltöne- und Lichter-Maske (definiert im Register Maskierung unter Verlauf der Luminanzmasken).

🔗Perzeptive Farbbrillianz

Perzeptive Farbbrillianz beeinflusst die Luminanz-, wie auch die Chromazitätsdimension, bei konstantem Farbton in einem Wahrnehmungsraum proportional zum Eingabewert und in orthogonaler Richtung zur Sättigung. Der Effekt ist ähnlich zur Änderung der Belichtung, aber wahrnehmend skaliert. Dies geschieht global mit einem kleinen Koeffizienten (mit Brillianz Global), wie auch in jeder Schatten-, Mitteltöne- und Lichter-Maske (definiert im Register Maskierung unter Verlauf der Luminanzmasken).

🔗Register “4 HSL”

Jede Einstellung im Register 4 HSL wird aus den gleichen drei Komponenten zusammengesetzt, die eine Farbe mit unabhängigen Koordinaten definieren:

  1. Luminanz,

  2. Farbton,

  3. Chrominanz.

Diese Farbangaben definieren eine Farbschiebung, die sich auf das gesamte Bild oder über einen spezifizierten Luminanzbereich auswirkt.

Each hue slider has a color picker, which may be used to compute the opponent color of the selected region. This is useful to revert unwanted color casts (e.g. skin redness), since shifting the color to its opponent cast neutralizes it.

🔗Globale Anpassung

Dies entspricht dem ASC CDL Offset, und es erfolgt die Addition eines konstanten RGB-Werts zu jedem Pixel, ähnlich der Schwarzwert-Anpassung im Modul Belichtung. Diese Anpassung nutzt nicht die Maskierung.

🔗Schatten - Lift

Konzeptuell gleich es dem Lift von Lift/Gamma/Gain, doch anders implementiert: Es erfolgt die Multiplikation jedes maskierten Pixels mit einem konstanten RGB-Wert. Die Anpassung erfolgt mit der Schatten-Maske.

🔗Lichter - Gain

Dies ist äquivalent mit ASC CDL Slope, und es erfolgt die Multiplikation jedes maskierten Pixels mit einem konstanten RGB-Wert. Die Anpassung wird auf die Lichter-Maske angewendet.

🔗Mitten - Power

Dies ist äquivalent mit ASC CDL Power, und es wird ein konstanter RGB-Exponenten gewendet. Die Anpassung ist nicht maskiert und muss normalisiert werden: Die Exponentialfunktion hat ein unterschiedliches Verhalten über und unter 1, und in einer unbegrenzten Pipeline ist der Weißwert oftmals größer als 1. Der Normalisierungsparameter ist im Register Maskierung unter Weiß-Stützpunkt zu finden.

🔗Register “Maskierung”

Dieses Register definiert Hilfsanpassungen für die vorherigen Register. Maskeneinstellungen müssen normalerweise nicht angepasst werden, da diese für die typischen Anwendungen voreingestellt sind und die üblichen Vorstellungen der szenenbezogene Pixel-Pipeline erfüllen. Anpassungen an Einstellungen sollten daher nur in ganz speziellen Szenarien notwendig werden.

🔗Verlauf der Luminanzmasken

Die Kurven zeigen die Deckkraft (auf der y-Achse) der 3 Luminanzmasken relativ zur Pixel-Luminanz (auf der x-Achse). Die dunkelste Kurve repräsentiert die _Schatten_maske, die hellste die _Lichter_maske und die dritte Maske die _Mitten_maske.

Nur die Schatten- und _Lichter_masken können direkt kontrolliert werden: Die _Mitten_maske errechnet sich indirekt aus den anderen und dient als ein Einstellungsparameter.

Schattenverlauf
Kontrolliert die Weichheit oder Härte des Übergangs der Schattenmaske von vollständig undurchsichtig (100%) zu vollständig transparent (0%).
Mittelgraureferenz für Maskierung
Setzt den Luminanzwert, an dem alle drei Masken eine Deckkraft von 50 % haben. In der Praxis wird damit definiert, wie sich das Bild in Schatten und Lichter teilt.
Lichterverlauf
Kontrolliert die Weichheit oder Härte des Überganges für die Lichtermaske von vollständig undurchsichtig (100%) bis vollständig transparent (0%).

Für jede dieser Einstellungen ist ein Maskenschalter rechts vom Regler vorhanden, der die entsprechende Maske (Schatten, Mitten, Lichter) als Schachbrett überlagert anzeigt. Der noch sichtbare, also nicht maskierte Bereich des Bildes ist der Bereich, den Schatten-, Mitten- und Lichterregler in den anderen Registern beeinflussen.

Jede Maskenvorschau zeigt die Ausgabe des Moduls inklusive durchgeführter Farbänderungen. Diese können auch während der Bearbeitung eingeschaltet werden, um nur den beeinflussten Teil des Bildes zu sehen.

Luminanzmasken werden bei der Eingabe ins Modul berechnet, sodass diese unempfindlich für etwaige Luminanzänderungen innerhalb des Moduls sind.

🔗Schwellenwerte

Weiß-Stützpunkt
Setzt die Helligkeit des Weißpunkts in EV zur Normalisierung der Einstellung Stärke im Register 4 HSL. Anzeigebezogene Implemenationen von Stärkefunktionen nehmen Weiß bei 100% an, womit eine Normalisierung unnötig wird. Im szenenbezogene Ansatz muss das beachtet werden.

The color picker to the right of the slider automatically sets the white fulcrum to the maximum luminance from the selected region, which should be sufficient in most cases.

Kontrast-Graustützpunkt
Setzt den Stützpunkt für die Kontrast-Einstellung im Register Allgemein. Bestimmt den Helligkeitswert, der durch die Kontrastanpassung unverändert bleibt. Diese Einstellung stimmt normalerweise mit dem linearen, mittleren Grauwert überein. Wenn in der szenenbezogenen Bearbeitung, wie empfohlen, die globale Helligkeit in der Pipeline bereits im Modul Belichtung eingestellt wird, sollte der korrekte Wert etwa bei 18-20% liegen.

The color picker to the right of the slider automatically sets the contrast gray fulcrum to the average luminance from the selected region. This relies on the assumption that the average luminance is usually close to middle-gray, which is not true if you have specular highlights or primary light sources in the frame, or for low/high-key images.

🔗Sättigungsformel

Erwähnt sei, dass diese Einstellung nicht für das Register Maskierung geeignet ist (da sie technisch nicht zu den Masken gehört), doch sie ist hier erwähnt, so dass sie nicht laufend genutzt wird und auch, um etwas Anzeigefläche zu sparen. Es gibt zwei Optionen:

JzAzBz (2021)
Dieser Modus ist der ursprüngliche Sättigungsalgorithmus. Er nutzt den JzAzBz Uniform Color Space (UCS), um die Sättigung zu berechnen. Dieser Farbraum ist nicht für Farbveränderungen gedacht und seine Helligkeit beachtet nicht den Helmholtz-Kohlrausch-Effect. Dieser besagt, dass kräftige farbige Bilder heller aussehen als neutrale nahezu neutrale Farben (Grau- und Pastelltöne), die die gleiche Luminanz haben. Er zeigt auch unregelmäßiges Verhalten nahe Schwarz, wo Farben zu stark abgedunkelt werden.
darktable UCS (2022)
Der darktable Uniform Color Space (UCS) wurde auf Basis von wahrnehmungspsychologischer Messreihen von Grund auf neu konzipiert, nur zum Zweck der Farbmanipulation (Sättigung) mit diesem Modul. Dieser Farbraum behandelt den Helmholtz-Kohlrausch-Effekt und er hat eine genauere und effizientere Gamut-Abbildungsformel integriert, als diese bei JzAzBz möglich ist. Sie zeigt eine Glättung, die mehr Sättigungsänderungen über den gesamten Helligkeitsraum gestattet.

🔗Maskenvorschaueinstellungen

Diese Einstellungen sind für die Maskenvorschauen, die beim Anklicken der Maskenschalter im Verlauf der Luminanzmasken angezeigt werden. Sie werden global gespeichert und für alle nachfolgenden Bilder angewendet, solange sie nicht geändert werden.

Schachbrettfarben 1 und 2
Setzt die zwei Farben für die Schachbrettmaske im Hintergrund. Um die Wahrnehmbarkeit zu erhöhen, können die Komplementärfarben des aktuellen Bildes gewählt werden.
Schachbrettmustergröße
Setzt die Breite der Felder des Schachbretts in Pixeln (angepasst auf die DPI-Einstellung des Bildschirms).

🔗Häufig gestellte Fragen

🔗Sättigung oder Chrominanz?

Wie im Abschnitt Farbdimensionen von darktable beschrieben, breiten sich Sättigung und Chrominanz in der Helligkeits-Chrominanz-Ebene in verschiedene Richtungen aus. Zusätzlich nutzt die Chrominanz von Farbbalance RGB einen szenenbezogenen, linearen Raum, während die Sättigung einen Wahrnehmungsraum nutzt, der Farben auf gleichmäßige Abstände skaliert.

In der Praxis sollte die Chrominanzeinstellung genutzt werden, wenn die szenenbasierte Linearität der Lichtemission beibehalten bzw. die Luminanz erhalten bleiben soll. Doch diese Änderungen könnten einige Farbtöne stärker beeinflussen als andere, da der Farbraum nicht vollständig wahrnehmungsneutral skaliert ist.

Die Sättigung wirkt eher wir das Mischen von weisser Farbe zu einer Grundfarbe. Durch Reduzierung der Sättigung wird Rot zu Pink, während Reduzierung der Chrominanz zu einem grauen Farbton mit gleicher Luminanz führt. Sättigung ist vielleicht aufgrund seiner Verbindung zum Malen eine intuitivere Art, mit Farben zu interagieren.

Die Wahl zwischen beiden hängt davon ab, wo im Helligkeit-Chrominanz-Graph die Farben verstärkt werden und wo diese beginnen sollen: Um Pastellfarben zu erzeugen, ist Sättigung die beste Wahl, und für Laser-ähnliche, nahezu monochromatische Farben, die stark synthetisch wirken, ist es Chrominanz.

🔗Welcher Zusammenhang besteht zwischen Lift, Gamma und Gain?

Der Lift/Gamma/Gain-Algorithmus beruht auf einem anzeigebezogenen Farbraum, da er einen beschränkten und symmetrischen Dynamikumfang mit dem Weißpunkt bei 100% und Grau bei 50% annimmt. Als solcher ist er für einen szenenbezogenen Raum unbrauchbar. Allerdings ist der einzig inkompatible Teil das Lift. Gamma entspricht der Stärke aus der ASC CDL und Gain der Neigung.

Das Modul Farbbalance RGB hat einfach zwei Kurven statt einer: Gain angewandt mit einer Maske für die Lichter, die aus dem gesamten Bild extrahiert wurden, und Lift mit einer ähnlichen Maske für die Schatten.

🔗Kontraständerung

Während Farbbalance RGB hauptsächlich Farbe behandelt (andere Module erzeugen globalen Kontrast unter Erhaltung der Chromazität), ist Luminanz ist ein fester Bestandteil von Farbe, wie vom Farbton oder Chrominanz, und muss hier ebenfalls behandelt werden, da die Wahrnehmung der Sättigung darauf beruht. Falls zum Beispiel Rot in Pink umgewandelt werden soll, wird eine Reduzierung von Chrominanz zu Grau führen und daher musst auch die Luminanz erhöht werden.

Es gibt mehrere Wege mit Farbbalance RGB den Kontrast zu ändern, entweder lokal (mit Masken) oder global (ohne):

  • im Register Allgemein die Einstellung Kontrast nutzen, ggf. zusammen mit dem Kontrast-Graustützpunkt im Register Maskierung. Dies erhöht jedoch den Weißpunkt und erweitert deshalb den Dynamikbereich des Bildes, was eventuell Einstellungen von Filmic RGB später in der Pipeline ungültig macht.

  • mit perzeptive Farbsättigung die Lichter entsättigen und die Schatten für einen Luminanzkontrastschub sättigen,

  • mit perzeptive Farbbrillianz Brillianz in den Lichtern hinzufügen und Brillianz in den Schatten für Luminazkontrastschub entfernen,

  • im Register 4 HSL die Schatten - Lift-Luminanz auf negative Werte und die Lichter - Gain-Luminanz auf positive Werte einstellen, was auch einen Luminanzkontrastschub erzeugt.

Der Unterschied zwischen diesen Methoden liegt in der Gewichtung der Wirkung relativ zur Eingabe des Moduls. Am besten werden die Hauptanpassungen des Helligkeitskontrasts in den Modulen Filmic RGB und Tonwert-Equalizer durchgeführt und dann die letzten Anpassungen in Farbalance RGB bei der Überprüfung der Farben.

🔗Interne Verarbeitung

Die interne Verarbeitungsreihenfolge im Modul ist folgende:

  1. Transformation vom Pipeline-RGB-Raum in den Kirk/Filmlight-Ych-Raum,

  2. Anwendung der Farbverschiebung bei konstanter Chrominanz und konstanter Luminanz,

  3. Berechnung der Luminanzmasken mit Y,

  4. Anwendung der Einstellungen von linearem Chroma Grading und Globale Lebendigkeit bei konstantem Farbton und konstanter Luminanz,

  5. Transformation in den Kirk/Filmlight-RGB-Raum,

  6. Anwendung der 4 HSL-Einstellungen (ohne Power Luminanz),

  7. Transformation in den Kirk/Filmlight-Yrg-Raum,

  8. Anwendung von Power Luminanz und Kontrast auf Y,

  9. Transformation in denJzAzBz-Raum,

  10. Anwendung der Einstellungen von perzeptive Farbsättigung und perzeptive Farbbrillianz,

  11. leichter Beschnitt der Chrominanz mit dem Pipeline-RGB-Gamut bei konstantem Farbton und konstanter Helligkeit,

  12. Transformation zurück in den Pipline-RGB-Raum.

🔗Warnung

Das Setzen der globalen Chrominanz auf -100% wird nicht kein richtiges monochromes Bild erzeugen, wie es bei anderen Algorithmen üblich ist. Der Grund dafür ist, dass der RGB-Raum einen D65-Weißpunkt nutzt, wie er im CIE-Farbraum LMS 2006 definiert ist. Jedoch nutzt darktable einen Weißpunkt, der im CIE-Farbraum XYZ 1931 definiert ist, und es gibt keine exakte Konvertierung zwischen diesen Räumen. Das Resultat wird daher ein leicht eingefärbtes Schwarz-Weiß-Bild sein. Falls ein wirkliches Schwarz-Weiß-Bild mit dem Luminanzkanal erzeugt werden soll, bietet das Modul Farbkalibrierung eine Voreinstellung S/W: Luminanz-basiert, die dies einfach ohne die Weißpunkt-Diskrepanz erledigt.

Dieses Modul hat seine Gamut-Abbildung (hinsichtlich Pipeline-RGB) ständig eingeschaltet. Das bedeutet, falls ein Originalbild schon zu Beginn einige Farben außerhalb des Gamuts beinhaltet, wird ein einfaches Einschalten von Farbbalance RGB ohne weitere Einstellung die Farben leicht ändern. Das ist vermutlich das Beste.

Die maximal erlaubte Sättigung im gewählten Pipeline-RGB-Raum wird bei der Modulinitialisierung für jeden Farbton bestimmt und zur Leistungssteigerung in einer Tabelle (LUT, “look-up table") zwischengespeichert. Wird das Farbprofil später geändert, wird Farbbalance RGB nicht benachrichtigt, d.h. die gespeicherte Farbton-Sättigungs-LUT wird nicht aktualisiert. Ein LUT-Update erfolgt, wenn eine Einstellung im Modul Farbbalance RGB vorgenommen (und ggf. rückgängig gemacht) wird. Nicht empfohlen wird, den RGB-Farbraum irgendwo innerhalb einer Entwicklungssitzung zu ändern, da dies unerwartete Chrominanz- und Farbtonänderungen erzeugen kann.

Zur Leistungsverbesserung werden die nicht-linearen Umwandlungen vom und zum aktuellen RGB-Farbraum umgangen. D.h., die interne Farbmetrik Bei Nutzung von nicht-linearen Räumen falsch sein. Es gibt keinen Grund, nicht-lineare RGB-Räume zu nutzen, da diese – ohne einen Vorteil – Alpha-Blending schwieriger machen.


  1. Richard A. Kirk, Chromaticity coordinates for graphic arts based on CIE 2006 LMS with even spacing of Munsell colours, 2019. https://doi.org/10.2352/issn.2169-2629.2019.27.38 ↩︎

  2. Safdar et al., Perceptually uniform color space for image signals including high dynamic range and wide gamut, 2017. https://doi.org/10.1364/OE.25.015131 ↩︎

translations