使用imagequick比较图像
我不明白imagequick的使用imagequick比较图像,image,Image,我不明白imagequick的比较脚本是如何工作的 我将图像与同一图像(副本)进行比较 我知道 比较-公制A.png B.png C.png B.png与A.png完全相同(我复制了一张) 结果如下 我原以为C.png将是全白色的,但事实并非如此 我想知道两个图像是否完全相同。是否有可能得到一个输出,它会告诉我“是的,两个图像是相同的”或“否,两个图像是注释相同的”。以下是一些示例,帮助您了解图像比较的工作原理 -度量AE告诉您绝对误差,即不同的像素数-因此,如果所有像素都相同,则绝对误差
比较脚本是如何工作的
我将图像与同一图像(副本)进行比较
我知道
比较-公制A.png B.png C.png
B.png
与A.png
完全相同(我复制了一张)
结果如下
我原以为C.png
将是全白色的,但事实并非如此
我想知道两个图像是否完全相同。是否有可能得到一个输出,它会告诉我“是的,两个图像是相同的”或“否,两个图像是注释相同的”。以下是一些示例,帮助您了解图像比较的工作原理
-度量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
AE
Fuzz
MAE
MEPP
MSE
NCC
PAE
PHASH
PSNR
RMSE
根据标准Unix工具(md5
,diff
,tmp
),文件是二进制相同的,md5校验和相同:
md5 red.png perfectCopy.png
MD5 (red.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
MD5 (perfectCopy.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
identify -format "%#:%f\n" red.gif perfectCopy.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:perfectCopy.png
ImageMagick仅像素上的散列(不包括元数据)是相同的:
md5 red.png perfectCopy.png
MD5 (red.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
MD5 (perfectCopy.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
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
identify -format "%#:%f\n" red.gif red.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.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 redDifferentDate.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:redDifferentDate.png
identify -format "%#:%f\n" red.gif red.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.png
4。比较两个完全不同的文件
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
显然,如果我们创建两个完全不同的文件,每个文件都充满随机噪声,那么每个人都同意它们是不同的:
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!
还有其他可用指标,如均方、根均方等-您可以使用以下方法列出它们:
identify -list metric
输出
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
AE
Fuzz
MAE
MEPP
MSE
NCC
PAE
PHASH
PSNR
RMSE
下面是一些示例,帮助您了解图像比较的工作原理
-度量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
AE
Fuzz
MAE
MEPP
MSE
NCC
PAE
PHASH
PSNR
RMSE
根据标准Unix工具(md5
,diff
,tmp
),文件是二进制相同的,md5校验和相同:
md5 red.png perfectCopy.png
MD5 (red.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
MD5 (perfectCopy.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
identify -format "%#:%f\n" red.gif perfectCopy.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:perfectCopy.png
ImageMagick仅像素上的散列(不包括元数据)是相同的:
md5 red.png perfectCopy.png
MD5 (red.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
MD5 (perfectCopy.png) = 39236e0e0dfb70da0e9bcbfbcf7b8181
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
identify -format "%#:%f\n" red.gif red.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.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 redDifferentDate.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:redDifferentDate.png
identify -format "%#:%f\n" red.gif red.png
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.gif
1157038985fec4573888bc7e74a5a728e3aa5cbc49e18253c934295162a9aeea:red.png
4。比较两个完全不同的文件
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
显然,如果我们创建两个完全不同的文件,每个文件都充满随机噪声,那么每个人都同意它们是不同的:
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!
还有其他可用指标,如均方、根均方等-您可以使用以下方法列出它们:
identify -list metric
输出
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
AE
Fuzz
MAE
MEPP
MSE
NCC
PAE
PHASH
PSNR
RMSE
快吗?那么,一个红色像素(rgb 255,0,0)保存为GIF与PNG中的一个红色像素相同吗?PNG中的单个红色像素是否与1秒后制作的PNG中的单个红色像素相同,但由于其中的日期不同,因此文件具有不同的校验和?这取决于你如何定义“相同”。这意味着所有的像素都是相同的。imagequick的“比较”功能不是比较校验和,而是比较像素。imagequick?那么,一个红色像素(rgb 255,0,0)保存为GIF与PNG中的一个红色像素相同吗?PNG中的单个红色像素是否与1秒后制作的PNG中的单个红色像素相同,但由于其中的日期不同,因此文件具有不同的校验和?这取决于你如何定义“相同”。这意味着所有的像素都是相同的。imagequick的“比较”功能不是比较校验和,而是比较像素-度量AE是我需要的许多思考标记-这就是我需要的