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值上升了一些.我想要的是一种否定这一点的方法.显然两个图像中的白色边框是相同的......
像Mark Setchell一样,我并不完全明白你的真实意图.您不提供任何(链接)样本图像,这可能有助于我们掌握您的最新动态.
这就是我自己创建4个样本图像的原因.这是第一对:
差异很小 - 在这里复制时,你几乎无法用肉眼发现它们.两幅图像均为482x642像素:

这是第二对.再次,
通过在初始对周围添加白框,这些都被放大到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像素的补丁相互比较.
问题:
现在在每个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)

| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |