我不明白imagequick的compare
脚本是如何工作的。使用imagequick比较图像
我做
compare -metric A.png B.png C.png
B.png
是完全一样的图像A.png
(我做了一个副本)
结果如下。
我在想C.png
会完全变白,但事实并非如此。
我想知道,如果两个图像是stricly同文。是否有可能得到一个输出,告诉我“是的,这两个图像是明智的”或“不,这两个图像是注意到的”。
我不明白imagequick的compare
脚本是如何工作的。使用imagequick比较图像
我做
compare -metric A.png B.png C.png
B.png
是完全一样的图像A.png
(我做了一个副本)
结果如下。
我在想C.png
会完全变白,但事实并非如此。
我想知道,如果两个图像是stricly同文。是否有可能得到一个输出,告诉我“是的,这两个图像是明智的”或“不,这两个图像是注意到的”。
以下是一些示例,可帮助您了解图像比较的工作原理。
-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
许多人认为马克。 -metric AE是我需要的 –
Imagequick?那么,单个红色像素(rgb 255,0,0)会保存为一个GIF,与PNG中的单个红色像素相同吗? PNG中的单个红色像素与1秒后制作的PNG中的单个红色像素相同,但由于内部日期不同,文件的校验和不同?这取决于你如何定义*“相同”*。 –
表示所有像素都相同。 imagequick的“比较”能够比较不校验和,但像素。 –