Ermitteln Sie den Unterschied zwischen zwei Bildern als transparentes Bild in GIMP

21

Ich habe zwei Bilder Aund Bdie in vielen Regionen ähnlich sind.

Ich möchte ein Bild erzeugen , Cso dass

B = C on top of A

wo Csollte so transparent wie möglich sein. on top ofist die normale Ebenenüberlagerung.

Ist Cso eine Art Unterschied zwischen Aund B. Wenn Aund Bidentisch sind, dann Cist völlig transparent. Wenn Aund Bsind sehr unterschiedlich, dann Cwäre ihre fast identisch mit B.

Käse SO hör auf, Monica Schaden zuzufügen
quelle
Es gibt eine gute Antwort auf diese Frage zu Stack Overflow, die ImageMagick verwendet: stackoverflow.com/questions/5132749/…
AB

Antworten:

23

Sie können den Ebenenmodus "Unterschied" verwenden, um eine Ebenenmaske zu erstellen und auf B anzuwenden:

  1. Öffnen Sie beide Bilder als Ebenen, A unten und B oben
  2. Markieren Sie im Ebenendialog den Ebenenmodus von B als "Unterschied". Sie sollten jetzt sehen, dass das Bild größtenteils schwarz ist, wenn die Bilder gleich sind, wobei die farbigen Bereiche die Bereiche markieren, die unterschiedlich sind. Diese Farben stimmen jedoch nicht mit den von B gewünschten Farben überein
  3. Bearbeiten-> Kopieren sichtbar, um eine Kopie des berechneten Effekts auf B zu erhalten
  4. Dupliziere Ebene B, ändere den Modus zurück auf "Normal" (nennen wir diese Ebene C)
  5. Fügen Sie im Menü Ebenen eine Ebenenmaske zu C hinzu (Ebene-> Maske-> Ebenenmaske hinzufügen).
  6. Fügen Sie bei ausgewählter Maske den in Schritt 3 kopierten Inhalt ein (Bearbeiten-> Einfügen).
  7. Verankern Sie den eingefügten Inhalt auf der Ebenenmaske (Ebene-> Ebene verankern)

Da bist du - mach die Ebenen A und B unsichtbar, und du solltest ganz nah an dem sein, was du willst. Weitere Operationen an der Ebenenmaske (ich empfehle die Verwendung von Farben-> Kurve) können die Deckkraft / Transparenz der Bereiche auf Ebene C anpassen.

update Ich habe kürzlich eine ähnliche Frage zu Stackoverflow beantwortet, bei der das OP die Aufgabe programmgesteuert ausführen wollte (Verwenden der Python + Python-Imaging-Bibliothek). Ich habe das vollständige Programm zu dieser Frage veröffentlicht und es könnte für jeden hilfreich sein interessiert an dieser Antwort.

jsbueno
quelle
On the layer's dialog, mark B's layer mode as "difference". Entschuldigung, was? Ich schaue auf das Ebenen-Werkzeugfenster und wenn ich mit der rechten Maustaste auf Ebene B klicke, sehe ich nichts, das wie a aussieht layer mode. Das Nächste, das ich gefunden habe, ist Add Layer Mask, aber ich glaube nicht, dass Sie sich auf das beziehen. Verwenden von v2.8.22.
Adrian
Wenn die Ebene ausgewählt ist, kann der Ebenenmodus über ein Dropdown-Menü im oberen Bereich des Ebenendialogs ausgewählt werden, nicht über das Kontextmenü.
Jsbueno
Ich habe ein wenig Verwirrung oder Probleme mit Schritt 6 - es scheint, als ob der Inhalt in eine neue Ebene eingefügt wird, selbst wenn "C mask" ausgewählt ist, wodurch eine vierte Ebene mit dem Namen "Floating Selection (Pasted Layer)" erstellt wird, die versetzt ist von der ursprünglichen Position - soll es so aussehen?
Code Jockey
Es ist eine "schwebende Auswahl", bis Sie sie an ihrem Ziel "verankern" (Strg-H). Stellen Sie sicher, dass die Maske aktiv ist, wenn Sie sie einfügen (Strg-V), da sich die Verankerung sonst möglicherweise an einer anderen Stelle befindet.
Xenoid
5

Es gibt eine einfache Methode, um dies zu tun:

Öffnen Sie die Bilder als zwei Ebenen, führen Sie Filter - Animation - Optimieren (Unterschied) aus. Sie sollten dasselbe resultierende Bild erhalten, das jetzt aus der unteren Ebene und einer Diff-Ebene darüber besteht.

