ImageMagick比较:忽略PSNR结果中的白色匹配

ldg*_*man 2 ubuntu diff imagemagick image-processing

我正在使用compare两个相似的颜色 PNG文件.他们的PSNR值为~27.

图像包含许多白色区域,这两个区域在两个图像之间始终匹配.如果我错了,请纠正我,但这些白色区域正在增加PSNR值(使图像与平均值更相似).因此,如果它们匹配,我不想考虑白色像素.

有没有办法使用compare或通过考虑其他工具来做到这一点?

我尝试设置-transparent-color为白色,但这没有效果.

这是我的命令:

compare -compose src -metric PSNR img1.png img2.png diff.png
Run Code Online (Sandbox Code Playgroud)

编辑:

compare --version
Version: ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org

convert --version
Version: ImageMagick 6.6.9-7 2014-03-06 Q16 http://www.imagemagick.org
Run Code Online (Sandbox Code Playgroud)

我忽略白色像素的想法可能是垃圾,但我仍然希望实现更好的比较.

澄清:
想象一下这种情况:你比较两个图像,它们有点不同.然后,为这些图像添加一个大的白色边框.你再次差异,发现结果PSNR值上升了一些.我想要的是一种否定这一点的方法.显然两个图像中的白色边框是相同的......

Kur*_*fle 5

像Mark Setchell一样,我并不完全明白你的真实意图.您不提供任何(链接)样本图像,这可能有助于我们掌握您的最新动态.

制备

这就是我自己创建4个样本图像的原因.这是第一对:

  • 左边是JPEG.
  • 正确的是PNG.

差异很小 - 在这里复制时,你几乎无法用肉眼发现它们.两幅图像均为482x642像素:

 

这是第二对.再次,

  • 左边是JPEG;
  • 正确的是巴布亚新几内亚.

通过在初始对周围添加白框,这些都被放大到1002x1002像素.在下面的复制中,由于此网页内的缩放比例不同,它们看起来更小:

 

所以第二对的"重要"部分是黑框中包含的部分.外边界上的白框是相同的.

对照

现在让我们比较两对.但我不想将比较仅限于PSNR指标.我希望看到所有可用的指标.我们可以使用以下命令列出可用的指标:

compare -list metric
 AE
 Fuzz
 MAE
 MEPP
 MSE
 NCC
 PAE
 PHASH
 PSNR
 RMSE
Run Code Online (Sandbox Code Playgroud)

我返回第一对指标的命令是:

for metric in $(compare -list metric) ; do  \
   echo -n "Metric ${metric} :  " ;         \
   compare                                  \
      -metric ${metric}                     \
       http://i.stack.imgur.com/TEjAd.jpg   \
       http://i.stack.imgur.com/p8JsE.png   \
       null: ;                              \
   echo ;                                   \
done
Run Code Online (Sandbox Code Playgroud)

以下是第一对的结果(略微重新格式化)(仅限"重要"部分):

Metric AE    :  123789
Metric Fuzz  :     948.522      (0.0144735)
Metric MAE   :     381.318      (0.00581854)
Metric MEPP  :       3.5399e+08 (0.000209349, 0.32549)
Metric MSE   :      13.7285     (0.000209483)
Metric NCC   :       0.998307
Metric PAE   :   21331          (0.32549)
Metric PHASH :       5.43771
Metric PSNR  :      36.7885
Metric RMSE  :     948.522      (0.0144735)
Run Code Online (Sandbox Code Playgroud)

我返回第二对指标的命令是:

for metric in $(compare -list metric) ; do  \
   echo -n "Metric ${metric} :  " ;         \
   compare                                  \
      -metric ${metric}                     \
       http://i.stack.imgur.com/gBruS.jpg   \
       http://i.stack.imgur.com/8NJeB.png   \
       null: ;                              \
   echo ;                                   \
done
Run Code Online (Sandbox Code Playgroud)

以下是第二对的结果(稍微重新格式化)(通过添加大量白框来"淡化"差异):

Metric AE    :  133609
Metric Fuzz  :     611.952       (0.00933779)
Metric MAE   :     143.849       (0.00219499)
Metric MEPP  :       4.33273e+08 (8.71895e-05, 0.341176)
Metric MSE   :       5.71428     (8.71944e-05)
Metric NCC   :       0.998137
Metric PAE   :   22359           (0.341176)
Metric PHASH :       0.360076
Metric PSNR  :      40.5951
Metric RMSE  :     611.952       (0.00933779)
Run Code Online (Sandbox Code Playgroud)

