Ich habe ein Bild mit zwei Ebenen: Hintergrund und seine Kopie + einige Modifikationen. Ist es irgendwie möglich, Farben der Hintergrundebene zu subtrahieren, sodass alle unterschiedlichen Pixel mit Transparenz extrahiert werden und das Extraktionsergebnis in Kombination mit der bg-Ebene gleich oder fast genauso aussieht wie die ursprüngliche zusammengeführte Ebene?
Eingang:
Mögliches Ergebnis: Ein Teil der Ebene ist undurchsichtig, ein Teil ist transparent. Das Ergebnis ist identisch mit der ursprünglichen zusammengeführten Ebene.
AKTUALISIEREN
Ich wollte dies verwenden, um den Unterschied zwischen der ursprünglichen und der geänderten Ebene zu extrahieren, sodass in der Praxis sowohl die Hintergrund- als auch die geänderte Ebene nicht eine Farbe haben. Hier ist ein realeres Beispiel. Ich habe einen Hintergrund und seine Kopie mit einigen Pinselstrichen und Strichen des Wischwerkzeugs.
Hier ist das Ergebnis, das ich jetzt habe. Ich verwende Differenz, um geänderte Pixel zu erkennen und lade sie dann als Auswahl, eliminiere Halbtransparenz aus dieser Auswahl und extrahiere vollständig undurchsichtige Pixel.
Dies ist ein Ergebnis, das ich gerne erhalten würde: Einige Pixel sind transparent, da der Unterschied nicht 100% weiß war. Mir ist klar, dass dies möglicherweise nicht möglich ist, aber es schadet nicht, es zu versuchen, denke ich.
Wenn Sie die zusammengeführte Ebene und den ursprünglichen Hintergrund in Photoshop neu mischen möchten, um die ursprüngliche Vordergrundebene wiederherzustellen und normale 8-Bit-Farben zu verwenden, lautet die Antwort "Es ist nicht möglich".
Aber 16-Bit-Farben haben den nötigen Headroom. Das folgende Bild hat einen Vordergrund, der nur eine Farbe und unterschiedliche Deckkraft hat. Der Bildmodus ist 16 Bit RGB.
Wahrscheinlich kennen Sie die normale Verschmelzungsgleichung:
M=xF+(1-x)B wobei
M=rgb-Wert in der zusammengefügten Ebene, x=die Deckkraft der Vordergrundfarbe in Skala 0...1, F=rgb-Wert der Vordergrundebene, B=rgb-Wert der Hintergrundebene
Diese Formel wird für jedes Pixel und getrennt für r, g und b berechnet.
Die Opazitäten der Vordergrundpixel können berechnet werden, wenn RGB-Zahlen in jedem Pixel im ursprünglichen Vordergrund, Hintergrund und der zusammengeführten Ebene bekannt sind.
x=(MB)/(FB)
MB und FB können mit Blending-Mode-Differenz ok erreicht werden. Das Vorzeichen von x wird endlich stimmen, denn es muss positiv sein.
Also bereiten wir die benötigten Schichten für Subtraktionen vor. Unter allen gibt es Ersatz-Originale.
Die Unterschiede werden durch Zusammenführen der Hintergrundkopien nach unten ausgeführt. Die resultierenden Schichten werden geteilt. Das Ergebnis sollte die ursprüngliche Deckkraft der Vordergrundfarbe sein:
Wir können es testen, indem wir es auf der Ebenenmaske platzieren:
Ziemlich nah, wenn auch nicht exakt. Wenn wir die neu erstellten zusammengeführten zusammenführen und einen Unterschied mit dem zusammengeführten Original machen, können wir mit der Farbauswahl feststellen, dass der größte Unterschied eine Helligkeit von 4% hat
Fügen Sie aufgrund der erweiterten Frage hinzu:
Der Fragesteller wollte wissen, ob dies noch lösbar ist, wenn a) die Vordergrundfarbe unbekannt war b) die Vordergrundfarbe unbekannt war und entlang des Bildes variiert
Die Zusammenführungsgleichung ergibt in einem einzelnen Pixel eigentlich drei Gleichungen, aber vier Unbekannte (Opazität x und Vordergrund R, G und B). Wenn wir davon ausgehen, dass R, G und B im gesamten Vordergrund gleich sind, und dieselbe Gleichung in ein anderes Pixel schreiben, in dem die Hintergrundfarbe dieselbe ist, aber die zusammengeführte Farbe anders und nicht dieselbe wie der Hintergrund ist, erhalten wir drei weitere Gleichungen, aber nur eine neue Unbekannte - die Opazität im neuen Pixel. Das muss genaue Lösung haben.
Es werden nur 2 Pixel benötigt, um die unbekannten R, G und B zu bestimmen. Aber das ist mit den Ebenenüberblendungsmodi von Photoshop nicht möglich, da sie pixelweise arbeiten. Sie müssen die Gleichungen lösen oder einen iterativen Suchalgorithmus haben.
Fall b) ist komplexer. Wenn im Vordergrund nur eine kleine Anzahl verschiedener RGB-Kombinationen verwendet wird, haben wir viel mehr Gleichungen als unbekannte Variablen. Ein cleverer Algorithmus kann die richtigen Stellen erraten, um Pixelproben zu nehmen, wie wir sie sehen könnten, und die Farben iterativ berechnen.
Leider bin ich kein Programmierer, geschweige denn ein Mathematikprogrammierer, daher kann ich kein Programm zeigen, das b) löst.
Bei einem einfarbigen Hintergrund könnten Sie das "Hintergrund-Radiergummi-Werkzeug" Diskontinuierlich verwenden, Toleranz 70-100 % + etwas Vordergrundfarbschutz. Es ist ähnlich wie "Farbe zu Alpha" in Gimp. Aber Sie brauchen Bitmap zu Alpha und ich weiß das in Photoshop nicht.
Oder Sie könnten dies ändern: http://cmtt.github.io/color-to-alpha/
Joonas
Sergej Kritsky
neugierig