Ist es möglich, zwei Schichten zu subtrahieren, um die Transparenz zu berechnen?

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:

Geben Sie hier die Bildbeschreibung ein

Mögliches Ergebnis: Ein Teil der Ebene ist undurchsichtig, ein Teil ist transparent. Das Ergebnis ist identisch mit der ursprünglichen zusammengeführten Ebene.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

@Joonas Ich habe meine Frage aktualisiert, tut mir leid, dass sie anfangs nicht klar war.
Dies ist nicht einfach, aber wenn Sie das Bild Schwarzweiß zugeordnet und diese Methode verwendet haben , können Sie Ebenenmasken extrahieren und einfach mit den Originalfarben füllen.

Antworten (2)

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.

Geben Sie hier die Bildbeschreibung ein

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.

Geben Sie hier die Bildbeschreibung ein

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:

Geben Sie hier die Bildbeschreibung ein

Wir können es testen, indem wir es auf der Ebenenmaske platzieren:

Geben Sie hier die Bildbeschreibung ein

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

Geben Sie hier die Bildbeschreibung ein

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.

Früher gab es ein Plugin für Photoshop namens AlphaWorks, das dazu in der Lage sein könnte, aber ich weiß nicht, ob es noch funktioniert, da es eine 32-Bit-Version von Photoshop benötigt, und GIMP hat seinen Color to Alpha-Filter, der dies kann leicht. Aber trotzdem schöne Antwort.
Danke schön! Wenn ich das richtig verstehe, haben Sie in Ihrer 'FG-Farbkopie' dieselbe blaue Farbe wie in der FG-Ebene verwendet, aber ich frage mich, ob die Farbe unbekannt ist? Und wenn es nicht einfarbig ist? Mir wurde klar, dass meine Frage nicht zu 100% darauf abzielte, was ich zu machen versuche, ich habe sie aktualisiert.
Ja, der Vordergrund kann abgeleitet werden, wenn Sie ein ausreichend gutes Alpha extrahieren können. Den Ablauf habe ich hier erklärt

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/

Hallo Jaroslav, ich habe meine Frage aktualisiert: Eigentlich muss ich keine bestimmte Farbe in Alpha umwandeln. Ich versuche zu verstehen, ob es möglich ist, zwei Ebenen zu subtrahieren, wenn beide keine einfachen Farben sind. Danke für den Link, ist aber auch hilfreich
Ich denke, Sie können es ändern, um ein Pixel zu lesen und es auf eine Fläche von 1x1 px im Bild anzuwenden und es für alle Hintergrund-Pixmaps zu wiederholen. Auf jeden Fall sollte es eine hässliche Leistung haben, wenn Sie es also mehr umschreiben, könnte es schnell gehen.