webentwicklung-frage-antwort-db.com.de

Verwenden Sie ImageMagick, um ein Bild zu „diffundieren“

Wie kann ich den Unterschied zwischen zwei Bildern feststellen? Ich habe das Originalbild. Jemand hat auf eine exakte Kopie des Originalbildes geschrieben. Jetzt muss ich das Original mit dem auf dem Bild geschriebenen vergleichen und nur die Schrift im Bildformat extrahieren.

Beispiel: Ich habe ein Bild von einem Haus. Jemand nahm eine Kopie und schrieb „Hallo!“ Auf die Kopie. Ich möchte die beiden Bilder irgendwie vergleichen, das Haus entfernen und ein Bild mit den Worten „Hallo!“ Zurücklassen.

Ist das mit ImageMagick möglich? Ich weiß, dass es Möglichkeiten gibt, den statistischen Unterschied zwischen Bildern festzustellen, aber das ist nicht das, wonach ich suche.

155
Justin Noel

Meine eigenen Favoriten sind diese zwei:

 compare image1 image2 -compose src diff.png
 compare image1 image2 -compose src diff.pdf

Der einzige Unterschied zwischen den beiden Befehlen oben: Der erste zeigt den visuellen Unterschied zwischen den beiden Bildern als PNG-Datei, der zweite als PDF.

Die resultierende Diff-Datei zeigt alle Pixel an, die sich in roter Farbe unterscheiden. Die unveränderten erscheinen weiß.

Kurz und bündig.

Beachten Sie, dass Ihre Bilder nicht vom selben Typ sein müssen. Sie können sogar JPEG, TIFF, PNG mischen - unter einer Bedingung: Die Bilder sollten dieselbe Größe haben (Bildgröße in Pixel). Das Ausgabeformat wird durch die Erweiterung des Ausgabedateinamens bestimmt.

Sollten Sie aus irgendeinem Grund eine höhere Auflösung als die Standardauflösung (72 dpi) benötigen, fügen Sie einfach ein entsprechendes -density Parameter:

 compare -density 300 image1 image2 -compose src diff.jpeg

Illustrierte Beispiele

Hier sind einige Beispiele von Ergebnissen für Variationen des obigen Befehls. Hinweis: Die beiden verglichenen Dateien waren gerade PDF-Dateien , so dass es auch mit diesen funktioniert ( solange es sich um 1-Pager handelt)!


Links: Bild mit Text Mitte: Originalbild Rechts: Unterschiede (= Text) in roten Pixeln. Red difference pixels only; identical pixels are white

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
        diff-compose-default.pdf

Dies ist der gleiche Befehl, den ich oben vorgeschlagen habe.


Links: Bild mit Text Mitte: Originalbild Rechts: Unterschiede in den "meergrünen" Pixeln. Seagreen difference pixels only; identical pixels are white

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -compose src \
       -highlight-color seagreen \
        diff-compose-default.pdf

Dieser Befehl fügt einen Parameter hinzu, um die Differenzpixel "seagreen" anstatt des Standardrots zu machen.


Links: Bild mit Text Mitte: Originalbild Rechts: Blau diffs (aber mit einigem Kontexthintergrund) Blue difference pixels only; first of the compared images as a lightened-up backgroundl

compare \
        porsche-with-scratch.pdf  porsche-original.pdf \
       -highlight-color blue \
        diff-compose-default.pdf

Dieser Befehl entfernt das -compose src part - das Ergebnis ist das Standardverhalten von compare, bei dem der erste der beiden diffusen Bilder als aufgehellter Hintergrund beibehalten wird. (Diesmal mit zusätzlichen Parametern, damit die diff-Pixel blau angezeigt werden.)

298
Kurt Pfeifle

Während compare für viele Anwendungen gute Arbeit leistet, habe ich festgestellt, dass ich manchmal einen anderen Ansatz bevorzuge, insbesondere beim Vergleichen von Bildern, die größtenteils in Graustufen vorliegen:

convert '(' file1.png -flatten -grayscale Rec709Luminance ')' \
        '(' file2.png -flatten -grayscale Rec709Luminance ')' \
        '(' -clone 0-1 -compose darken -composite ')' \
        -channel RGB -combine diff.png

Die Idee ist folgende: konvertiere beide file1.png und file2.png zu Graustufen. Dann trat der erste als roter Kanal des resultierenden Bildes auf, der zweite als grüner Kanal. Der blaue Kanal wird aus diesen beiden gebildet, indem der Compose-Operator darken verwendet wird, was im Wesentlichen bedeutet, dass das Minimum genommen wird.

Dinge, die in beiden Bildern weiß sind, bleiben also weiß. Dinge, die in beiden Bildern schwarz sind, bleiben schwarz. Dinge, die im ersten Bild weiß, im zweiten schwarz sind, werden rot, und Dinge, die im zweiten weiß, im ersten schwarz sind, werden grün.

Das Ergebnis ist ein schön farbcodiertes Bild, bei dem Sie auf einfache Weise Grün mit der ersten Eingabe und Rot mit der zweiten Eingabe verknüpfen können. Hier ist ein Beispiel, in dem ich dies verwende, um die Ausgabe von LaTeX mit der Ausgabe von KaTeX zu vergleichen (bevor ich einen Fehler behoben habe , um dies zu verbessern):

enter image description here

Sie können die Ansätze kombinieren, indem Sie compare verwenden, um zu sehen , wo sich etwas geändert hat, und anschließend die obigen Anweisungen verwenden, um weitere Details zu sehen wie es sich geändert hat.

49
MvG