我不明白imagequick的compare
脚本是如何工作的。
我做
compare -metric A.png B.png C.png
B.png
与A.png
完全相同(我做了副本)
结果如下。
我当时认为C.png
将完全变白,但事实并非如此。
我想知道两张图片是否严格相同。是否有可能得到一个输出,告诉我“是的,两个图像是相同的”或“不,这两个图像是注意的。”
答案 0 :(得分:2)
以下是一些示例,可帮助您了解图像比较的工作原理。
-metric AE
告诉你绝对错误,它是不同的像素数 - 所以如果所有像素都相同,它将为零。
<强> 1。在每个方面比较两个完全副本的图像
convert -size 128x128 xc:red red.png # Make red image
cp red.png perfectCopy.png # Make perfect copy
compare -metric AE red.png perfectCopy.png result.png # Count differing pixels
0 # There are none - identical
根据标准Unix工具(md5
,diff
,tmp
),文件是二进制相同的,md5校验和相同:
md5 red.png perfectCopy.png
MD5 (red.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
MD5 (perfectCopy.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
ImageMagick 仅限像素(不包括元数据)的哈希值相同:
identify -format "%#:%f\n" red.gif perfectCopy.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:perfectCopy.png
<强> 2。比较两个外观相同但元数据不同的图像
convert -size 128x128 xc:red red.png # Make red image
sleep 2
convert -size 128x128 xc:red redDifferentDate.png # Make red image with different date
compare -metric AE red.png redDifferentDate.png result.png
0 # No difference
但是,根据标准的Unix工具(diff
,md5
,sum
),文件是不同的 - 因为日期就在那里。
md5 red.png redDifferentDate.png
MD5 (red.png) = 004088f6d275f431cedb74bc0209bbc5
MD5 (redDifferentDate.png) = d7d36f56e1940251f9804bd795ef4157
但是 ImageMagick 更好地了解图像,并且仅对像素数据(不包括元数据)计算的哈希值(校验和)是相同的:
identify -format "%#:%f\n" red.gif redDifferentDate.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:redDifferentDate.png
第3。比较具有相同像素的两个图像,但尺寸和格式完全不同
convert -size 128x128 xc:red red.png # Make red PNG
convert -size 128x128 xc:red red.gif # Make red GIF
compare -metric AE red.png red.gif result.png # Count differing pixels
0 # No difference
但是,文件和md5哈希不同:
diff red.png red.gif
Binary files red.png and red.gif differ
md5 red.png red.gif
MD5 (red.png) = aed0840c2c99425c25bd782e7b409022
MD5 (red.gif) = 5869df00d7b3cab3495a6c402ba61ec9
同样, ImageMagick 知道的更好,仅像素数据的哈希值(不包括元数据)仍然相同:
identify -format "%#:%f\n" red.gif red.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.png
<强> 4。比较两个截然不同的文件
显然,如果我们创建两个完全不同的文件,每个文件都充满随机噪音,每个人都认为它们是不同的:
convert -size 128x128 xc:gray +noise random random1.png # Make random image
convert -size 128x128 xc:gray +noise random random2.png # Make random image
compare -metric AE random[12].png result.png # Count differing pixels
16384 # Yep, a fair few differ!
还有其他可用指标,例如 MeanSquared , RootMeanSquared 等 - 您可以使用以下方式列出它们:
identify -list metric
<强>输出强>
AE
Fuzz
MAE
MEPP
MSE
NCC
PAE
PHASH
PSNR
RMSE