Ich brauche ein Befehlszeilentool, das 2 Bilder vergleicht und sagt, ob ihre Inhalte unabhängig von der Codierung gleich sind - dh eines könnte ein * .bmp und das andere ein * .png sein, solange alle ihre Breite, Höhe und alle entsprechenden Pixel sind gleich.
Mit ImageMagick ( apt-get install imagemagick
) können Sie Bilder unabhängig von Kodierung und Metadaten wie folgt vergleichen:
identify -quiet -format "%#" images...
Beachten Sie, dass Bilder, die mit verlustbehafteter Komprimierung wie JPEG (*.jpg) codiert wurden, subtile, oft unsichtbare Änderungen aufweisen.
Siehe auch ImageMagick-Beispiele: Bildsignaturen .
Genau genommen müssen Sie auch das Farbmodell und die Skalierung der Pixelwerte vergleichen. Sie sind möglicherweise nicht Teil der Metadaten im Bild.
images
. Dann müssen Sie überprüfen, ob diese Prüfsummen gleich sind.8-bit colormap
) und das andere ein vollständiges RGBA ( 8-bit/color RGBA
) ist. Sie zeigen keinen Unterschied mit ImageMagick: compare -dissimilarity-threshold 1 palette.png rgba.png difference.png
aber diese Prüfsummen sind unterschiedlich.Wenn Sie MATLAB haben, können Sie Folgendes verwenden:
% Reading images as array to variable 'a' & 'b'.
a = imread('MIMICDatacollection.bmp');
b = imread('MIMICDatacollection.png');
% Flatten multidimensional arrays to 1D
c=a(:);
d=b(:);
% Perform comparison
if length(c) ~= length(d)
disp('The images do not have the same size')
else
e = corr2(c,d);
if e==1
disp('The images are same')
else
disp('The images are not same')
end;
end
Persönlich verwende ich es mit PNG und BMP, aber es sollte für jedes Format funktionieren, das von imread
.
Wenn Sie es auf einem Computer ohne Matlab ausführen müssen, können Sie es in eine Funktion umwandeln und kompilieren, um es CLI zu machen.
Wenn Sie Matlab nicht haben, sollte es einfach sein, es in jede Hochsprache mit einer anständigen Bildbibliothek wie Python Imaging Library (PIL) zu portieren.
Verwandte Themen: Wie kann ich feststellen, ob ich doppelte Bilder herunterlade/speichere?
> 0.95
nicht besser als == 1
Kompressionsartefakte bei verlustbehafteter Kompression zu kompensieren?== 1
ist es richtig.Der Exit-Status von ImageMagick compare -metric AE
ist ungleich Null, wenn sich mindestens eine Pixelfarbe unterscheidet.
Angenommen, Sie haben einen Ordner mit dem Namen before
, der Originalbilder enthält, und einen Ordner after
, der visuell identische Bilder mit demselben Dateinamen enthalten sollte. Mit ImageMagickcompare
können Sie Folgendes tun:
for file in before/*.png; do
result=$(compare -metric AE "${file}" "${file/before/after}" /tmp/diff.png 2>&1);
if [ "${result}" != '0' ]; then
echo "${result} incorrect pixels in ${file}";
fi;
done;
findimagedupes - Findet visuell ähnliche oder doppelte Bilder
findimagedupes ist ein Befehlszeilendienstprogramm, das einen groben "visuellen Unterschied" zwischen zwei Bildern durchführt. Auf diese Weise können Sie zwei Bilder oder einen ganzen Baum von Bildern vergleichen und feststellen, ob sie ähnlich oder identisch sind. Bei gängigen Bildtypen scheint findimagedupes etwa 98 % genau zu sein.
Ich habe schließlich ein kleines Qt-Programm namens imgdiff erstellt, das zwei Dateinamen akzeptiert und einen Pixel-für-Pixel-Vergleich durchführt. Es wird eine Fehlermeldung ausgeben, wenn sie sich unterscheiden, und mit 1 beendet werden, oder stillschweigend mit 0 beendet werden, wenn sie gleich sind.
Beispielverwendung wäre:
imgdiff img1.png img2.bmp
Link zum Google Code-Projekt - https://code.google.com/p/imgdiff/ .
Probieren Sie Dupeguru hier aus: https://dupeguru.voltaicideas.net/ . Im Bildmodus sucht es nach ähnlichen Bildern, obwohl sie unterschiedliche Größen haben, es hat eine Schwellenwerteinstellung, erstellt Gruppen ähnlicher Dateien, wählt die größte Datei als Hauptdatei, kann aber auch eine andere Datei als Referenz festlegen. Kann Dateien in einen Pfad oder in den Papierkorb verschieben oder sie vollständig löschen. Es ist plattformübergreifend.
Ein weiteres interessantes Tool, das auch für verschiedene Merge-Operationen verwendet werden kann, ist WinMerge: https://winmerge.org/ . Dies hat eine interessante Funktion, die die unterschiedlichen Bereiche in den Bildern hervorhebt, aber gleichzeitig bis zu drei Dateien oder drei Pfade, die Dateien enthalten, vergleichen kann, aber nur die Dateien mit demselben Namen vergleicht, wenn sie auf diesen Pfaden gefunden werden. Dies ist gut für die Ordnersynchronisierung. Dies ist nur Windows, läuft gut in Wine, aber es ist eine QT-Version verfügbar, die sich in einem frühen Stadium zu befinden scheint: https://github.com/OzzieIsaacs/winmerge-qt .
Möglicherweise müssen Anpassungen vorgenommen werden, um den Alphakanal angemessen zu handhaben, aber die Konvertierung in ppm und die Prüfsummenbildung scheinen zu funktionieren:
#!/bin/bash
find "${@:-.}" -type f -print |\
while IFS= read -r file; do
hash=$(convert 2>&- "${file}" -strip ppm:- | md5sum)
# we get this hash if convert fails and produces no output
[ "$hash" = 'd41d8cd98f00b204e9800998ecf8427e -' ] \
|| echo "$hash ${file}"
done |\
sort | uniq -w32 --all-repeated=separate | sed 's/^.\{36\}//'
Cristian Ciupitu
sashoalm