ImageMagick与RMSE相比总是返回1而不管相异度阈值是多少?

时间:2017-08-25 04:19:00

标签: image-processing imagemagick

我正在使用ImageMagick来比较文件,如果图像在相似的阈值范围内,我希望它返回退出代码0。但是,使用公制RMSE并设置不相似度阈值以允许某些范围的可变性,它仍然返回1.当我给它2个相同的图像时,它似乎只返回0。

例如:

    > imageMagick compare -verbose -metric RMSE -dissimilarity-threshold 0.5 new_file.png old_file.png null
    > echo $?

    new_file.png PNG 1233x835 1233x835+0+0 8-bit sRGB 325677B 0.040u 0:00.040
    old_file.png PNG 1233x835 1233x835+0+0 8-bit sRGB 325712B 0.040u 0:00.039
    Image: new_file.png
      Channel distortion: RMSE
        red: 0 (0)
        green: 0.358198 (5.46575e-06)
        blue: 0.438701 (6.69415e-06)
        alpha: 0 (0)
        all: 0.283181 (4.32106e-06)
    new_file.png=>null PNG 1233x835 1233x835+0+0 8-bit sRGB 216246B 0.210u 0:00.220

    1



由于这两个图像文件具有如此小的差异并且计算的总分(0.283181)小于我的阈值0.5,我希望这两个图像注册为相似并返回0.(我已经尝试了很多相差阈值在0.1到数百之间,但它们似乎也没有效果。)我是否误解了如何使用这个论点?

编辑:我知道我可以使用其他组合得到我想要的结果,例如使用-metric AE和-fuzz 0.5%,但我仍然很好奇,如果我可以使用与RMSE的相似度阈值。< / em>的

1 个答案:

答案 0 :(得分:2)

在Imagemagick中,-metric rmse返回0(0)以完美匹配图像。对于完全不匹配的图像,它将返回量子范围(1)。相异度阈值范围从0到1.如果要测试不相似的图像并且不希望它抱怨图像太不相似,请使用一个。如果您正在测试两个相同大小的图像,则可能不会需要-dissimilarity-metric,但如果使用-subimage-search则需要它。

RMSE衡量差异。因此,如果图像相同,那么差异将为0.

例如:

convert -size 100x100 xc:white white.png
convert -size 100x100 xc:gray gray.png
convert -size 100x100 xc:black black.png

echo $?
1
compare -metric rmse white.png white.png -format "\n" null:
0 (0)

echo $?
0

比较-metric rmse white.png gray.png -format&#34; \ n&#34;空:

compare -metric rmse white.png black.png -format "\n" null:
65535 (1)

compare -metric rmse -dissimilarity-threshold 1 white.png black.png -format "\n" null:
65535 (1)

echo $?
1

compare -metric rmse -dissimilarity-threshold 0 white.png black.png -format "\n" null:
65535 (1)

echo $?
1

因此对于两个相同大小的图像,-dissimilarity-threshold是无关紧要的。

你的命令

echo $?

返回命令是否成功完成。它不是rmse指标的值。

convert -size 200x200 xc:white white.png
convert -size 100x100 xc:black black.png

compare -metric rmse -subimage-search white.png black.png -format "\n" null:
compare: images too dissimilar `white.png' @ error/compare.c/CompareImageCommand/1148.
echo $?
2

compare -metric rmse -subimage-search -dissimilarity-threshold 1 white.png black.png -format "\n" null:
65535 (1) @ 0,0

echo $?
1

因此,返回代码似乎为0表示完美匹配,1表示非完美匹配,2表示错误。