JPEGに関しては色々解析ソフトがありますが, Mac用の調べてインストールするのが面倒だったのでストリームを調べてコンソールに表示する簡単なものを作成. iPhoneで撮ったJPEGファイルにはJFIF(APP0マーカ)とEXIF(APP1マーカ)が入っていました. JFIFは当然か. EXIFも地理情報入れるからあるんでしょうね. EXIFの詳しい解析は面倒だったのですっ飛ばしてDQTマーカまで読み込み. まず, 輝度成分は以下のような量子化テーブルが入っていました.
4 | 2 | 3 | 3 | 3 | 2 | 4 | 3 |
3 | 3 | 4 | 4 | 4 | 4 | 6 | 10 |
6 | 6 | 5 | 5 | 6 | 12 | 8 | 9 |
7 | 10 | 14 | 12 | 15 | 15 | 14 | 12 |
14 | 13 | 16 | 18 | 23 | 19 | 16 | 17 |
21 | 17 | 13 | 14 | 20 | 27 | 20 | 21 |
23 | 24 | 25 | 26 | 25 | 15 | 19 | 28 |
30 | 28 | 25 | 30 | 23 | 25 | 25 | 24 |
そして, 色差成分は以下のような量子化テーブルでした.
4 | 4 | 4 | 6 | 5 | 6 | 11 | 6 |
6 | 11 | 24 | 16 | 14 | 16 | 24 | 24 |
24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
24 | 24 | 24 | 24 | 24 | 24 | 24 | 24 |
JPEGで標準的に使われる量子化テーブルと比較してみると, 全体の量子化ステップサイズが1/4くらいずつ小さくなっています. 輝度成分のDC係数に限って言うと, 16が4に, つまり4bit(16段階)の量子化インデックスが6bit(64段階)の量子化インデックスに増えている(=量子化誤差が減る)ということになります.
それで実際にどれだけ画質があがっているのかJPEGで標準的に使われている量子化テーブルと比較してみました. 使った画像は符号化でよく使われる標準画像Lenaです. DCT, 量子化, 逆量子化, 逆DCTを行い, PSNR(S/N比)を比較してみました. iPhoneの量子化テーブルが37.0553[dB], JPEGデファクト標準の量子化テーブルが30.2958[dB]. 結構いいですね.
あと, その他の画像でもPSNRを見てみました.
画像 | PSNR[dB] |
---|---|
lena | 37.0553 |
Peppers | 38.5674 |
Baboon | 34.6758 |
Sailbaot | 35.7387 |
Tiffany | 36.5317 |
平均すると37[dB]くらい. PSNR自体はMATLABのimwriteコマンド(というかlibjpeg)のQuarityで70を設定するのと同じくらいですが, 量子化ステップそれ自体はQuarityを90(PSNRにすると約40[dB])設定した物と同じくらいです. まだ, 可変長符号は調べていないので圧縮率の比較していないのですが, 量子化テーブルを見た感じじゃあんまり大したことなさそう. JPEGはそんなに詳しくないのでもっと専門家の意見を聞きたいですね.