Die Dinge werden nur kompliziert, wenn Sie teilweise Transparenz haben, weil der Filter es entfernt.
Hier ist eine Problemumgehung, die ich für diesen Fall gefunden habe:

  • Alphakanal auf beiden Ebenen entfernen (die Aktion befindet sich im Kontextmenü)

Die Bilder erhalten einen weißen Hintergrund, aber keine Sorge, wir machen es später wieder rückgängig.

  • Filter - Animation - Optimieren (Unterschied)

Jetzt haben wir die Differenzebene mit weißem Hintergrund an Stellen mit teilweiser Transparenz, aber diese Pixel müssen transparent sein. Daher nehmen wir die Form des Diffs an und kopieren das Bild dieser Form von der ursprünglichen oberen Ebene. Stellen Sie sicher, dass die neu generierte Diff-Ebene ausgewählt ist, und fahren Sie fort:

  • Ebene - Ebene auf Bildgröße
  • Bearbeiten - Kopieren (Strg + C)
  • Zurück zum Originalbild
  • Rückgängig, Rückgängig, um Transparenz in unsere Ebenen zurückzugeben
  • Bearbeiten - Einfügen als - Neue Ebene
  • Alpha zu Auswahl (im Kontextmenü) auf der eingefügten Diff-Ebene
  • Löschen Sie die eingefügte Diff-Ebene
  • Stellen Sie sicher, dass die oberste Ebene ausgewählt ist, und kopieren Sie sie (Strg + C)
  • Jetzt hast du das Diff, füge es einfach ein (Strg + V) und erstelle daraus eine neue Ebene.

Natürlich geschieht keine Zauberei, und die teilweise transparente obere Ebene ändert weder die Farben noch die Transparenz der unteren Ebene. Daher gilt dies nur für Erweiterungsfälle, bei denen die veränderten Pixel der oberen Ebene die untere Ebene bedecken.


PS Die Methode von jsbueno hat bei mir nicht funktioniert.

Benutzer
quelle
1

GIMP hat einen Pinselmodus mit dem Namen "Color Erasing". Wenn Sie diesen mit Farbe X gefärbten Pinsel auf ein bestimmtes Pixel P1 anwenden, wird ein Pixel P2 mit verringertem Alphakanal erstellt. Dadurch wird Pixel P1 durch Mischen von P2 mit Pixel mit Farbe X im normalen Modus erzeugt. Der gleiche Effekt, der auf den ausgewählten Bereich oder das gesamte Bild angewendet wird, kann mit der Aktion "Farbe auf Alpha" erzielt werden .

Der Pinselmodus kann auch auf "Klonen" angewendet werden. In diesem Fall ist es möglich, Farbe von Pixeln des Hintergrundbildes A zu nehmen und sie auf entsprechende Pixel des Ergebnisbildes B anzuwenden. Das Bild, das übrig ist, ist das gewünschte Bild C.

Im Detail ist die Erstellung von Bild C wie folgt:

  1. Legen Sie die Bilder A und B als Ebenen (A unter B).
  2. Dupliziere Bild B und bezeichne es als C. Setze es zwischen A und B. Verstecke Bild B.
  3. Wählen Sie "Clone Tool". Stellen Sie im Bereich "Werkzeugoptionen" die folgenden Optionen ein: Modus: "Farbe löschen"; Pinsel: Verwenden Sie einen scharfen Rundpinsel ("Härte 100"). Größe: Vergrößern Sie den Pinsel, um das gesamte Bild auf einmal zu malen.
  4. Wählen Sie eine Ebene und STRG + auf dem oberen linken Pixel, um einen Ort auszuwählen, von dem aus geklont werden soll, und merken Sie sich seine Position (für 100% Zoom ist es (1,1), für 50% (2,2) usw.).
  5. Wählen Sie nun Ebene C und beginnen Sie mit dem Malen von oben links und decken Sie das gesamte Bild ab, ohne den Pinsel anzuheben. Es scheint, dass sich das Bild nicht ändert. Wenn Sie jedoch Ebene A ausblenden, sehen Sie, dass Ebene C jetzt das gewünschte Bild enthält.
  6. Prüfergebnis: Ebene A und Ebene C anzeigen. Aktivieren Sie die Sichtbarkeit von Ebene B, um sicherzustellen, dass die Bilder gleich aussehen. (Sie können auch den Modus "Differenz" für Ebene B auswählen. In diesem Fall sollten Sie ein absolut schwarzes Bild erhalten.)

Hinweis: Diese Methode funktioniert wie beschrieben, wenn das Hintergrundbild undurchsichtig ist. Bei transparenten Bereichen des Hintergrundbilds unterscheidet sich das Mischen von C über A von Bild B.

user2367602
quelle