Mischt Photoshop Farben falsch?

photoshop-80px
Einleitung
Dieses Thema setzt ein gewisses Grundwissen über die Gammacodierung voraus. Wer will, kann sein Wissen daher in meinem Artikel »Gamma und Gammakorrekturen verstehen« auffrischen.

Gammacodierung vs. lineare Codierung
Es gibt zwei Möglichkeiten, wie Photoshop RGB-Farben mischen kann: unter Berücksichtigung des im Dokument definierten Gammas oder mit einem linearen Gamma (auch Gamma 1,0).

Sehen wir uns zunächst an, wie Photoshop mit den Standardeinstellungen arbeitet, also unter Berücksichtigung des Dokument-Gammas:

Die meisten Anwender kennen wahrscheinlich solche Ergebnisse, wie sie zum Beispiel beim Weichzeichnen oder beim Malen mit weichen Pinselspitzen entstehen:

example-gamma-encoded-mixing


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:

red+green


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.

blurred-colors

Genau genommen kommt es zu diesem falschen Ergebnis, weil der Durchschnitt von zwei Potenzen weniger ist als die Potenz eines Durchschnitts:

equation
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:

math-1

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):

math-2math-3

Mit diesen Werten kann nun der Durchschnitt gebildet werden:

math-4

Schließlich muss dieser Wert potenziert werden, sodass das Endergebnis wieder gammacodiert ist.

math-5

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:

gamma-blending-option


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.

gamma-blending-layers

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.

example-resizing


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.

linear-mode-photoshop


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.

linearized-profile


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.

Warum arbeitet Photoshop nun standardmäßig mit der »Gamma berücksichtigen Variante«?
Darauf können wohl nur die Entwickler eine korrekte Antwort geben. Grundsätzlich ist aber so, dass wenn wir an das Mischen von Farbe denken, meist an Wasserfarbe, Tinte oder ähnliches denken. Und Photoshop ist eben so konfiguriert, dass es dem Mischen von solchen Farben eher entspricht.

Man könnte auch sagen, dass es die aus künstlerischer Sicht korrekte Arbeitsweise ist. Die farbmetrisch bzw. optisch korrekte Arbeitsweise ist jedoch die lineare Variante. Allerdings hat die lineare Variante auch große Nachteile. Einerseits führt die Option »RGB-Farben mit Gamma füllen« leicht zu Fehlern, da sie bereits existierende Dokumente anders darstellt und mit dieser Option erstellte Dokumente in anderen Programmen falsch aussehen (allerdings nur, wenn Ebenen im Spiel sind). Andererseits ist sie laut Chris Cox auch langsamer.

Der 32-Bit-Workaround ist zwar ideal fürs Skalieren, alles Weitere ist aber auch mit Nachteilen verbunden, denn viele Funktionen sind im 32-Bit-Modus nicht verfügbar. Will man jedoch optisch korrekte Glow-Effekte erstellen oder die Unschärfe einer echten Kameralinse mit Photoshop nachstellen, ist der Workaround weiterhin die einzige Möglichkeit. Das möchte ich anhand eines letzten Beispiels noch demonstrieren.

Das Ausgangsbild ist dieses Foto von einem Muster, welches ich von einem Ausdruck abfotografiert habe:

example-original

Das nächste Foto ist vom selben Ausdruck, diesmal aber absichtlich unscharf fotografiert:

example-blurred-with-camera-lens

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.

example-8-bit-blurred

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.

example-32-bit-blurred


Fazit
Für die Praxis ist es hilfreich zu wissen, dass es dieses »Problem« gibt und dass dafür auch Lösungen existieren. Ob man nun darauf Rücksicht nimmt, muss jeder selbst entscheiden. In vielen Fällen ist es ohnehin egal, nach welcher Methode gearbeitet wird.

Mischt Photoshop Farben nun falsch? Einerseits kann man diese Frage mit »Ja« beantworten, da es tatsächlich keine Lösung gibt, die keine Kompromisse verlangt. Andererseits bietet Photoshop dennoch für die allermeisten Zwecke die ein oder andere Möglichkeit, um korrekt zu arbeiten. Die Antwort liegt also irgendwo zwischen Ja und Nein. Schade ist es allerdings, dass Adobe von dieser ganzen Thematik in der Photoshop-Hilfe nichts erwähnt. Man muss schon etwas tiefer graben und so findet sich in der After-Effects-Hilfe folgender Hinweis:

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.


Das ist schon sehr knapp formuliert für dieses komplexe Thema …

blog comments powered by Disqus