Tech と Culture

テクノロジーとカルチャー

JPEG アルゴリズム全体像

ここまでで、今更ですがJPEGの全体像を掴むことができました。
JPEGというアルゴリズムがどのような思想でデータ圧縮しているか理解できたので、メモ代わりにまとめておきます。
algo-oview.jpg
エンコード側で考えます。デコードは逆に操作するだけです。
JPEGは上図の4つのフェーズでなりたっています。
最初のRGB-YCbCr変換は画像の色の表現方法を変えるだけですが、その際に人間の目にはY成分ほどCbCr成分に敏感ではないという性質を利用してサンプリングファクタを成分によって変更することによってデータを間引いて圧縮することができます。
sampling422.jpg
この図は4:2:2の場合を示しています。

次に離散コサイン変換を行います。
dct-matrix.jpg
DCTは上図に示す行列演算です。
その意味は下図のような8x8=64種類の波形の重ね合わせで元画像を表現する正規直交変換です。
dct-ex.jpg
DCTは正規直交変換ですので、情報の圧縮は全く行われません。
それでは、何故このような変換を行っているかというと、最終的に行われるランレングス・ハフマン圧縮にとって圧縮率の良いデータを人間には認識しずらい部分のみを間引いて作りだすためです。
ランレングス・ハフマン圧縮において、たくさん0が連続して数値のばらつきが小さければ圧縮率が上がることは容易に分かります。
人間の目には高周波(DCTの基底波形の右下側)の誤差は認識しずらいという特性を利用して、量子化という操作を通して高周波部分の情報をごっそり丸めてしまいます。
quant-small.jpg
これによって、出力データの右下側に0が沢山並びます。それをジグザグスキャンを行って、ランレングス・ハフマン圧縮を行います。
zigzag-small2.jpg

これで、データの圧縮が行われます。
それぞれのフェーズの連携の意味が理解できて、JPEGアルゴリズム開発者の意図も理解できました。