LoginSignup
11
9

More than 5 years have passed since last update.

SSIMがウソをつく例

Last updated at Posted at 2018-09-24

画像の視覚的な差分量を計算する手段としてSSIMはとても重宝していますが、視覚的な差違と乖離するケースを見つけたので紹介します。

元画像

横幅1920pxの淡いグラデーションのPNG画像です。ユニークな色数は81,121です。

この画像を二種類の方法でPNG8(256色)に減色します。

変換A: pngquantで変換

Lossy PNGで精度に定評のあるpngquantでPNG8に変換すると以下の通りです。

さすがpngquant。ぱっと見わからないディザリングで256色に減色されています。

変換B: ImageMagickで無造作に変換

convertコマンドで以下のように無造作にPNG8に変換します。

$ convert origina.png png8:8bit.png

見た目の質という点では残念な結果です。

SSIMを比較

SSIM値を比べてみると、意外な結果が出ました。意外すぎていくつかのツールで算出してみました。

変換 エンコーダ 元画像 変換画像 ImageMagick ffmpeg pyssim NPM img-ssim
A pnqguant 0.716548 0.711903 0.8328862 0.8049537035007859
B ImageMagick 0.959803 0.950992 0.970968 0.9684693612331049

SSIMはよく「0.95以上で元画像と区別が付きにくい」と言われます。まさかの「B画像の方が似ていて、更に見分けが付きにくい水準」という結果になりました。

PSNRはどうか

試しに元画像との差をPSNRを求めてみました。PSNRは数値が大きいほど類似している指標です。

この画像の場合は、SSIMより視覚的な違いを言い当てています。

変換 エンコーダ 元画像 変換後 ImageMagick ffmpeg
A pnqguant 32.613 32.552913
B ImageMagick 25.8592 25.863008

考察

特徴量は統計的な数値であり、当然ながら万能ではなく向き不向きがあります。

SSIMは輝度・コントラスト・構造を元に類似度を数値化するということで、色相は軽視されているのかもしれません。

変換BのSSIM値が絶対的に高かったのは、輝度やコントラストには色相ほどの変化がなかったのではないかと推測します。

もうひとつ、変換AのSSIM値が相対的に低い数値となったのは、ディザリングの処理が逆に周囲のピクゼルとの輝度やコントラストを大きく変化させたからと推測します。

ディザリングは限られた色数を巧妙に、言わばノイズ状に配置して遠目の近似色を表現する手法なので、SSIMからするとノイズが増えたように見えるということではないでしょうか。

2018/10/5 追記と考察その2

こちらの記事で取り上げていただきました。

ディザリングは限られた色数の空間的な分布で中間色を表現する印刷的な手法なので、画素として見るとノイズの増加に他ならないのかなぁと思いました。

では色の三原色ということでCMYKに変換してSSIMを計算したらどうなるだろう?と思って試してみました。

pngquant

$ compare -metric SSIM -colorspace CMYK -verbose samples/c.png pngquant/c.png NULL:
samples/c.png PNG 1920x1570 1920x1570+0+0 8-bit sRGB 791793B 0.100u 0:00.099
pngquant/c.png PNG 1920x1570 1920x1570+0+0 8-bit sRGB 256c 741833B 0.080u 0:00.079
Image: samples/c.png
  Channel distortion: SSIM
    cyan: 0.737768
    magenta: 0.702178
    yellow: 0.691701
    black: 0.731921
    all: 0.715892
samples/c.png=> PNG 1920x1570 1920x1570+0+0 8-bit CMYK 6.750u 0:06.750

ImageMagick

$ compare -metric SSIM -colorspace CMYK -verbose samples/c.png png8/c.png NULL:
samples/c.png PNG 1920x1570 1920x1570+0+0 8-bit sRGB 791793B 0.110u 0:00.120
png8/c.png PNG 1920x1570 1920x1570+0+0 8-bit sRGB 121c 58251B 0.060u 0:00.059
Image: samples/c.png
  Channel distortion: SSIM
    cyan: 0.836699
    magenta: 0.816028
    yellow: 0.866341
    black: 0.509111
    all: 0.757045
samples/c.png=> PNG 1920x1570 1920x1570+0+0 8-bit CMYK 6.980u 0:07.069

全体としてはディザリングの方が低評価ですが、blackのSSIMはなんだかしっくり来る感じです。偶然かもしれませんが。

11
9
0

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
11
9