「ウォーリーをさがせ」で理解するSSIMのスゴい点 その1


本日の課題図書:

新ウォーリーをさがせ! (新ウォーリーのえほん)

新ウォーリーをさがせ! (新ウォーリーのえほん)


ちょっと、小難しい話が続いたので、(私が)ちょっと飽きちゃいました。なので、違った角度からSSIMを眺めてみましょう*1。きっと、SSIMがよりよく理解できて、好きになるかもしれません。


ウォーリーをさがせ』って知ってますよね。「人が入り乱れた絵の中からウォーリーや仲間たち、巻物などを見つけ出す(wikipedia:ウォーリーをさがせ!)」っていう、ちょっぴり変わった絵本です。


普通、ウォーリーをさがし出すことは、難しいですね。なぜなら、パッと見た感じ、ウォーリーにそっくりな人が入り乱れてるからです。もし、真っ白のキャンパスの上に、ウォーリーがポツンと描かれていたとしたら、すぐに見つかりますね。


このことを、「科学的に」説明すると、

この図を見ると、上図の中からBを探すより、下図の中からBを探す方が、簡単ですね


*2

ということで、難しい言葉で言い換えると、

視覚探索の効率は、妨害刺激の数や性質に依存する


wikipedia:視覚探索

とも言うらしいんですが、そんな小難しく考える必要はなく、要は、「木の葉を隠すなら森の中」ってことですね。


さて、話をSSIMへシフトしていきましょう。


何度かお話していますが、SSIMというのは、

人間が目で見て、似てると感じる度合いを数値化したもの


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

です。


そして、「似てる」というのは、「似てない」ことの裏返しですね。つまり、http://d.hatena.ne.jp/denshikA/20090921で紹介した例で行くと、

*3

これが元の画像だとして、

(変換A) *4 (変換B)*5

これらのどちらの画像が、元の画像に「似てる」と思いますか?というのは、どちらが「似てない」と思いますか?と質問することと、ほぼ同じ意味になりますね。
この場合、SSIMの数値から判断するに、Aの方が「似てる」ということになったわけですが、単に、Bの方が「似てない」という表現に変えるだけなので、どっちの画像が元の画像に近いのか、ということは分かりますね。


次に、「似てない」ということは、画像内に、何らかの「間違い」があるわけです。本日の課題図書との関係で言うと、

画像内の「ウォーリー(何らかの間違い)をさがせ」ば、その画像の「似てねー」度が分かる

というわけですね。


そして、ここからが重要です。


ウォーリーが人ごみの中に隠れていると分かりにくいのですが、人がほとんどいない場所にポツンとしていれば、すぐに見つかりますね。これを画像に置き換えてみると、

画像内のごちゃごちゃした場所に、間違いがあったとしても、人はあまり気づかないのです。でも、すっきりした場所に、間違いがあったとしたら、目立ってしまうので、気になるのです。

ということです。こういう人間の「心理」をうまく反映してくれないと、「人間が目で見て、似てると感じる度合いを数値化したもの」とは言えません。


そして、細かい話は次回にするとして、おおざっぱに結論だけ言っておきますと、

PSNRは「ウォーリーが人ごみの中に隠れているのか、それとも、人がほとんどいない場所にポツンとしているのかという区別をしない」で「間違い」を計算していきますので、「いろんな場面で、私たちの感覚とは異なる結果を生み出す*6」わけです。


ところが、SSIMというのは、「人ごみの中のウォーリーはあまり重視せず、ポツンと孤立したウォーリーに注目して」計算していきますので、「私たちの感覚により近いと評判*7」なのです。


というわけでまとめますと、意外と知られていないと思うのですが、SSIMがスゴいのは、画像内の間違いを計算するときに、ごちゃごちゃ度合いを考慮して、緩急をつけながら計算しているところなんです。


というわけで、どうですか?SSIMが少し身近になりましたか?

*1:ただし、話をシンプルにするために、厳密な話をしませんので、おおよそあってるかもしれないけど、ちょっと違うよね、くらいの話だと思ってください。

*2:http://upload.wikimedia.org/wikipedia/commons/2/20/VisualSearchDistractors.png

*3:http://r0k.us/graphics/kodak/kodim24.html

