Ich spreche von den dunklen Stellen, die beim Mischen von zwei Farben entstehen. Diese sehen im ersten Augenblick nicht unbedingt so aus, wie wir sie erwarten würden. Doch warum ist das so?
Die allermeisten Bilder bzw. Photoshop-Dokumente liegen in einem gamma-codierten, also einem nicht-linearen Farbraum vor. Grundsätzlich kann man aber sagen, dass das Mischen von RGB-Farben immer in einem linearen Farbraum geschehen sollte.
Nun gibt es natürlich gute Gründe, warum Bilder in einem gamma-codierten Farbraum vorliegen (siehe dazu Gamma und Gammakorrekturen verstehen). Letztlich führt aber diese Gammacodierung dazu, dass die Mischbereiche zu dunkel werden. Schauen wir uns anhand eines Beispiels an, wie es dazu kommt.
Ein typischer Fall, wo Farben gemischt werden bzw. der Durchschnitt zweier Farben gebildet wird, ist das Weichzeichnen. Will man Grün und Rot mischen, erwartet man ein Ergebnis, welches halb grün und halb rot ist. Mathematisch:
Photoshop (und die meisten anderen Programme) vergessen dabei aber, dass es sich bei den Farbwerten nicht um lineare Werte, sondern aufgrund der Gammacodierung um potenzierte Werte handelt. Wird nun mit den potenzierten Werten der Durchschnitt gebildet, erhält man mathematisch gesehen ein zu kleines Ergebnis und der Mischbereich wird dadurch zu dunkel, was wiederum diese dunkle Linie beim Weichzeichnen hervorruft.
Genau genommen kommt es zu diesem falschen Ergebnis, weil der Durchschnitt von zwei Potenzen weniger ist als die Potenz eines Durchschnitts:
Gilt für 0 < Gamma < 1
Um korrekt zu mischen, müsste Photoshop die Werte also erst radizieren, dann den Durchschnitt bilden und dieses Ergebnis wieder potenzieren. Wie das aussieht, verdeutlicht das folgende Beispiel:
Ein Dokument im AdobeRGB-Farbraum enthält die Farbwerte 102 und 204. Von diesen Farbwerten soll der Durchschnitt gebildet werden. Dazu müssen die Farbwerte zunächst auf einen Wertebereich von 0 bis 1 skaliert werden. So ergeben sich die Werte 0,4 und 0,8. AdobeRGB hat aber ein Gamma von 2,2, das heißt, dass die beiden Werte 0,4 und 0,8 gammacodiert vorliegen. Den beiden Werten liegen also lineare Ursprungswerte zugrunde. Und mit diesen linearen Werten sollte der Durchschnitt korrekterweise gebildet werden. Photoshop mischt aber zunächst die gammacodierten Werte und damit ergibt sich folgendes Ergebnis:
Das ist nicht ganz richtig, da es diese dunklen Mischbereiche erzeugt. Die gammacodierten Werte müssen also zuvor radiziert werden (Das Radizieren ist die Umkehroperation des Potenzierens):
Mit diesen Werten kann nun der Durchschnitt gebildet werden:
Schließlich muss dieser Wert potenziert werden, sodass das Endergebnis wieder gammacodiert ist.
Wie man sieht, ist dieses Ergebnis etwas größer und die Farbe erscheint in Photoshop daher heller.Technischer Hinweis: Warum wird hier immer mit 0,4545 potenziert/radiziert? Das liegt daran, dass wir das Gamma im allgemeinen Sprachgebrauch verkehrt verwenden. Wenn man von einem Bild mit einem Gamma von 2,2 spricht, meint man damit eigentlich, dass es so korrigiert wurde, dass es auf einem Monitor mit einem Gamma von 2,2 korrekt aussieht. Das eigentliche Gamma des Bildes ist daher der umgekehrte Exponent, also 1/2,2 = 0,4545.
Photoshop rechnet aber nicht zwangsweise »falsch«. Mit der Funktion »RGB-Farben mit Gamma füllen« aus den Farbvoreinstellungen kann Photoshop auch, nach dem eben gezeigten Prinzip, und somit richtig, rechnen:
Wird diese Option aktiviert, wird das Mischen von Farben entsprechend des eingestellten Gammawertes berechnet. Somit handelt es sich hier um die eingangs erwähnte, zweite Variante: der linearen Codierung.
Steht das Gamma nun wie im Screenshot auf 1,00, handelt es sich um ein lineares Gamma. Diese Einstellung wirkt sich allerdings nur dann aus, wenn Pixel von verschiedenen Ebenen miteinander verrechnet werden oder wenn mit transparenten Pixel – wie bei weichen Pinselspitzen – gearbeitet wird. Arbeitet man jedoch auf nur einer Ebene ändert diese Einstellung leider nichts am Verhalten von Photoshop.
Im folgenden Beispiel sieht man, wie ein Verlauf auf nur einer Ebene erzeugt wird und das Ergebnis wie beim »gamma-codierten Mischen«, also falsch, aussieht. Gleich darunter ist derselbe Verlauf mit zwei Ebenen aufgebaut, und somit ändert sich hier das Aussehen der Mischbereiche und es entsteht eine korrekte Darstellung.
Im Falle eines solchen Verlaufes (auf zwei Ebenen) hat man mit der oben genannten Option aus den Farbvoreinstellungen also auch die Möglichkeit, mit linearem Gamma zu arbeiten. Es gibt jedoch Fälle, wo das nicht funktioniert, weil eben nur eine Ebene zur Verfügung steht und es nicht die Möglichkeit gibt, das Dokument mit zwei oder mehreren Ebenen aufzubauen.
Sehen wir uns daher ein weiteres Beispiel an. Farben werden nämlich auch bei Arbeitsschritten gemischt, wo wir es weniger vermuten würden. Beispielsweise beim Ändern der Pixelmaße eines Bildes, also beim Skalieren bzw. Transformieren. Skalieren wir ein Bild auf 50 % der Ausgangsgröße müssen 4 Pixel auf nur ein Pixel verkleinert werden, dazu wird der Durchschnitt errechnet.
Dieser Versuch zeigt, dass in einem gamma-codierten Farbraum beim Skalieren Fehler entstehen. Deutlich wird dies vor allem, wenn man das Bild 2 bis 3 Meter vom Monitor entfernt betrachtet. Die gamma-codierte Variante erscheint zu dunkel. Ein weiteres Beispiel eines solchen Fehlers findet man hier.
Wie man aber auch sehen kann, passiert der Fehler nicht im linearen Farbraum. Mit linearen Farbraum ist hier aber nicht, wie oben, das Verwenden der Funktion »RGB-Farben mit Gamma füllen« gemeint, sondern das Verwenden eines tatsächlich linear codierten Farbraums. Somit handelt es sich hier wieder um die Variante, wo Photoshop das Gamma des Dokuments berücksichtigt. Allerdings mit dem Unterschied, dass bei dieser Methode das Dokument selbst kein Gamma aufweist.
Die Möglichkeit, einen linearen Farbraum zu verwenden, besteht in Photoshop prinzipiell mit der Wahl der 32-Bit-Farbtiefe. Bilder im 32-Bit-Modus werden nämlich automatisch in das entsprechende linearisierte Profil konvertiert. Dieses Farbprofil besitzt noch immer dieselben Primärvalenzen und denselben Weißpunkt wie das Original, die Wiedergabekurve ist jedoch linear.
Es ist übrigens nicht möglich, mit 8-Bit-Bildern in einem linearen Farbraum zu arbeiten. Diese Daten bieten einfach nicht die notwendige Präzision, und das wiederum würde starkes Banding hervorrufen.
Das nächste Foto ist vom selben Ausdruck, diesmal aber absichtlich unscharf fotografiert:
Im nächsten Schritt habe ich das scharfe Originalbild auch mit Photoshop weichgezeichnet und die Ergebnisse hier gegenübergestellt. Wie man hier sieht, ist das Ergebnis (links) zu dunkel und entspricht damit unseren bisherigen Erkenntnissen bezüglich gamma-codierten Farbräumen. Allerdings entspricht es somit leider nicht dem Ergebnis einer echten Kameralinse.
Zuletzt habe ich den Weichzeichner nochmals im linearisierten AdobeRGB-Farbraum angewandt, sprich im 32-Bit-Modus. Und hier kann man ganz deutlich sehen, dass das Ergebnis viel besser zum Original passt und somit optisch korrekt ist.
Many color operations benefit from working in a linear color space, including those operations involved in image resampling, blending between layers with blending modes, motion blur, and anti-aliasing.