SSIMとは何か? その4

本日のお題:エクセルでSSIMを計算しましょう。


お久しぶりです。家庭の事情で、遠くに行っていましたが、無事帰国しましたので、再開です。本当は、OCRの話題へ移ろうと思っていたのですが、なぜかSSIMの話題です。


前に、

また今回のSSIMに関する3回シリーズで、SSIMが少しは身近になりましたか。もし、その4があるとすれば、実際の計算方法、便利なソフトの使い方などをお伝えします。


http://d.hatena.ne.jp/denshikA/20090924

とお約束しましたので、今日は実際の計算方法にはいります。


SSIMと言えば、Zhou Wangさんです。再び、彼の論文を拝見しましょう。


Image Quality Assessment: From Error Visibility to Structural Similarity
http://www.cns.nyu.edu/pub/eero/wang03-reprint.pdf


ごちゃごちゃ書いてありますが、単に3つのことをしろ、ということです。

1.平均を計算する
2.分散を計算する
3.共分散を計算する


それを小難しい式にしたのが、これです。


平均だとか、分散だとか、わけのわからない言葉が出てきたら、エクセルに頼りましょう。


http://denshika.cc/open/ssim_20091115.xlsを開いてみてください。マクロが組んであるので、セキュリティの警告が出てきますが、あなたのパソコンに入っている個人情報をこっそり盗むだけですので、安心して開いてください*1



緑の部分(C2セルとC3セル)に画像の場所*2を入れてください。(順不同)
計算ボタンを押すと、SSIMが計算されます。


エクセルでSSIMを計算するために、以下のことが起こっていますので、時間のある方は、ご覧ください。

  1. GDI+*3というもので、画像を2枚開きます。
  2. 画像を横幅256ピクセルに縮小します。(うちのエクセルの横幅制限のため)
  3. ピクセルのRGBの値から、Yというものを計算します。*4
  4. Yを「画像1」シート、「画像2」シートの各セルに入れていきます。
  5. 画像1の平均値と分散を計算するので、=AVERAGE(画像1!1:65536)と入れてみたり、=VAR(画像1!1:65536)と入れてみます。
  6. 画像2も同じく。
  7. 画像1と画像2の共分散を計算するので、=COVAR(画像1!1:1000,画像2!1:1000)と入れてみます。*5
  8. を、2x画像1の平均x画像2の平均+C1だと信じ、I15セルに入れます。
  9. を、2x共分散+C2だと信じ、I16セルに入れます。
  10. を、画像1の平均の2乗+画像2の平均の2乗+C1だと信じ、I17セルに入れます。
  11. を、画像1の分散*6+画像2の分散+C1だと信じ、I18セルに入れます。
  12. 役者が全て揃ったので、全てをくっつけて、C4セルに入れます。


という感じで、エクセルで計算できると分かると、さらにぐっと身近に感じませんか?

*1:念のため、注意書きしておきますが、冗談です。

*2:例:C:\denshikA\test.jpg

*3:http://arkham46.developpez.com/articles/office/clgdiplus/doc/

*4:http://www.sm.rim.or.jp/~shishido/yuv.html

*5:本当は、1:65536としたいのですが、うちのPCでは計算できないようです。なので、極端に縦長の画像は避けてください。だいたい1:4くらいまでOKです。

*6:とりあえず、ここについている2乗は無視しましょう