我有两种不同的算法,它们将图像作为输入。图像具有不同颜色的多边形。该算法“简化”了这些多边形(使它们具有较少的角和边)并去除了太小的多边形。
这两种算法的工作方式不同,我想知道哪一种实际上更接近原始图像。我遇到了this,但这并不是我想要的。
这两张图片
,
应具有50%的相似性,但根据该算法,它们的相似度为80%。
我还找到了一个名为ImageMagick的工具,它可以比较两个图像。但我不确定输出的含义是什么以及如何使用它们来解决我的问题。
答案 0 :(得分:5)
您可以像这样使用ImageMagick来比较两个图像:
compare -metric ae a.png b.png null:
1161
或使用convert
convert -metric ae a.png b.png -compare -format "%[distortion]" info:
1161
-metric ae
表示"告诉我绝对错误" ,即两张图片之间不同的像素数。在这种情况下,答案是1161,它恰好是像素的一半,即50%。
如果您特别想要50%输出,如果使用bash
,可以使用ImageMagick对图像尺寸进行数学计算:
n=$(compare -metric ae a.png b.png null:)
identify -format "%[fx:$n*100/(w*h)]" a.png
或更长的表单,使用convert
:
n=$(compare -metric ae a.png b.png null:)
convert -format "%[fx:$n*100/(w*h)]" a.png info:
50
如果您正在处理jpg
图像(因此有损压缩和伪影)而不是png
图像,您可能需要添加几个百分比的fudge factor
, -fuzz
参数允许几乎相同的像素计为相同:
convert -fuzz 10% -metric ae ....
如果你不幸不得不使用Windows,那么上面的方法是神秘且难以理解的,但看起来像这样:
@echo off
for /f "tokens=1,2,3,*" %%G in ('convert -metric ae a.png b.png -compare -format "%%w %%h %%[distortion]" info:') DO set /a percent=(%%I * 100) /(%%G * %%H)
echo %percent%