*4:http://artst.narod.ru/b/KODIM24X.JPG

*5:http://artst.narod.ru/b/KODIM24F.PNG

*6:http://d.hatena.ne.jp/denshikA/20090921/

*7:http://d.hatena.ne.jp/denshikA/20090921/

SSIMに関する誤解 - 解決案 -

本日のお題:デフォルトはssim.m、それ以外なら「主観評価との相関」を提示せよ

前回、お伝えしたとおり、私の今の心境は、

今、日本で進行中の大型電子化プロジェクトにおいて、SSIMの使われ方が間違っているんじゃないか、そもそもSSIMを誤解しているんじゃないか、と危惧しています。


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


でも、危惧してるだけじゃ、無責任な万年野党と何ら変わりませんね。なので、現状を踏まえて、どうすれば良いのか考えてみたいと思います。


おそらく、電子化プロジェクトの発注側ないし監理側は、「SSIMを測定して検査するツール」を持っているはずです。*1


なので、

  1. その検査ツールのSSIM計算部分*2のプログラム・ソースを公開するべきだと思います。
  2. もし、検査ツールの開発元がソース公開を拒否した場合*3、そのツールの採用を中止するべきだと思います。そして、以下の4番へ行ってください。
  3. 本来ならば、その検査ツールの検証をするべきだと思います。検証は、http://d.hatena.ne.jp/denshikA/20090923でちょこっとご紹介しているような「主観評価との相関」を調べるので、とても時間がかかります。なので、将来のプロジェクトで採用しても良いかもしれませんが、現在進行中のプロジェクトや、当面のプロジェクトにおいては、別の対策が必要ですので、以下の4番へ行ってください。
  4. 現在最も信頼されているSSIMの計算ツールは、Zhou Wangさんが公開している「ssim.m*4」ですので、このプログラムを採用するべきだと思います。
  5. ただし、上記の「ssim.m」はグレースケール画像の比較です。なので、カラー画像の比較の場合、http://d.hatena.ne.jp/denshikA/20091130で説明したようなバリエーションが発生しますので、統一するべきだと思います。私は個人的に、Y=(R+G+B)/3というような単純平均が、シンプルなので良いと思います。
  6. ssim.mをそのまま採用せず、独自で作るのも良いですが、このssim.mの結果に近くなるようにキャリブレーションをするべきだと思います。なので、キャリブレーションに必要な、オリジナル画像とSSIM値を明記したテスト画像数十枚を、キャリブレーションセットとして、早急に作成して公開するべきだと思います。


というわけで、私たちは、デフォルトとして、ssim.mのdefault settings

ガウシアン・フィルター*5
window = fspecial('gaussian', 11, 1.5);


計算式の中に入っているオプション*6
K(1) = 0.01;
K(2) = 0.03;
L = 255;


ディスタンス*7
f = max(1,round(min(M,N)/256));

を想定するべきなのだと思います。もし万が一、それ以外の計算式を採用するなら*8、たとえ発注側であったとしても、その計算式が「ssim.mより適切なものである」ということを証明する「主観評価との相関」を提示するべきだと思います。


私の知る限り、「ssim.m以外を採用すべし」というような「公の主張」は見かけないので、何の事前説明もなしに、ssim.m以外の計算式で納品画像を検査した場合、デフォルトだと十分に想定できるssim.mに基づいた良品画像を「SSIM不良」と判定する可能性が出てきます。いわゆる冤罪ですね。そういう冤罪だけは、避けて欲しい、と願います。


(おまけのお願い)
冤罪に関連して、ひとつだけ気になることがあります。最近の入札では、総合評価方式というものが採用されることが多いわけですが、ssim.mに基づいた良品画像を「SSIM不良」と判定する可能性があるとすると、SSIMに関連して、誤って、低い評価点がついてしまうこともあるのでしょうか?入札とかに詳しい人がいたら、おしえてください。

*1:持っていないのに発注をしてしまった場合、マズいですね。すぐにご連絡ください。

*2:プログラム全体を公開する必要はありません

*3:もしかしたら、やましいことがあるのかもしれませんね。

*4:http://www.ece.uwaterloo.ca/~z70wang/research/ssim/ssim.m

