在 Java 或 ImageMagick 中测量两个图像的相似性
Measure similarity of two images in Java or ImageMagick
我有两种将图像作为输入的不同算法。该图像具有不同颜色的多边形。该算法 "simplifies" 这些多边形(使它们具有较少的角和边)并删除太小的多边形。
这两种算法的工作方式不同,我想知道哪一种实际上更接近原始图片。我遇到了 this,但这并不是我想要的。
这两张图片
,
应该有 50% 的相似度,但根据那个算法,它们的相似度是 80%。
我还发现了一个名为ImageMagick 的工具,它可以比较两个图像。但是我不确定输出的含义是什么以及如何使用它们来解决我的问题。
您可以像这样使用 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
的意思是"tell me the absolute error",即两幅图像之间不同的像素数。在这种情况下,答案是 1161,正好是像素的一半,即 50%。
如果您特别想要 50% 的输出,您可以像这样使用 ImageMagick 对图像尺寸进行数学计算,如果您使用 bash
:
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%
我有两种将图像作为输入的不同算法。该图像具有不同颜色的多边形。该算法 "simplifies" 这些多边形(使它们具有较少的角和边)并删除太小的多边形。
这两种算法的工作方式不同,我想知道哪一种实际上更接近原始图片。我遇到了 this,但这并不是我想要的。
这两张图片
应该有 50% 的相似度,但根据那个算法,它们的相似度是 80%。
我还发现了一个名为ImageMagick 的工具,它可以比较两个图像。但是我不确定输出的含义是什么以及如何使用它们来解决我的问题。
您可以像这样使用 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
的意思是"tell me the absolute error",即两幅图像之间不同的像素数。在这种情况下,答案是 1161,正好是像素的一半,即 50%。
如果您特别想要 50% 的输出,您可以像这样使用 ImageMagick 对图像尺寸进行数学计算,如果您使用 bash
:
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%