以下是两个结果的共同表:

+==============+=======================================+=========================================+
| Metric Type  | Results for "important" image parts   | Results including "unimportant" frames  |
+==============+=======================================+=========================================+
| Metric AE    | 123789                                | 133609                                  |
| Metric Fuzz  |    948.522      (0.0144735)           |    611.952       (0.00933779)           |
| Metric MAE   |    381.318      (0.00581854)          |    143.849       (0.00219499)           |
| Metric MEPP  |      3.5399e+08 (0.000209349, 0.32549)|      4.33273e+08 (8.71895e-05, 0.341176)|
| Metric MSE   |     13.7285     (0.000209483)         |      5.71428     (8.71944e-05)          |
| Metric NCC   |      0.998307                         |      0.998137                           |
| Metric PAE   |  21331          (0.32549)             |  22359           (0.341176)             |
| Metric PHASH |      5.43771                          |      0.360076                           |
| Metric PSNR  |     36.7885                           |     40.5951                             |
| Metric RMSE  |    948.522      (0.0144735)           |    611.952       (0.00933779)           |
+==============+========================================+=========================================+
Run Code Online (Sandbox Code Playgroud)

注意:将两个相同的图像与PSNR度量进行比较将产生inf(无限)值.

现在得出你自己的结论......

讨论

了解比较指标并不是一件简单的事情.

你对PSNR的理解似乎有些偏离我的解释你的' 编辑: '

澄清:
想象一下这种情况:你比较两个图像,它们有点不同.然后,为这些图像添加一个大的白色边框.你再次差异,发现结果PSNR值上升了一些.

因为PSNR 的上升值意味着两个比较的图像彼此变得更加相同!(当然,你打算在比较它们之前删除图像周围的白色(或其他颜色)框架/边框仍然是一种合理的方法.看看如何做到这一点,看看我的答案结束......)

为了更好地了解图像比较指标,您应首先创建一些简单的"图像".然后开始尝试这些.

以下是如何创建一系列单色"补丁"的建议,每个补丁大小为100x100像素:

for col in black white blue green red; do               \
  convert -size 100x100 xc:${col} xc-100px-${col}.png ; \
done
Run Code Online (Sandbox Code Playgroud)

    

实验任务:将每个100x100像素的补丁相互比较.
问题:

  • 如果您将"黑白"指标与"黑蓝"或"红绿"指标并列,那么值得注意的是什么?
  • 你有些意想不到的结果吗?为什么这样?

现在对200x200像素的补丁执行相同的操作:

for col in black white blue green red; do               \
  convert -size 200x200 xc:${col} xc-200px-${col}.png ; \
done
Run Code Online (Sandbox Code Playgroud)

实验任务:将每个200x200像素的补丁相互比较.
问题:

  • 200x200图像的相应"color1-color2"指标是否偏离100x100图像的相同"color1-color2"指标?
  • 是否有一些指标可以将相同的结果返回到各自的对应部分?为什么这样?

现在在每个100x100像素补丁周围添加一个50像素宽的红框.生成的图像也将是200x200像素的大小:

for img in xc-100px-*.png ; do \
   convert                     \
     ${img}                    \
    -mattecolor red            \
    -frame 50x50               \
     redframed-${img} ;        \
done
Run Code Online (Sandbox Code Playgroud)

实验任务:组成自己的比较对.(你知道也可以比较200x200像素'单色'补丁与200x200像素'红框'补丁...)
问题:

  • 哪些是合理的比较?
  • 您是否知道这-metric phash是唯一允许您使用不同尺寸(宽x高)比较图像的?

如何"修剪"图像周围的单色框架

您可以删除由相同颜色的像素组成的图像周围的任何"框架".图像操作员-trim将自动为您实现此目的.(它适用于不同于白色的颜色.)

convert reframed-xc-100px-blue.png -trim +repage output.png

identify redframed-xc-100px-blue.png  output.png
 redframed-xc-100px-blue.png PNG 200x200 200x200+0+0 8-bit sRGB 3c 322B 0.000u 0:00.000
               output.png[1] PNG 100x100 100x100+0+0 8-bit sRGB 2c 285B 0.000u 0:00.000
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述