*5:http://d.hatena.ne.jp/denshikA/20100225

*6:http://d.hatena.ne.jp/denshikA/20100224

*7:http://d.hatena.ne.jp/denshikA/20100302

*8:相当ヘソ曲がりな行動ですが

SSIMに関する誤解

本日のお題:Different settings will produce different SSIM results.

私の思い違いだと良いんですが、今、日本で進行中の大型電子化プロジェクトにおいて、SSIMの使われ方が間違っているんじゃないか、そもそもSSIMを誤解しているんじゃないか、と危惧しています。


昨年9月に書いたように、状況としては、こんな感じですね。

[2009年]に入ってから、私のところに、「SSIMって何ですか」という質問が、頻繁に届くようになりました。理由は、いろんな公共機関が大規模な電子化プロジェクトの予算をつけて、

  1. 画像のフォーマットとして、JPEG 2000にすること、なおかつ、
  2. SSIMの値を一定水準以上にすること

という指定があったからです。


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


そして、今年2月に、日本の電子化業界がマズい方向に進んでいると思われたので、

PSNRと異なり)誰が、どこで、どのプログラムを使って計算したかによって、SSIMの値は全く別のものになる可能性があります。なので、「SSIMを 90以上にしろ」と指示して、それを第三者機械的にチェックして、外れているものは、ダメーというような検査(監査)では恣意性が残ります。


なので、SSIMの値を指定して発注するときは、「必ず、SSIMの計算式を具体的に提示して、この計算式で○○ 以上になるようにしろ」という風に指示するようにしましょうね。


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

というお知らせをしました。


ところが、状況は少しもよくなっていないと思います。もし、手元に最近の電子化プロジェクトの仕様書があったら、見てみてください。あなたの持っている仕様書に、

SSIMの誤差は、○○以内とする

というような記述がありませんか?そして、そこに具体的な計算式が書いてありますか?


正直に言って、私は、これらの仕様書に対して、「SSIMの誤差を、○○以内にする」自信がありませんし、おそらく不可能でしょう。なぜなら、具体的な計算式の提示が一切ないからです。また、もし私が審査する側にいたとしたら、全社を不合格にすることも、大して難しいことではありません。全社の画像をSSIM不良とする設定で検査すれば良いからです。


このことについて、最近、Zhou Wangさん*1と話をしました。


彼に日本の状況を説明したところ、

They have to specify the settings in order to make meaningful comparisons.
(意味のある比較をするために、発注側が計算式で使用するパラメータを具体的に提示しなくてはならない。)

と言い、その理由として、

Different settings will produce different SSIM results.
(パラメータの設定により、SSIMの値が変化してしまうから。)

ということを述べていました。


彼が言ってるんだから、そうしないといけない、というつもりは全くありませんが、少なくとも、「具体的な計算式を提示しなければ、意味のあるSSIMを計算することはできない」というのは事実として、もっと広く知れ渡っていいような気がします。


さもなければ、電子化に確保された貴重な資金が、ムダなところに使われてしまう気がします。電子化プロジェクトを企画している方々、電子化業務に携わっている方々、電子化プロジェクトを監理している方々、みんなでSSIMについて、もっと理解するように努力してみませんか。

*1:http://d.hatena.ne.jp/denshikA/20090923/あたりでご紹介しましたが、とりあえず、世界的に見て、SSIMといえば、Wangさんがトップランナーなわけですね。

(新聞)電子化の歩き方 その3

さて、内容が、技術的な部分を中心に、かなり拡充されましたので、前の地図を改訂しておきます。
(新聞)電子化に興味はあるけれど、道が分からなければ、以下のガイドを参考にしてみてください。*1


以下のような方に、お勧めです。

  • はじめて、このサイトへ迷いこんで来た方
  • これから(新聞)電子化について調べたい方
  • すでに(新聞)電子化に携わっているが、全体像を整理したい方
  • 特に、JPEG2000、SSIM、画像処理について知りたい方

 
(1)「電子化」には、「カレント」と「アーカイブ」という2種類の意味がありますが、ご存知ですか?

YESの場合次へ


NOの場合、こちら(の後半)を読んでみてください。

