2017-05-04 50 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是我需要的 –