Kann jemand den Algorithmus hinter der Einstellungsebene "Schwarz und Weiß" in Photoshop erklären?
Ich muss es mit C ++ für eine Anwendung reproduzieren, die nicht rote / magentafarbene (ish) Pixel aus einem Bild hervorhebt (mit einer prozentualen konfigurierbaren Toleranz), und diese Ressource zeigte das erwartete Verhalten.
Ich konnte es immer noch nicht reproduzieren, aber ich fand einen Hinweis:
Jedes Pixel wird durch bis zu zwei Steuerelemente definiert, ein Additiv (RGB) und ein Subtraktiv (CMY).
Antworten:
Ich habe den Algorithmus perfekt in MATLAB repliziert (basierend auf der Antwort von @ Ivan Kuckir ):
Achten Sie darauf, dass die Konvertierung von
vPhotoshopValues
nachvCoeffValues
als erfolgen sollvCoeffValues = (vPhotoshopValues - 50) ./ 50
.Da Photoshop-Werte in [-200, 300] liegen und linear in [-5, 5] mit abgebildet werden sollten
50 -> 0
.Hier ist ein Vergleich zu Photoshop:
Der maximale Fehler liegt im Bereich [0, 255] unter 1.
Der vollständige Code ist in meinem GitHub-Repository für die StackExchange-Signalverarbeitung Q688 verfügbar .
quelle
Jedes (Farb-) Bild besteht aus RGB-Komponenten. Wenn Sie allen Pixeln nur in ROTEN Komponenten einen konstanten Wert hinzufügen (oder reduzieren), sehen Sie den Effekt, der dem Verschieben der ROTEN Registerkarte nach rechts entspricht, und auf die gleiche Weise hat das Reduzieren der ROTEN Komponente um eine Konstante den umgekehrten Effekt.
Ebenso können Sie jede Komponente wie beschrieben um einen festen Wert erhöhen / verringern. Wenn Sie ALLE RGB-Komponenten um denselben Wert erhöhen / verringern, entspricht dies einer Änderung der Helligkeit (im Grunde fügen Sie WEISSE Farben hinzu / entfernen sie).
Cyan, Blau, Magenta - entspricht einer solchen Transformation im CMYK-Farbraum. (Aber ich denke, Blau in diesem Farbraum entspricht einer Mischung aus Cyan und Gelb. Das ist also etwas schwierig. Die Transformation ist im Wesentlichen für alle gleich.
Das letzte Element Tint: {Hue and Saturation} entspricht denselben Operationen, aber hier werden die Bilder zuerst im HSV-Modell transformiert und dann werden HUE und Saturation unabhängig voneinander addiert / subtrahiert.
Ich weiß nicht genau, wie sich die Markierungen des Zifferblatts auf die entsprechenden Zahlen beziehen, aber Sie können dies herausfinden, indem Sie praktische Werte ausprobieren.
quelle
dotProduct(color, vec3(0.2989, 0.5870, 0.1140)
Operation handelt). 3. Blau entspricht in keinem Farbraum einer Mischung aus Cyan und Gelb.