世界最古の新聞をネットで拝見
http://d.hatena.ne.jp/denshikA/20090831/


 
(2)ここでは、主に「アーカイブ」について書いていますが、よろしいですか?

YESの場合次へ


NOの場合
もし、電子書籍などに興味がある方は、こちらがオススメです。

外部記憶
http://masayuki.boo.jp/wp/

もし、それ以外でしたら、私の守備範囲外です。すみません。


 
(3)ここでは、主に「新聞」の電子化について書いていますが、よろしいですか?

YESの場合次へ


NOの場合
もし、書籍の電子化でしたら、こちらを読んでみてください。

bookscanner記
http://d.hatena.ne.jp/bookscanner

もし、それ以外でしたら、おそらくお役に立てません。ごめんなさい。*2


 
(4)世界の新聞電子化プロジェクトの実例を知りたいですか?

YESの場合、こちらへ行くと、これまでに紹介したプロジェクトのリストがありますので、それぞれクリックしてみてください。滞っていますが、そのうち増えて行きますので、たまにチェックしてみてください。

世界の新聞電子化プロジェクトのリスト
http://denshika.cc/a_list.php


NOの場合次へ


 
(5)(新聞)電子化に関する技術的なことが知りたいですか?


それ以外の技術的なお話は、そのうち補充されますので、たまにチェックしてみてください。


NOの場合次へ


 
(6)新聞電子化プロジェクトの予算などを知りたいですか?

YESの場合
まず、概要をさらっと知りたい場合は、こちらを見てください。

新聞の電子化というのは、どのくらいの費用がかかるのですか?
http://denshika.cc/faq/faq2.php

もう少し詳しく知りたい方は、こちらを見てください。

新聞電子化にまつわるエコノミー
http://d.hatena.ne.jp/denshikA/20090909


NOの場合次へ


 
(7)「電子化」に関係しそうなニュースを知りたいですか?

YESの場合、こちらにはてなから引っ張ってきていますが、たまに、関係ないものが混ざります。

電子化に関する最近情報
http://denshika.cc/news.php


NOの場合次へ


 
(8)いったい、何をお探しですか?

一度、サイゼリアでお話しましょう。

こちらの連絡先へ、ご希望の日時と場所ををお知らせください。都内で早朝でよければ、ほぼいつでもお会いできます。
info@denshikA.cc


 
(9)ところで、あなたは誰ですか?

私はこんな人です。http://denshika.cc/profile.php

ちなみに、みなさんのおかげで、このように推移しています。これからもよろしくお願いします。twitterで#denshikAに対して、コメントなどいただけると、うれしいです。現状、ちょっぴり寂しいです。

 2009年9月16日時点
 
 2009年10月16日時点
 
 2010年6月17日時点


http://tophatenar.com/view/denshikA

*1:スタート時は、新聞の電子化に限定してお話していこうと思っていたのですが、時代の波に流されまして、違う方向へと漂流しています。

*2:ただし、何かいいこと、あるかもしれません。

JPEG2000実習 レイヤーの確認編 (OPJViewerの登場)

本日のお題:そもそも、本当にレイヤーができているのか、検査しましょう


さて、前々回から、中級編が開始しています*1。初級編は単に変換をしてきたのですが、中級編では変換後のファイルを検査して、変換をコントロールしていっています。すでに、「OpenJPEGを使って変換できるもんね」という方が対象です。まだ、よく分からない方は、http://d.hatena.ne.jp/denshikA/20100602からスタートしてみてください。


前々回の復習ですが、もし仮に、「PSNRが30、31、32、33、34、35のレイヤーで構成されたJP2を作成せよ」という指示があった場合、

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaaaaa.jp2 -q 30,31,32,33,34,35

というのでOKでしたね。もし忘れてしまった方は、http://d.hatena.ne.jp/denshikA/20100611で復習してから進んでください。


でも、これで本当に6個のレイヤーができているのでしょうか?
他人の話を鵜呑みにしてはいけません。いつでも、自分で確かめてみましょう。


さっそく本日の秘密兵器をご紹介しましょう。以下のOpenJPEGファミリーのビューワをダウンロードして、いつものごとく、Cドライブの直下に置いてみてください。

OPJViewer.exe 直

Cドライブ直下は、こんな感じになってますかね?


