WebP 的 SSIM 计算

SSIM calculation for WebP

ImageMagick 的 'compare' 在使用 SSIM 作为比较指标时似乎提供了不相关的数字。我正在使用 ImageMagick 7.0.8-58 Q16.

我尝试了各种级别的 WebP 压缩(包括无损)

magick compare -metric SSIM original.png lossless.webp difference.png

提供 0.734809。虽然我希望视觉上无法区分的图像大约为 0.999(显然没有伪影,因为它是以无损模式压缩的 WebP 文件)

收到这样的结果,我假设具体比较 PNG 和 WebP 有问题,所以我尝试比较原始 PNG 和带有目标 SSIM 的压缩 JPEG。来自 Fred 的 ImageMagick 脚本的 SSIM 包给出了 ssim=0.949 和 dssim=0.051 的结果。相反,ImageMagick 为同一个文件给出了 0.711049 结果。

magick compare -metric SSIM original.png compressed.jpg difference.png

遗憾的是,Fred 的 SSIM 似乎无法与 WebP 一起使用,而 GraphicsMagick 的比较也不支持 SSIM。那么我如何从 ImageMagick 获得准确的 SSIM 或为 WebP 文件获得 SSIM 的其他方法是什么?

您是否安装了 webp 作为 ImageMagick 的委托? 如果是,它应该显示在 magick -version 的委托列表中。你的 platform/OS 是多少?

我的 ssim 脚本似乎适用于 IM 7.0.8.59 Q16 Mac OSX

magick rose: rose.webp
ssim rose.webp rose.webp

ssim=1 dssim=0


ImageMagick 比较也适合我。

magick compare -metric ssim rose.webp rose.webp null:

1


我认为 webp 到 png 的较低值可能与 webp 有损压缩有关。我从 ImageMagick 和我的脚本中得到了相似的值:

magick rose: rose.webp
magick rose: rose.png

magick compare -metric ssim rose.webp rose.png null:
0.895189

ssim rose.webp rose.png
ssim=0.895 dssim=0.105


但是,如果我使用无损压缩,那么我得到一个完美的比较:

magick rose: -define webp:lossless=true rose.webp
magick rose: rose.png

ssim rose.webp rose.png
ssim=1 dssim=0

magick compare -metric ssim rose.webp rose.png null:
1

添加:

对我来说,webp 图像在命令行中的顺序并不重要。

这里我使用的是无损压缩

magick rose: rose.png
magick rose: -define webp:lossless=true rose.webp

magick compare -metric ssim rose.webp rose.png null:
1
1magick compare -metric ssim rose.png rose.webp null:
1

这里,我没有使用无损压缩。

magick rose: rose.png
magick rose: rose.webp

magick compare -metric ssim rose.webp rose.png null:
0.895189
magick compare -metric ssim rose.png rose.webp null:
0.895189

其实答案很简单。我使用了有问题的 ImageMagick 版本。只需更改比较顺序即可解决问题:

magick compare -metric SSIM compressed.jpg original.png difference.png