我正在使用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>的
答案 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表示错误。