つぎに、前々回説明したように、「PSNRが30、31、32、33、34、35のレイヤーで構成されたJP2」を作成してみましょう。

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaaaaa.jp2 -q 30,31,32,33,34,35

こんな感じで、188KBのJP2ができましたね。


ここまで来たら、aaaaaa.jp2をドラッグして、OPJViewer.exeの上に投下(ドロップ)してみましょう。


すると、こんな画面が出てきますね。

赤丸の部分に注目していきます。


aaaaaa.jpと書かれた左側に、「+」マークがありますので、そこをクリックして、展開してみてください。

各項目の細かい話は、そのうちいたしますので、とりあえず、先へビュンビュン行きましょう。


次に、「003: jp2c (0x6A703263)」の左側の「+」をクリックして、展開してみてください。


さらに、「Codestream」の左側の「+」をクリックして、展開してみてください。


最後に、「002: COD (0xFF52)」の左側の「+」をクリックして、展開してみると、やっと出てきました。下図の矢印部分に注目してください。「6 Layers(レイヤー6つ)」ですよー、とおしえてくれています。


確かめるために、レイヤー1つのものでもチェックして見ましょう。

C:\image_to_j2k.exe -i C:\test.tif -o C:\lossless.jp2

こんな感じの変換をすれば、こうなりますね。


さっそく、lossless.jp2をドラッグして、今、開いているOPJViewerの上にドロップしてください。


先ほどと同じように、「lossless.jp2」>「003: jp2c (0x6A703263)」>「Codestream」>「002: COD (0xFF52)」に行ってみると、

ほらね、「1 Layers*2(レイヤー1つ)」になってます。


というわけで、OpenJPEGで、レイヤーの個数を指定した場合、ちゃんと、その数だけレイヤーができていることを確認しました。ここで使ったのは、OPJViewerという、OpenJPEGの一味としてフリーで配布されているものです。今後、このビューワを使って、細部をチェックしていく予定です。

*1:なぜ私は、オンラインで、JPEG2000の講習をしてるんでしょうか?

*2:複数のsがついてますが・・・

JPEG2000実習 各レイヤーのPSNR確認編 (JP2デコーダーの登場)

本日のお題:本当に指定したPSNRでレイヤーができているのか、検査しましょう


さて、前回から、中級編が開始しています。初級編は単に変換をしてきたのですが、中級編では変換後のファイルを検査して、変換をコントロールしていく予定です。すでに、「OpenJPEGを使って変換できるもんね」という方が対象です。まだ、よく分からない方は、http://d.hatena.ne.jp/denshikA/20100602からスタートしてみてください。


前回の復習ですが、もし仮に、「PSNRが30、31、32、33、34、35のレイヤーで構成されたJP2を作成せよ」という指示があった場合、

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaaaaa.jp2 -q 30,31,32,33,34,35

というのでOKでしたね。もし忘れてしまった方は、http://d.hatena.ne.jp/denshikA/20100611で復習してから進んでください。


でも、これで本当に指定したPSNRでレイヤーができるのでしょうか?
他人の話を鵜呑みにしてはいけません。いつでも、自分で確かめてみましょう。


さっそくツールをご紹介しましょう。以下のデコーダーをダウンロードして、いつものごとく、Cドライブの直下に置いてみてください。

j2k_to_image.exe 直

Cドライブ直下は、こんな感じになってますかね?


念のため、説明しておきますと、例えばTIFFJPEGからJP2(JPEG2000)を作ることをエンコードと呼び、そのツールをエンコーダーと呼ぶます(おそらく)。なので、これまで頻繁に登場している「image_to_j2k.exe」はエンコーダーです。その逆で、JP2ファイルをTIFFJPEGに変換することをデコードと呼び、そのツールをデコーダーと呼ぶます(おそらく)。今回は、そのデコーダーのご紹介です。


つぎに、前回説明したように、「PSNRが30、31、32、33、34、35のレイヤーで構成されたJP2」を作成してみましょう。

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaaaaa.jp2 -q 30,31,32,33,34,35

こんな感じで、188KBのJP2ができましたね。


