Ответ Марка точен. Однако он забыл упомянуть, что compare
также может возвращать «дельта-изображение», которое будет окрашивать любой пиксель с различиями в красный цвет, а идентичные пиксели будут белыми.
# Create a PNG and a JPEG from the builtin 'wizard:' image:
convert wizard: wizard.png
convert wizard: wizard.jpg
Теперь сравните два:
compare wizard.png wizard.jpg delta.png
Это «дельта.png»:
Много различий между PNG и JPEG! Хорошо, это объясняется тем, что JPEG является форматом изображения с потерями...
Как видите, у файла delta.png бледный фон. Если вам не нужен этот фон, а только красные/белые пиксели, измените команду compare
:
compare wizard.png wizard.jpg -compose src delta.png
Кроме того, вы можете игнорировать такие различия, которые ниже определенного порога. Здесь пригодится параметр -fuzz N%
.
Вы хотите синие пиксели вместо красных? А желтые вместо белых? Ну вот:
compare \
-highlight-color blue \
-lowlight-color yellow \
-fuzz 3% \
wizard.png \
wizard.jpg \
delta2.png
Вы хотите текстовое описание всех пикселей, которые отличаются соответствующими координатами? Здесь может подойти специальный выходной формат *.txt
.
Попробуй это:
compare \
-fuzz 6% \
wizard.png \
wizard.jpg \
-compose src \
delta3.txt
Файл delta3.txt будет довольно большим, потому что он содержит одну строку на пиксель в этом формате:
# ImageMagick pixel enumeration: 480,640,255,srgba
0,0: (255,255,255,0.8) #FFFFFFCC srgba(255,255,255,0.8)
1,0: (255,255,255,0.8) #FFFFFFCC srgba(255,255,255,0.8)
2,0: (255,255,255,0.8) #FFFFFFCC srgba(255,255,255,0.8)
[....]
77,80: (241,0,30,0.8) #F1001ECC srgba(241,0,30,0.8)
[....]
В первом столбце указана пара (row,column)
соответствующего пикселя (счет ведется с нуля, самый верхний и самый левый пиксель имеет адрес (0,0)
.
Следующие три столбца возвращают соответствующий цвет пикселя в трех различных распространенных форматах записи.
Кстати, ImageMagick может без проблем преобразовать файл delta3.txt
обратно в реальное изображение:
convert delta3.txt delta3.png
Итак, чтобы получить все пиксели, которые отличаются (красные) в текстовый файл, вы можете сделать это:
compare \
-fuzz 6% \
wizard.png \
wizard.jpg \
-compose src \
txt:- \
| grep -v '#FFFFFFCC'
Чтобы подсчитать количество разных пикселей:
compare \
-fuzz 6% \
wizard.png \
wizard.jpg \
-compose src \
txt:- \
| grep -v '#FFFFFFCC' \
| wc -l
С -fuzz 6%
у меня 2269
разных пикселей. С -fuzz 0%
я получаю 122474
разных пикселей. (Общее количество пикселей на этих изображениях было 307200
.)
03.03.2015
compare -metric MAE 8.png 48.png
. Они изменили имена параметров в более новых версиях. 03.03.2021