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

Verrechnungsmodi in Photoshop – Teil 1

Kürzlich habe ich mich mit der Methode der Frequenztrennung (frequency separation) zur Retusche beschäftigt. Bevor ich mir die Methode verständlich machen konnte, musste ich mich erst mal mit den Verrechnungsmodi (Blend Modes) in Photoshop vertraut machen. Dazu gibt es eine Menge zu finden und zu sagen. Ich will einfach anfangen und versuchen, meine Ergebnisse verständlich darzustellen, denn man findet eine Menge von Seiten im Web, die sich mit den Verrechnungsmodi bei Photoshop beschäftigen, die man aber nicht verstehen kann. Manche der Erklärungen sind leider schlicht falsch, oft zu kompliziert. Insbesondere Fotografen und Photoshop-Anwender nehmen es nicht sehr genau mit den Formeln. Da ich verstehen wollte, was wirklich gemacht wird, habe ich mir einige genauer angesehen. Dabei habe ich feststellen müssen, dass nicht alle Hersteller das gleiche meinen, wenn sie z. B. von Weiches Licht (Soft Light) sprechen. Adobe ist sicher der Platzhirsch, aber gerade bei Photoshop sind die Verfahren zum Teil eher schlecht implementiert.

Aufgabenstellung

Aus zwei Bildern ist ein neues zu berechnen. Dabei ergibt sich der Wert eines Pixels im Zielbild aus den Werten der entsprechenden Pixel der beiden Quellbilder. Verwendet wird das u. a., wenn in Photoshop mehrere Ebenen übereinander gelegt werden. Die einfachste, aber auch uninteressanteste Variante ist, die oberen Ebenen deckend zu machen, dann sieht man nur die oberste. Man kann aber auch andere Verrechnungsvorschriften nutzen und Farbe oder Helligkeit bzw. Kontrast des Bildes in der unteren Ebene mit der oberen Ebene manipulieren. Dafür nutzen es Fotografen.

Voraussetzungen und Definitionen

Der Einfachkeit halber arbeite ich hier zunächst nicht mit Farben, sondern nur mit der Helligkeit, also Schwarzweiß. Das ändert nichts an der Gültigkeit der Betrachtung, die Rechnung bei einem RGB-Bild ist für jeden Kanal einzeln durchzuführen. Die Transparenz eines Bildes (Alpha-Kanal) ignoriere ich zunächst auch.

Ich bezeichne die Quellbilder als A und B, das Zielbild als C. Wenn man an Ebenen denkt, wäre A die untere Ebene, B die obere. Ein gemeinsames rechtwinkliges Koordinatensystem sei definiert durch Abzählen der Pixel des Bildes. Der Ort eines Pixels ist bestimmt durch seine Koordinaten (x, y)

a(x,y) sei der Helligkeitswert eines Pixels aus A, b(x,y) der eines Pixels aus B mit denselben Koordinaten. Das Ergebnis einer Berechnung ist

c(x,y) = f(a(x,y),b(x,y)).

Ich lasse im Folgenden zur leichteren Lesbarkeit die Koordinaten weg, solange nur Pixel mit identischen Koordinaten verwendet werden.

Die Helligkeitswerte werden unabhängig von der Bit-Tiefe der Bilder angegeben als Zahlen zwischen 0 (Null) für Schwarz und 1 (Eins) für Weiß. Bei der Berechnung von Helligkeitswerten c(x,y) ist zu beachten, dass auch c zwischen 0 und 1 liegen muss.

a,b,c \in [0,1]

Eine Schwierigkeit ist sofort zu erkennen: es gibt eine Vielzahl von Möglichkeiten, zwei Zahlen zwischen 0 und 1 zu verrechnen und dabei Werte außerhalb des erlaubten Bereiches zu erhalten. Bei allen Verrechnungen wird in Photoshop ganz einfach vorgegangen: Werte kleiner 0 werden durch 0 ersetzt, Werte größer 1 durch 1. Das hat hässliche Folgen, wenn man mehrere Verrechnungen hintereinander einsetzt, da Information verloren geht. So kann man in Photoshop leider nicht \frac{a+b}{2} durch Hintereinanderausführen von a+b und \frac{1}{2} erreichen.

Darstellung

Zur Visualisierung verwende ich zwei Bilder, die miteinander verrechnet werden sollen. Diese enthalten alle Helligkeitswerte zwischen 0 und 1 als linearen Verlauf, einmal von rechts nach links (a(x,y) = x, gibt mir eine horizontale Achse für a von 0 bis 1) und einmal von unten nach oben (b(x,y) = y, vertikale Achse von 0 bis 1).

Gradient-horizontal

Bild A

 

Gradient-Vertikal

Bild B

 

Verrechnungsmethoden