では、まず、1つだけレイヤーを取り出して、それをTIFFに変換してみましょう。OpenJPEGデコーダーでは、-iの後ろにJP2ファイル、-oの後ろに変換後のファイル、-l(エル)の後ろに、取り出したいレイヤー数を指定します。

C:\j2k_to_image.exe -i C:\aaaaaa.jp2 -o C:\1L.tif -l 1


すると、こんな感じで、できあがりました。


確認のため、PSNRを測定してみましょう。

compare.exe -metric PSNR C:\test.tif C:\1L.tif difference.png

という感じで、PSNRは、29.9364とおしえてくれました。前回の話を思い出してみると、これは、PSNRを30に狙ったレイヤーですね。


同様に、2レイヤー、3レイヤー、4レイヤー、5レイヤー、6レイヤーと繰り返してみましょう。まず、レイヤーの取り出して、

C:\j2k_to_image.exe -i C:\aaaaaa.jp2 -o C:\2L.tif -l 2
C:\j2k_to_image.exe -i C:\aaaaaa.jp2 -o C:\3L.tif -l 3
C:\j2k_to_image.exe -i C:\aaaaaa.jp2 -o C:\4L.tif -l 4
C:\j2k_to_image.exe -i C:\aaaaaa.jp2 -o C:\5L.tif -l 5
C:\j2k_to_image.exe -i C:\aaaaaa.jp2 -o C:\6L.tif -l 6

次に、PSNRを測定します。

compare.exe -metric PSNR C:\test.tif C:\2L.tif difference.png
compare.exe -metric PSNR C:\test.tif C:\3L.tif difference.png
compare.exe -metric PSNR C:\test.tif C:\4L.tif difference.png
compare.exe -metric PSNR C:\test.tif C:\5L.tif difference.png
compare.exe -metric PSNR C:\test.tif C:\6L.tif difference.png


結果をまとめると、

レイヤー実際のPSNR
129.9364
231.0746
332.2417
433.1396
534.1050
635.1693

