2017-05-04 93 views
0

我不明白imagequick的compare脚本是如何工作的。使用imagequick比较图像

我比较同一图像的图像(复印件)Image to compare

我做

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

B.png是完全一样的图像A.png(我做了一个副本)

结果如下。

我在想C.png会完全变白,但事实并非如此。

Result of the comparaison

我想知道,如果两个图像是stricly同文。是否有可能得到一个输出,告诉我“是的,这两个图像是明智的”或“不,这两个图像是注意到的”。

+0

Imagequick?那么,单个红色像素(rgb 255,0,0)会保存为一个GIF,与PNG中的单个红色像素相同吗? PNG中的单个红色像素与1秒后制作的PNG中的单个红色像素相同,但由于内部日期不同,文件的校验和不同?这取决于你如何定义*“相同”*。 –

+0

表示所有像素都相同。 imagequick的“比较”能够比较不校验和,但像素。 –

回答

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工具( 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! 

有可用的其他指标,如MeanSquaredRootMeanSquared等等 - 你可以使用列出他们:

identify -list metric 

输出

AE 
Fuzz 
MAE 
MEPP 
MSE 
NCC 
PAE 
PHASH 
PSNR 
RMSE 
+0

许多人认为马克。 -metric AE是我需要的 –