Ich möchte zunächst ein paar einfach, aber nicht völlig triviale Methoden betrachten, die Multiplikation und Addition, dann eine Kombination von beidem und zum Schluß dieses Teils eine Variante, die abhängig vom Helligkeitswert der Pixel in B zwei unterschiedliche Formeln verwendet.

Multiplikation (Multiply)

Die Multiplikation ist eine der einfachsten Verrechnungen, weil die Funktion keine Werte außerhalb des Intervalls 0 bis 1 liefert. Photoshop verwendet übrigens wirklich die Multiplikation, nicht das geometrische Mittel.

f(a,b) = a \cdot b

Das Ergebnis liegt wieder zwischen 0 und 1.

Bei meinen Testbildern ergibt sich:

f(x,y) = a(x,y) \cdot b(x,y) = x \cdot y

Zwei Kanten und damit drei der Ecken sollten Schwarz sein, weil eine Multiplikation mit 0 immer 0 ergibt. Weiß ergibt sich nur in der oberen rechten Ecke.

Multiply

Multipliziert

 

 Ausflug: Geometrisches Mittel (nicht in Photoshop verfügbar)

Das geometrische Mittel

f(a,b) = \sqrt{a \cdot b}

wäre für mich eigentlich die bessere Variante. Es ergäbe sich längs der Diagonale ein hübsch linearer Verlauf.

Linear Abwedeln (Linear Dodge)

Linear Abwedeln entspricht der Addition. Es ist sofort klar, dass die Addition zweier Zahlen zwischen 0 und 1 Ergebnisse zwischen 0 und 2 liefert. Die Hälfte der Ergebnisse werden also bei 1 abgeschnitten. Bei Fotos kann das zu leicht ausgebrannten Flächen führen.

f(a,b) = a + b

Wenn die Summe von a+b größer wird als 1, wird für f 1 angenommen. Werte unter 0 sind nicht erreichbar, auf dieser Seite wird also nicht abgeschnitten. Man erwartet daher Weiß auf und oberhalb der Diagonale von oben links nach unten rechts, darunter einen linearen Verlauf zu Schwarz.

Linear Abwedeln

Linear Abwedeln

 

Linear Nachbelichten (Linear Burn)

Lineares Nachbelichten ist das negative inverse von Linearem Abwedeln. Es gibt die gleichen Probleme, Tiefen können leicht absaufen.

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

Wenn die Summe von a und b kleiner ist als 1 wird f kleiner als 0, dann wird 0 angenommen. Werte über 1 sind nicht erreichbar, auf dieser Seite wird nicht abgeschnitten. Man erwartet daher Schwarz auf und unterhalb der Diagonale von oben links nach unten rechts. Darüber einen linearen Verlauf zu Weiß.

Linear-Burn

Linear Nachbelichten

 

Lineares Licht (Linear Light)

Lineares Licht findet man oft beschieben als eine Kombination von Linearem Abwedeln für b<0,5 und Linearem Nachbelichten für b \geq 0,5. Das ist nicht ganz richtig, aber fast. Wenn man die Formel für Lineares Nachbelichten für b \geq 0,5 auf der b-Achse um den Faktor 2 staucht und um 1/2 verschiebt und die für Lineares Nachbelichten für  b \geq 0,5 auch mit dem Faktor 2 auf der b-Achse staucht, dann erhält man tatsächlich:

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

Oder nach Auflösen halt einfach:

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

Die Verrechnung ist nicht mehr kommutativ, man kann also A und B nicht tauschen.

Auf der linken Kante (a=0) erwartet man von unten nach oben Schwarz bis b=0,5, danach einen linearen Verlauf zu Weiß. Auf der unteren Kante (b=0) nur Schwarz, weil die -1 alle möglichen Ergebnisse negativ macht. Mit b= 1 ergibt sich auf der oberen Kante ein durchgängiges Weiß. Auf der rechten Kante (a=1) erhält man von unten nach oben einen linearen Verlauf von Schwarz zu Weiß bei b=0,5.

Linear-Light

Lineares Licht

Interessant für die Verwendung in Photoshop ist, dass ein Bild B mit durchgehend b=0,5 das Bild A bei dieser Verrechnung unverändert in C übernimmt. Die neutrale Farbe für B für Lineares Licht ist 50% Grau. Lineares Licht wird gern verwendet, um ein Foto mit einer fast grauen Ebene mit geringen Abweichungen zu manipulieren, z. B. bei dem sogenannten Frequenztrennungs-Verfahren.

Die Methode lässt sich darstellen als das Ergebnis von beiden Verrechnungsmethoden nacheinander angewandt (bei zweifacher Verwendung von B), oder auch einfach als Lineares Nachbelichten mit verdoppeltem B (das lässt sich leider in Photoshop nicht so einfach mit mehreren Einzelschritten bewerkstelligen, da auch Zwischenergebnisse außerhalb 0 und 1 abgeschnitten werden).

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

Quellen