となりますので、前回(http://d.hatena.ne.jp/denshikA/20100611)の数値と同じですね。


というわけで、以下の二つのことがはっきりしました。

  1. OpenJPEGPSNR指定のJP2変換を行うと、ちゃんと、各レイヤーに指定のPSNRができているようです
  2. レイヤーは番号が大きくなるほど、画質が良くなるように並んでいるようです(ここ重要*1


ちなみに、今回は、レイヤーが6個しかなかったのですが、「-l 7」とやってみたらどうなるのでしょうか?隠れキャラみたいなレイヤーが突然出現してくるのでしょうか?簡単な実験なので、皆さんが、実際に試してみてください。何かおもしろいことが起きたら、メールください。

*1:すでに何回か説明していますように、JPEG2000での「レイヤー」というのは、PhotoShopとかの「レイヤー」とは意味が違って、6レイヤーだからと言って、6枚の画像があるわけではありません。なので、-lで指定するレイヤー数というのは、「何番目のレイヤー」という意味ではなく、http://denshika.cc/jp2-psnr.phpの末尾で示した同心円の、中心から数えて何番目の輪まで表示するのか、ということです。デコーダーのレイヤー指定というのは、この同心円のうち表示する「半径」を指定する、と思ってください。

JPEG2000実習 PSNR編 (ImageMagickの登場)

本日のお題:レイヤーをPSNRで指定して、ImageMagickで検査しましょう


さて、今日から、中級編です。初級編は単に変換をしてきたのですが、中級編では変換後のファイルを検査して、変換をコントロールしていきましょう。すでに、「OpenJPEGを使って変換できるもんね」という方が対象です。まだ、よく分からない方は、http://d.hatena.ne.jp/denshikA/20100602からスタートしてみてください。


これまで説明してきたとおり、OpenJPEGのレイヤー指定は、こんな感じでしたね。

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaa.jp2 -r 50,20,10

通常、OpenJPEGにおいてレイヤーは圧縮率(ビットレートと言っても同じですね*1。)で指定します。


ところが、もうひとつ方法がありまして、そちらをご紹介します。この方法は、日本の大規模電子化プロジェクトで、少しだけ役に立つでしょう。(正確には、役に立った、という過去形かもしれませんね)


もうひとつの方法は、PSNRで指定することができます。


早速、OpenJPEGを使って、以下の変換をしてみてください。

C:\image_to_j2k.exe -i C:\test.tif -o C:\p30.jp2 -q 30

こんな感じで、93KBくらいの画像ができましたね。


「-q 30」というのは、「PSNRが30のレイヤーを作ってください」という意味ですので、本当かどうか確認してみましょう。



ImageMagickというとても優秀なソフトがあります。
http://ja.wikipedia.org/wiki/ImageMagick


今回はそれを使って、PSNRの測定をしてみましょう。


準備(Winじゃない人は、自分のOSっぽいところを追っかけてください)

http://www.imagemagick.org/script/binary-releases.php#windowsへ行きましょう。


通常なら、ImageMagick-6.6.2-4-Q8-windows-static.exeをDownloadすれば良いでしょう。


最後に、普通のインストールしてください。


途中で何か聞いてくるはずなのですが、最低でも、以下の「Add application derectory to your system path」というところだけチェックしてみてください。

これをチェックしたら、PC壊れちゃう、なんてことはないはずです。でも、何事も自己責任でお願いしますね。


さて、準備ができたところで、コマンドプロンプトを開いて、

compare.exe -metric PSNR C:\test.tif C:\p30.jp2 difference.png

とやってみましょう。しばらく待つと、そっけなく*2

という感じで、「PSNRは29.9364だったよ」と教えてくれます。PSNRを30に指定していたので、まぁ、許容範囲ではないですか?


同様に、PSNRが31、32、33、34、35で変換して、測定してみましょう。

C:\image_to_j2k.exe -i C:\test.tif -o C:\p31.jp2 -q 31
C:\image_to_j2k.exe -i C:\test.tif -o C:\p32.jp2 -q 32
C:\image_to_j2k.exe -i C:\test.tif -o C:\p33.jp2 -q 33
C:\image_to_j2k.exe -i C:\test.tif -o C:\p34.jp2 -q 34
C:\image_to_j2k.exe -i C:\test.tif -o C:\p35.jp2 -q 35

という変換は、もう説明いらないですね。


順番に、PSNR測定をして、確かめて見ましょう。

compare.exe -metric PSNR C:\test.tif C:\p31.jp2 difference.png

ということで、31.0746なので、まぁ、許容範囲ですね。


次に、

compare.exe -metric PSNR C:\test.tif C:\p32.jp2 difference.png

ということで、32.2417なので、ちょっと厳しいですね。


次に、

compare.exe -metric PSNR C:\test.tif C:\p33.jp2 difference.png

ということで、33.1396ですか。アメリカなら許されそうですが、日本だと、ちょっとガミガミ言われそうですね。


次に、

compare.exe -metric PSNR C:\test.tif C:\p34.jp2 difference.png

ということで、34.1050。ふむむむ、どうしましょ。


最後に、

compare.exe -metric PSNR C:\test.tif C:\p35.jp2 difference.png

ということで、35.1693。あちゃー。


というわけで、まとめると、

狙いのPSNR実際のPSNR誤差(%)
3029.93640.2%
3131.07460.2%
3232.24170.8%
3333.13960.4%
3434.10500.3%
3535.16930.5%

こんな感じでありまして、PSNRの許容範囲が1%くらい許されるなら、OpenJPEGでOKでしょう。もし、許容範囲が厳しいなら、少し改造したり、工夫したりする必要がありますね。


そして、もし仮に、「PSNRが30、31、32、33、34、35のレイヤーで構成されたJP2を作成せよ」という指示があった場合、

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaaaaa.jp2 -q 30,31,32,33,34,35

というのでOKですね。


突然ですが、これまでの理解を確認する小テストです。

C:\image_to_j2k.exe -i C:\test.tif -o C:\aaaaaa.jp2 -q 30,31,32,33,34,35
C:\image_to_j2k.exe -i C:\test.tif -o C:\p35.jp2 -q 35

この2つの変換でできるファイルは、サイズがほとんど同じなはずですね。なぜでしょうか?


正解は、こちら。
http://denshika.cc/jp2-psnr.php

*1:http://d.hatena.ne.jp/denshikA/20100610参照

*2:無口だけど、計算はちゃんとしてますので、信頼できます