12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

画像のSSIM算出のための6+2ツールまとめ

Last updated at Posted at 2018-09-23

SSIMを算出できるツールについて調べたのでまとめました。6種類のツールと、おまけでふたつ紹介します。

単体で利用できるプログラム

お馴染みのプログラムでSSIMの計算ができます。

ImageMagick

ImageMagickに同梱のcompareコマンドで計算できます。

$ compare -metric SSIM sample/a.jpg sample/b.jpg NULL:

# 出力
0.909166

compareコマンドは通常、差分を視覚化した画像を出力しますが、出力画像(第三引数)にNULL:を渡すことで数値を取得できるようです。

SSIM値はなぜか標準出力ではなく、標準エラーに出力されます。

PSNRなど他の指標も計算することができ、次のコマンドでその一覧を確認することができます。

$ compare -list Metric

手元のImageMagick 7.0.8-4では、AE, DSSIM, Fuzz, MAE, MEPP, MSE, NCC, PAE, PHASH, PSNR, RMSE, SSIMが表示されました。

ffmpeg

動画編集のツールキットとして有名なffmpegでもSSIMの計算ができます。本来は動画のSSIMを計算する機能ですが、静止画にも対応しています。

$ ffmpeg -i sample/a.jpg -i sample/b.jpg -filter_complex ssim -an -f null -

# 出力(中略)
[Parsed_ssim_0 @ 0x7f8d5ad01200] SSIM Y:0.932679 (11.718525) U:0.974958 (16.013383) V:0.975355 (16.082717) All:0.960998 (14.089098)

かなり多くの情報が出力されますが、最後の行で0.960998という結果が得られました。

Jpeg Archive

Jpeg Archiveは、日本での知名度はあまり高くありませんが、とても強力なJpegファイルの軽量化のためのツールキットです。

同梱されているjpeg-compareコマンドでJpeg同士のSSIM値を求めることができます。

$ jpeg-compare -m ssim sample/a.jpg sample/b.jpg

# 出力
SSIM: 0.998998

こちらも-mオプションの値によりPSNRなどの計算も可能です。

参考 dssim

PNGの軽量化ツールでお馴染みの pngguant と同じサイトで公開されているプログラムです。
PNG専用で、SSIMをベースにした独自の指標のようです。結果の数値もSSIMと異なり、数値も差分が少ないほど0に近い数字となるようです。

dssim
https://pngquant.org/dssim.html

$ dssim sample/a.png sample/b.png

# 出力
0.004913	sample/b.png

おまけ butteragli

Googleから登場して話題になったJpeg軽量化ツールの Guetzli が評価指標に用いているのが butteraugli ですが、同じように単体で使うこともできます。

$ butteraugli sample/a.jpg sample/b.jpg

# 出力
3.929208

特定スクリプト言語向けモジュール

Python

jterrace/pyssim
https://github.com/jterrace/pyssim

コマンドラインツールとしても利用できます。

# インストール
$ pip install pyssim

# コマンドとして実行
$ pyssim sample/a.jpg sample/b.jpg

# 出力
0.9198549

JavaScript

NPMにはいくつかSSIM算出用のモジュールが登録されています。

img-ssim
https://www.npmjs.com/package/img-ssim

graphicmagick が必要でした。

# インストール
$ npm i -g img-ssim

# ワンライナーでとりあえずSSIMを出力
$ node -e 'require("img-ssim")("sample/a.jpg", "sample/b.jpg", (e,s) => console.log(e || s))'

# 出力
0.9339968421131201

Webツール

Image SSIM
http://darosh.github.io/image-ssim-js/test/browser_test.html

お手軽にブラウザ上でSSIMを算出できるツールです。次のJavaScript用モジュールのデモとして公開されています。

darosh/image-ssim-js
https://github.com/darosh/image-ssim-js

ベンチマーク

圧縮率を変えて保存したある2枚のJpeg画像について、それぞれのツールのSSIM値と所要時間を計測しました。

プログラム SSIM値 所要時間
ImageMagick 0.909166 5.148s
ffmpeg 0.960998 0.134s
Jpeg Archive 0.998998 0.109s
pyssim 0.9198549 1.903s
img-ssim 0.9339968421131201 4.058s
butteraugli ※所要時間の比較まで 4.417s

算出されるSSIM値も所要時間も、かなりバラツキがありました。

SSIMは小領域の分割サイズや数式上のパラメータを利用者が決めるようなので、おそらくその値の違いによる影響なのかと推測しています。

12
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?