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.
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
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.
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.
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) l
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.)
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):
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.