2008年7月28日

iPhoneのカメラの画質

前の記事でiPhoneのカメラの解像度は1600x1200サイズ固定で設定の変更はできないと書きましたが, では中身でどのくらいの画質=量子化ステップサイズを設定しているのか気になったので調べてみました.

JPEGに関しては色々解析ソフトがありますが, Mac用の調べてインストールするのが面倒だったのでストリームを調べてコンソールに表示する簡単なものを作成. iPhoneで撮ったJPEGファイルにはJFIF(APP0マーカ)とEXIF(APP1マーカ)が入っていました. JFIFは当然か. EXIFも地理情報入れるからあるんでしょうね. EXIFの詳しい解析は面倒だったのですっ飛ばしてDQTマーカまで読み込み. まず, 輝度成分は以下のような量子化テーブルが入っていました. 

42333243
334444610
665561289
710141215151412
1413161823191617
2117131420272021
2324252625151928
3028253023252524
そして, 色差成分は以下のような量子化テーブルでした. 
444656116
611241614162424
2424242424242424
2424242424242424
2424242424242424
2424242424242424
2424242424242424
2424242424242424
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]
lena37.0553
Peppers38.5674
Baboon34.6758
Sailbaot35.7387
Tiffany36.5317
平均すると37[dB]くらい. PSNR自体はMATLABのimwriteコマンド(というかlibjpeg)のQuarityで70を設定するのと同じくらいですが, 量子化ステップそれ自体はQuarityを90(PSNRにすると約40[dB])設定した物と同じくらいです. まだ, 可変長符号は調べていないので圧縮率の比較していないのですが, 量子化テーブルを見た感じじゃあんまり大したことなさそう. JPEGはそんなに詳しくないのでもっと専門家の意見を聞きたいですね.