Verrechnungsmodi in Photoshop – Teil 3

Weiches Licht (Soft Light)

Soft Light ist die Verrechnungsmethode, über die man am häufigsten Fehlerhaftes liest. Was auch daran liegt, dass verschiedene Hersteller die Methode unterschiedlich definieren und so zur Verwirrung beitragen. Ich habe leider noch keine Begründungen für die Wahl der jeweiligen Berechnungen gefunden.

Photoshop

Mein Photoshop CC verwendet die folgende Formel (wie beschrieben in der PDF Referenzdokumentation):

f(a,b) = \left\{ \begin{array}{lr}(1-a)ab + a(1-(1-a)(1-b)) & \text{f\"ur } b < {1/2}\\a+(2b-1)(\sqrt{a}-a) & \text{f\"ur } b \geq {1/2} \land a > {1/4}\\a+(2b-1)(((16a-12)a+4)a-a) & \text{f\"ur } b \geq {1/2} \land a \leq {1/4}\end{array} \right.

Ich konnte das prüfen, indem ich mittels eines kleinen Postscript-Programms (vielen Dank für die Unterstützung an meinen Vater, Dieter Zawischa) ein Quadrat mit dem Ergebnis der Verrechnung zweier linearer Verläufe von Schwarz zu Weiß füllte und das dann verglich mit dem, was Postscript bei der gleichen Verrechnung produziert (Details dazu siehe hier).

Die beiden Ausgangsbilder:

Verlauf A

Bild A – Verlauf horizontal

Verlauf B

Bild B – Verlauf vertikal

Das Ergebnis der Soft-Light Verrechnung aus dem Postscript-Programm

Soft Light  berechnet

Soft Light berechnet

und das aus Photoshop

Photoshop Soft Light

Photoshop Soft Light

Man kann durch Differenzbildung leicht prüfen, dass die beiden Bilder (bis auf kleine Ungenauigkeiten durch begrenzte Auflösung) identisch sind.

Interessant ist eine Betrachtung des Helligkeitsverlaufs für verschiedene feste b-Werte:

Gamma-Kurven-PDFWie man sieht, ergibt sich für b=0,5 die Diagonale, also eine lineare Übersetzung von a in Helligkeit. Wählt man für das B-Bild eine einheitliche 50% graue Fläche, bleibt das A-Bild unverändert. Das kann man als Ziel für alle betrachteten Formeln annehmen, 50% Grau als B soll neutral sein.

Für b=0 ergibt sich die vereinfachte Formel:

f(a,b) = a(1-(1-a)) = {a}^{2}.

Das ist genau die Formel für eine ?-Korrektur (Gamma-Korrektur) mit ?=2. Die Kurve für b=1 sieht der Quadratwurzelfunktion (das wäre ?=0,5) ähnlich, stimmt aber wegen der Korrektur für kleine a nicht damit überein.

Was mich interessiert ist, wie der Verlauf der Abweichung von der Diagonalen

f(a,b) = a

für verschiedene b ausieht. Also zeichne ich die Kurven für

f(a,b) = \left\{ \begin{array}{lr}(1-a)ab - a(1-a)(1-b) & \text{f\"ur } b < {1/2}\\(2b-1)(\sqrt{a}-a) & \text{f\"ur } b \geq {1/2} \land a > {1/4}\\(2b-1)(((16a-12)a+4)a-a) & \text{f\"ur } b \geq {1/2} \land a \leq {1/4}\end{array} \right.

Delta-Kurven-PDFDie Asymmmetrie für b > 0,5 ist augenfällig.

Varianten der Photoshop-Formel

Verwendet man die folgende Formel, die man auch gelegentlich als angebliche Photoshop-Formel findet, ergibt sich ein etwas anderes Bild. Hier erhält man für b=1 eine ?=0,5 Korrektur.

f(a,b) = \left\{ \begin{array}{lr}(1-a)ab + a(1-(1-a)(1-b)) & \text{f\"ur } b < {1/2}\\a+(2b-1)(\sqrt{a}-a) & \text{f\"ur } b \geq {1/2}\end{array} \right.

Ohne "Korrektur" für kleine a

Ohne „Korrektur“ für kleine a

Bei genauer Betrachtung sieht man, dass die obere linke Ecke etwas heller ist.

Die Kurven dazu sehen so aus:

Gamma-Kurven-PDF-2Auch das ist nicht symmetrisch an der Diagonalen. Gleiche b-Abweichungen von 0,5 erzeugen abhängig von ihrer Richtung unterschiedlich starke Effekte. Das sieht man wieder deutlich nach Subtraktion von a.

Delta-Kurven-PDF-2

Bei dieser Art der Darstellung sieht man deutlich, wie stark die Veränderung bei b>0 für kleine a ausfällt. Das könnte der Grund dafür sein, dass Adobe mit der speziellen Regelung für kleine a ausgleicht.

Man könnte jedoch auch nur den ersten Teil der Formel verwenden, also dies:

f(a,b) = (1-a)ab + a(1-(1-a)(1-b))

Nur der erste Teil

Nur der erste Teil

Auch ein schönes, sehr weiches Ergebnis, linear in b. Die Linearität in b sieht man auch in den Kurven:

Gamma-Kurven-PDF-1Das ist zwar nicht mehr symmetrisch an der Diagonalen, aber dafür ist der Abstand zwischen den Kurven für festes a immer gleich.

Delta-Kurven-PDF-1Die Symmetrie ist gegeben, sieht erst mal sehr plausibel aus. Man erreicht für b=1 allerdings nicht annähernd ?=0,5.

Illusions parametrische Gamma-Korrektur

Einen völlig anderen Vorschlag für Soft Light findet man bei illusions.hu. Ausgehend von der Idee der durch b steuerbaren ?-Korrektur wird verwendet:

f(a,b) = a^{2^{(1-2b)}}

Das Verrechnungsergebnis ist ansprechend:

Illusions.hu Gamma-Korrektur

Illusions.hu Gamma-Korrektur

Die Kurven sehen auf den ersten Blick fast genau so aus wie die der Original-Adobe-Formel.

Delta-Kurven-IllusionsBei genauerem Hinsehen sind die Übergänge natürlich viel gleichmäßiger.

Spiegeleien

Ich hätte auch noch einen Vorschlag, entstanden aus der Frage, ob der zweite Teil der Photoshop-Formel vielleicht durch Spiegelung des ersten Teils an der Diagonale hervorgegangen ist. Ist er nicht. Man erreicht diese Spiegelung durch Auflösen des ersten Teils nach a und Ersetzen von b durch (1-b‘). Letzteres, weil die Kurve für b > 0,5 immer der Spiegel einer mit b’=1-b sein soll.

f(a,b) = \left\{ \begin{array}{lr}(1-a)ab + a(1-(1-a)(1-b)) & \text{f\"ur } b < {1/2}\\ \frac{1-b}{1-2b}+\sqrt{\frac{(1-b)^2}{(2b-1)^2}+\frac{a}{2b-1}}& \text{f\"ur } b \geq {1/2}\end{array} \right.

Die Abweichungen von der Diagonalen in diesem Fall:

Delta-Kurven-HZIch finde das Ergebnis auch nicht schlecht. Etwas heller im linken unteren Bereich als Illusions, weniger drastisch oben links als die Photoshop-Formel ohne den dritten Teil.

"Mein" Soft Light

„Mein“ Soft Light

Zugegeben, das Ganze ist recht akademisch, da man Photoshop leider nicht so leicht neue Verrechnungsmodi beibringen kann, was ich äußerst bedauerlich finde.

Frequenztrennung

Kürzlich habe ich mich mit der Methode der Frequenztrennung zur Retusche beschäftigt. Bei den Fstoppers habe ich einen einen interessanten Artikel dazu gefunden, der mich aber mit Fragen zurückgelassen hat. Eine war: warum ist Lineares Licht die richtige Verrechnungsmethode für die beiden Ebenen? Und direkt im Anschluss die Fragen, wo eigentlich der Unterschied zwischen Addition und Subtraktion bei der Bildberechung liegt und wieso man einen Unterschied zwischen 8bit und 16bit Bildern machen soll. Also wollte ich mir das mal genauer ansehen.

Dabei musste ich mir erst mal ein paar Gedanken zu Verrechnungsmodi (Blend Modes) generell machen. Vielleicht lohnt es sich, mit dem Artikel anzufangen.

Aufgabenstellung

Ein Bild soll so in zwei zerlegt werden, dass das eine nur großflächige Veränderungen beinhaltet, das andere die feinen Strukturen. Bei einem Portrait z. B. soll das erste Bild nur Farben und große Strukturen wie Schatten beinhalten, die Hautstruktur soll sich im anderen wiederfinden. Die beiden Bilder sollen sich nachher über Ebenenverrechnung wieder zu einem zusammensetzen lassen, das sich nicht vom Original unterscheidet.

Skin-Demo-A

Warum? Weil man dann getrennt Korrekturen nur z. B. an der Hautfarbe machen kann, ohne die Struktur zu verändern und umgekehrt. Nicht modifizierte Stellen ergeben das Original, an den Stellen, wo man retuschiert, sieht das Ergebnis sehr natürlich aus.

Frequenzen

Feine Strukturen bedeuten eine rasche Änderung der Helligkeitswerte, einen starken lokalen Kontrast. Man kann die Änderungen als Überlagerung von Wellen in der Fläche sehen. Die feinen Strukturen bedeuten dann hohe Frequenzen, während die Änderungen über größere Abstände niedrige Frequenzen bedeuten.

Frequenzfilter in Photoshop

Photoshop kennt einen Hochpassfilter, dessen Aufgabe es ist, feine Strukturen aus dem Bild zu holen. Es gibt auch Tiefpassfilter, die allerdings nicht so heissen. Was tut man, wenn man feine Strukturen, also die hohen Frequenzen, verschwinden lassen will? Man verwendet einen Weichzeichner (Blur). Welcher ist eigentlich egal, bei Filtern wie Matter Machen (Surface Blur) oder Selektiver Weichzeichner (Smart Blur) muss man allerdings etwas aufpassen, da hier scharfe Kanten entstehen, die eigentlich für hohe Frequenzen stehen.

Bild zerlegen

Am Anfang gibt es ein Bild A, davon erzeugt man zwei Kopien. Nun verändert man die eine Kopie, so dass ein neues Bild B entsteht, z. B. mit einem Weichzeichner. Wie genau ist zunächst egal. Für das Beispiel habe ich einen Gaussschen Weichzeichner mit 6-Pixel-Radius verwendet.

Skin-Demo-B

Nun wird ein weiteres Bild C erzeugt, dass nur die Unterschiede zwischen A und B beinhaltet. Das sollte einfach sein, man muss nur die Differenz bilden. Praktisch macht man mit dem Menübefehl Bildberechnung (Apply Image) mit A als Ziel und C als Quelle.

Nun ist aber zu beachten, dass Photoshop als Ergebnis einer Rechung nur Werte zwischen 0 und 1 zulässt und alle anderen Werte abschneidet. Das ist bei der Differenzenbildung sehr ungünstig, insbesondere, wenn die Bilder sehr ähnlich sind. Also dividiert man durch 2 und verschiebt um ½ nach oben, dann bleibt die komplette Information erhalten.

c = f(a,b) = frac{a-b+1}{2}.

Dass dem so ist, sieht man leicht, wenn man sich die Extreme ansieht, also Kombinationen von a,b in {0,1}.

Skin-Demo-C

Anmerkung

In Photoshop kann man mit 8-bit, 16-bit oder auch 32-bit pro Pixel und Farbe arbeiten. Die oben verwendete 1 entspricht dann 255, 65536 oder 4294967295. Der Dialog Bildberechnung (Apply Image) bietet für die Methode Differenz zwei Parameter an zum Skalieren und zum Verschieben. Zum Skalieren benötigt man die 2, das ist der oben genannte Divisor. Bei der Verschiebung kann man leider nicht 0,5 eintragen, sondern muss den entsprechenden 8-bit Wert verwenden, die 128, unabhängig von der Bit-Tiefe des Bildes. Das führt immer wieder zu Verwirrung, weshalb man auf manchen Webseiten den Hinweis findet, man solle im 16-Bit-Fall das Bild B unbedingt invertiert mit Skalierung 2 zu A addieren. Mathematisch ist das identisch, praktisch habe ich auch keinen Unterschied erkennen können, weder bei 8-bit noch bei 16-bit.

frac{a+(1-b)}{2} = frac{a-b+1}{2} = frac{a-b}{2}+{1/2}.

Bild zusammensetzen

Jetzt gilt es noch, eine Formel zu finden, die die beiden Bilder B und C wieder zusammensetzt, so dass sich A ergibt. Einfach zusammenzählen geht natürlich nicht, weil skaliert und verschoben worden ist. Was ist zu tun? Ganz einfach: C verdoppeln, zu B hinzuzählen und 1 abziehen.

f(b,c) = b + 2c -1.

Das ist genau das, was die Verrechnungsmethode Lineares Licht tut.

Praktische Anwendung

In der Praxis wird man nicht einfach mit Bildberechnung (Apply Image) aus den mühsam getrennten Bildern gleich wieder eins machen. Man wird beide Bilder als Ebenen übereinanderlegen, B nach unten, C nach oben, und für C den Verrechnungmodus Lineares Licht wählen. So behält man zwei Ebenen, die man getrennt bearbeiten kann. Man kann auch weitere Ebenen dazwischenschieben, z.B. für die Korrektur von Hauttönen oder einzelnen zu hellen oder dunklen Stellen. Ab hier wird es Retusche, und darum soll es in diesem Artikel nicht gehen.

Skin-Demo-Final