【问题标题】:Does ImageMagick compare with RMSE always return 1 regardless of dissimilarity-threshold?无论差异阈值如何,ImageMagick 与 RMSE 比较是否总是返回 1?
【发布时间】:2018-02-03 02:09:31
【问题描述】:

我正在使用 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。(我已经尝试了很多dissimilarity-thresholds 介于 0.1 和数百万之间,但它们似乎也没有效果。)我是否误解了如何使用这个论点?

编辑:我知道我可以使用其他组合获得我想要的结果,例如使用 -metric AE 和 -fuzz 0.5%,但我仍然很好奇,如果我可以使用带 RMSE 的差异阈值。

【问题讨论】:

  • 我认为-dissimilarity-threshold 只是为了让-subimage-search 在图像已经太不相似而无法被视为匹配时不再费心比较图像(这是一项昂贵的操作),而且它是可能被compare 忽略了。

标签: image-processing imagemagick


【解决方案1】:

在 Imagemagick 中,-metric rmse 返回 0 (0) 以完美匹配图像。 ImageMagick 编译的量程范围内的第一个值。括号中的第二个数字在 0 到 1 的范围内。因此,对于完全不匹配的图像,它将返回量子范围和 (1) 的值。 dissimilarity-threshold 范围从 0 到 1。如果您想测试不相似的图像并且不希望它抱怨图像太不相似,请使用 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 "\n" null:

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 是无关紧要的。

你的命令

回声$?

返回命令是否成功完成。它不是 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 表示错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    相关资源
    最近更新 更多