Sel*_*ron 1 java png compare imagemagick similarity
我有两种不同的算法,它们将图像作为输入.图像具有不同颜色的多边形.该算法"简化"了这些多边形(使它们具有较少的角和边)并去除了太小的多边形.
这两种算法的工作方式不同,我想知道哪一种更接近原始图像哪一种更好.我遇到过这个,但这并不是我想要的.
这两个图像
,
应该具有50%的相似性,但根据该算法,它们的相似性为80%.
我还找到了一个名为ImageMagick的工具,可以比较两个图像.但我不确定输出的含义是什么以及如何使用它们来解决我的问题.
您可以像这样使用ImageMagick来比较两个图像:
compare -metric ae a.png b.png null:
1161
Run Code Online (Sandbox Code Playgroud)
或者,使用的较长形式 convert
convert -metric ae a.png b.png -compare -format "%[distortion]" info:
1161
Run Code Online (Sandbox Code Playgroud)
该-metric ae手段"告诉我绝对错误",即两个图像之间不同的像素数.在这种情况下,答案是1161,它恰好是像素的一半,即50%.
如果您特别想要50%的输出,您可以使用ImageMagick对图像尺寸进行数学计算,如果您使用bash:
n=$(compare -metric ae a.png b.png null:)
identify -format "%[fx:$n*100/(w*h)]" a.png
Run Code Online (Sandbox Code Playgroud)
或更长的形式,使用convert:
n=$(compare -metric ae a.png b.png null:)
convert -format "%[fx:$n*100/(w*h)]" a.png info:
50
Run Code Online (Sandbox Code Playgroud)
如果您正在处理jpg图像(因此有损压缩和伪像)而不是png图像,您可能需要添加fudge factor几个百分点,使用-fuzz参数允许几乎相同的像素计为相同:
convert -fuzz 10% -metric ae ....
Run Code Online (Sandbox Code Playgroud)
如果你不幸不得不使用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%
Run Code Online (Sandbox Code Playgroud)