Startseite > Aktionen, Experimentelles, Tutorials > Farbseparation auch ohne Plugin

Farbseparation auch ohne Plugin

Vor einigen Tagen bin ich auf eine Website aufmerksam geworden, welche ein interessantes Plugin anbietet, welches angeblich die Luminanz und die Farbe eines RGB-Bildes 100% akkurat voneinander trennt.
Allerdings kostet dieses Programm knappe 100$ und für eine derartige Aufgabe kann man sich doch auch schnell selbst eine Aktion schreiben, oder?

Hinweis: Ich habe mir das Programm nicht selbst gekauft, meine folgenden Aussagen beziehen sich rein auf das, was ich auf der Website gesehen und in den Manuals gelesen habe.

Zuerst einmal, warum sollte man überhaupt die Farbe und die Luminanz eines Bildes erst extrahieren, statt einfach wie gewohnt die Blendmodi „Farbe“ und „Luminanz“ zu verwenden?
Nun, wie ich schon öfter in den verschiedenen Communities angesprochen habe, ist es so, dass z.B. Einstellungsebenen zuerst ihre Veränderungen vornehmen und anschließend diese Veränderungen über den passenden Blendmodus ins Bild bringen.
Das hat z.B. dann Nachteile, wenn euch Kanäle ausfressen (das passiert übrigens unabhängig von der Größe des Farbraums), da somit ggf. Falschfarben ins Bild gerechnet werden.

Ein kleines Beispiel.
Nehmen wir uns dieses Originalbild hier: Ineinanderkopieren_PRE
Auf dieses Bild habe ich nun eine „Ineinanderkopieren“-Kurve angewandt, welche anschließend im Modus „Farbe“ verrechnet wurde: Ineinanderkopieren
Hier das gleiche Bild nur mit einer Extraktion der Farbe, auf die die Kurve angewandt wurde: Ineinanderkopieren_Farbe
Wie ihr sehen könnt, sind die Farben besonders in den Tiefen und Lichtern viel reiner und satter, es gibt weniger Entsättigungen und das Bild wurde gleichmäßiger gesättigt.

Jetzt aber zurück zum Plugin.
Was das Programm macht, ist eigentlich sehr einfach.
Zuerst wird die Luminanz des Bildes extrahiert, z.B. über eine neue Ebene im Modus „Farbe“, welche mit 50% Grau gefüllt wird, das Resultat wird in den Modus „Luminanz“ gesetzt.
Anschließend wird die Chrominanz (Farbe) des Bildes extrahiert, indem eine neue Ebene im Modus „Luminanz“ mit 50% Grau gefüllt wird.
Diese Farbebene wird nun dreimal dupliziert, der Modus der oberen beiden Ebenen wird auf „Negativ multiplizieren“ gesetzt.
Nun wird in der obersten der drei Ebenen der Grün- und Blaukanal mit schwarz gefüllt, in der mittleren Ebene der Rot- und Blaukanal, in der untersten Ebene der Rot- und Grünkanal (den Zweck dieser Dreiteilung habe ich ehrlich gesagt noch nicht ganz verstanden, sie kann m.M.n. auch ausgelassen werden und verkompliziert den Stapel nur).
Fertig :-).

Dazu gibt es natürlich auch wieder eine Aktion: Farbteilung (bei Problemen: Rechtsklick, „Speichern unter“)

WARNUNG: Wer keinen Spaß an Mathematik hat, sollte jetzt lieber nicht weiter lesen!

Allerdings gibt es mit dieser ganzen Trennung ein kleines Problem und das liegt in der Extraktion der Farbe.
Ab einem gewissen Level an Sättigung (ca. 90%) scheint die Aktion zu versagen, da die Farbe nicht mehr exakt extrahiert werden kann.
Da allerdings die wenigsten Bilder eine derartig hohe Sättigung haben, ist das nicht so schlimm für die meisten Fälle.

Aber warum das so ist, möchte ich euch natürlich trotzdem gerne erklären :-).

Nehmen wir an, wir haben ein Pixel mit den RGB-Werten 0/0/255.
Wir wissen, dass die Luminanz nichts anderes ist als

Luminanz: L=0.3*R+0.59*G+0.11*B

wobei in diesem Fall

R=0
G=0
B=255

Die Luminanz dieses Pixels beträgt also

R=(0,3*R+0,59*G+0,11*B)*255=28,05
G=(0,3*R+0,59*G+0,11*B)*255=28,05
B=(0,3*R+0,59*G+0,11*B)*255=28,05

Nun wollen wir allerdings die Chrominanz des Bildes extrahieren, dafür subtrahieren wir die Luminanz vom RGB-Bild.

R=(0,7*R-0,59*G-0,11*B+0,5)*255=99,45
G=(-0,3*R+0,41*G-0,11*B+0,5)*255=99,45
B=(-0,3*R-0,59*G+0,89*B+0,5)*255=354,45=255

Da die Werte im B-Kanal zu groß werden, werden sie auf 255 abgeschnitten.

Jetzt wollen wir unsere ursprüngliche Luminanz wieder einfügen, indem wir erst die Luminanz der Chromatizität ermitteln

R=(0,3*R+0,59*G+0,11*B)*255=116,56
G=(0,3*R+0,59*G+0,11*B)*255=116,56
B=(0,3*R+0,59*G+0,11*B)*255=116,56

Und diese anschließend von unserer Chromatizität subtrahieren

R=99,45-116,56=-17,11
G=99,45-116,56=-17,11
B=255-116,56=138,44

Diese können wir nun wiederum durch die ursprüngliche Luminanz ersetzen, indem wir diese dazu addieren.

R=-17,11+28,05=10,94
G=-17,11+28,05=10,94
B=116,56+28,05=166,49

Wie wir sehen können, ist das Resultat nicht mehr das vom Ausgangsbild, was daran liegt, dass der Blaukanal während der Extraktion der Chrominanz beschnitten wird.

Eine Separation von Luminanz und Chrominanz auf diesem Wege ist also in 8 bzw. 16bpc nicht verlustfrei möglich bei hoch gesättigten Pixeln.

Die Ergebnisse auf der Herstellerseite zeigen allerdings ähnliche Resultate wie meine, in einem Manual ist sogar der Verlust an Daten an einem Beispielbild erkennbar (das wird allerdings als gewünscht abgehandelt).

Natürlich ist die Frage, ob es auf einem anderen Weg möglich ist, Chrominanz und Luminanz überall verlustfrei zu extrahieren, daher suche ich jetzt nach einigen neuen Methoden :-).
Die Methode der Frequenztrennung wäre z.B. so eine Idee, aber ich hätte lieber Alternativen, da sie zu umständlich ist und in der Handhabung nicht komfortabel genug ist.
Ideen und Anregungen werden natürlich gerne angenommen :-)!

Advertisements
  1. Es gibt noch keine Kommentare.
  1. No trackbacks yet.

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s