JPEGの品質計算
いろいろあって、JPEGの品質を知る方法がないか調べることになった。
Info_JPEGというツールで調べられるのだが、同時に画像サイズと色数も知りたい。Info_JPEGではこれはできない。
あちこち検索してみるが、品質と圧縮率がごっちゃになっている(私もごっちゃに考えていた)せいか、あまり有用なネタに出会えない。
一つの方法として書かれていたのがこれ。
- ヘッダを解析して縦横サイズを取得し、さらにフルカラーか256カラーかを取得する。
- 画像サイズ×色数(フルカラーはRGBなので3bit)として元画像のデータサイズを計算する。つまりビットマップサイズにする。
- SOS(Start Of Scan)からEOI(End Of Image)までのJPEG画像データサイズを取得する。
- 100-(JPEG画像データサイズ/元画像データサイズ×100)で圧縮率を求める。
最終的にたどり着いたのがhttp://web.archive.org/web/20060716124317/www02.so-net.ne.jp/~koujin/jpeg/DCT2DQ.html 既にお亡くなりになっているサイトにこんな重要なことが…orz
あぁ、品質の計算式が書いてある。しかも品質を変えた時の量子化テーブルを表示してくれるアプレットまである。ネ申を見た。ヌミノースに触れた。
計算式だが、これを解読するだけの数学の素養は私にはない。とりあえず品質を変えて量子化テーブルを書き写し、表計算ソフトにぶち込んでみた。
表計算ソフトを見ていても何も分からないので、とりあえず全ての値の平均値を計算してみると、何となく品質に近い値が出る。ベースになるテーブルも同じようにしてみて、これらの値を計算式に当てはめてみた。
100-(量子化テーブルの平均値×50÷ベーステーブルの平均値)とすると、品質が100〜50まではほぼピッタリの値となる。これが正解?なんか安易。
でも、Info_JPEGだと品質を100にして保存したJPEGが品質99と表示されるが、これが再現できている。とりあえずこれでツールを作って色んな画像を解析して、Info_JPEGと同じ結果が出ればよし。としよう。
誰か正解を知っていたら教えて下さい m(_ _)m。