Wie kann ich den Unterschied zwischen zwei Bildern feststellen? Ich habe das Originalbild. Jemand hat auf ein genaues Duplikat 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 der Kopie. Ich möchte die beiden Bilder irgendwie vergleichen, das Haus entfernen und ein Bild mit den Worten „Hallo!“ Hinterlassen.
Ist das mit ImageMagick möglich? Ich weiß, dass es Möglichkeiten gibt, den statistischen Unterschied zwischen Bildern zu ermitteln, aber das ist nicht das, wonach ich suche.
image
image-processing
imagemagick
diff
difference
Justin Noel
quelle
quelle
Antworten:
Meine eigenen Favoriten sind diese beiden:
Der einzige Unterschied zwischen den beiden obigen Befehlen: 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 der roten Farbe unterscheiden. Diejenigen, die unverändert sind, erscheinen weiß.
Kurz und bündig.
Beachten Sie, dass Ihre Bilder nicht vom gleichen 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 einen geeigneten
-density
Parameter hinzu:Illustrierte Beispiele
Hier sind einige Abbildungen der Ergebnisse für Variationen des obigen Befehls. Hinweis: Die beiden verglichenen Dateien waren sogar PDF-Dateien , daher funktioniert es auch mit diesen (solange es sich um 1-Pager handelt)!
Links: Bild mit Text Mitte: Originalbild Rechts: Unterschiede (= Text) in roten Pixeln.
Dies ist der gleiche Befehl, den ich oben vorgeschlagen habe.
Links: Bild mit Text Mitte: Originalbild Rechts: Unterschiede in 'seegrünen' Pixeln.
Dieser Befehl fügt einen Parameter hinzu, um die Differenzpixel "seegrün" anstelle des Standardrot zu machen.
Links: Bild mit Text Mitte: Originalbild Rechts: Blau unterscheidet sich (aber mit etwas Kontexthintergrund) l
Dieser Befehl entfernt den
-compose src
Teil - das Ergebnis ist das Standardverhalten, beicompare
dem das erste der beiden unterschiedlichen Bilder als aufgehellter Hintergrund beibehalten wird. (Diesmal mit zusätzlichen Parametern, damit die Diff-Pixel blau angezeigt werden.)quelle
'compare'
. Für v7.x von ImageMagick sollten Sie'magick compare'
stattdessen ausführen .Obwohl
compare
es für viele Anwendungen gute Arbeit leistet, habe ich festgestellt, dass ich manchmal einen anderen Ansatz bevorzuge, insbesondere beim Vergleich von Bildern, die größtenteils Graustufen sind:Die Idee ist wie folgt: Konvertieren Sie beide
file1.png
undfile2.png
in Graustufen. Dann trat der erste als roter Kanal des resultierenden Bildes, der zweite als grüner Kanal. Der blaue Kanal wird aus diesen beiden unter Verwendung desdarken
Compose-Operators gebildet, was im Wesentlichen bedeutet, das Minimum zu nehmen.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ß, in der zweiten schwarz sind, werden rot, und Dinge, die in der zweiten weiß sind, in der ersten schwarz, werden grün.
Das Ergebnis liefert ein schön farbcodiertes Bild, in dem Sie der ersten Eingabe leicht Grün und der zweiten Rot zuordnen können. Hier ist ein Beispiel, in dem ich die Ausgabe von LaTeX mit der von KaTeX vergleiche (bevor ich einen Fehler behoben habe , um dies zu verbessern ):
Sie können die Ansätze kombinieren, indem Sie
compare
sehen, wo sich etwas geändert hat, und dann die oben genannten verwenden, um detaillierter zu sehen, wie sich etwas geändert hat.quelle
-colorspace gray
anstelle von-grayscale Rec709Luminance
behebt das, aber dies bringt die Komposition durcheinander. Fügen Sie-respect-parentheses
als erste Option hinzuconvert
, um dies zu erledigen.pdfdiff
Verzeichnis aus und druckt zusätzlich die Nummern der Seiten, die sich zwischen den beiden PDFs unterscheiden.-grayscale
es nicht unterstützt zu werden, ich musste verwenden,-colorspace gray
wie @BrechtMachiels vorgeschlagen