使用imagequick比较图像

时间:2017-05-04 20:53:52

标签: image

我不明白imagequick的compare脚本是如何工作的。

我将图像与同一图像(副本)Image to compare

进行比较

我做

compare -metric A.png B.png C.png

B.pngA.png完全相同(我做了副本)

结果如下。

我当时认为C.png将完全变白,但事实并非如此。

Result of the comparaison

我想知道两张图片是否严格相同。是否有可能得到一个输出,告诉我“是的,两个图像是相同的”或“不,这两个图像是注意的。”

1 个答案:

答案 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工具(md5difftmp),文件是二进制相同的,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工具(diffmd5sum),文件是不同的 - 因为日期就在那里。

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