玄関コンピュータの部屋各種解説コーナーCGファイル概説

6.2 JPEG圧縮法の概略

三原色系のRGBカラーモデルデータ
工学系のYCbCrカラーモデルデータに変換
Yのデータ1〜4に対してCbCrのデータ1の割合
でサブサンプリング(第1の圧縮、非可逆的)
YCbCrデータを離散コサイン変換(DCT)して
YCbCrスペクトルデータに変換
YCbCrスペクトルデータを任意の精度(0〜100%)
で量子化(第2の圧縮、非可逆的)
量子化されたYCbCrスペクトルデータを改良版
ハフマン符号化法で圧縮(第3の圧縮、可逆的)

JPEG圧縮法の原理を一口で簡単に説明するのは至難の業なので、少々長くなりますが、できる限り噛み砕いて説明してみます。 JPEG圧縮法の圧縮手順を模式化しますと、だいたい左図のようになります。 そして、圧縮されたデータを展開するにはこの手順を逆に行います。

(1) YCbCr変換

まず最初に、三原色系のRGBカラーモデルのビットマップ・イメージデータを、工学系のYCbCr(輝度/色相)カラーモデルデータに変換します。 第1章で説明しましたように、YCbCrカラーモデルではYは輝度(明るさ)、Cbは青み、Crは赤みを表し、Yは画像のモノクロイメージとなります。 RGBカラーモデルデータからYCbCrカラーモデルデータに変換する理由は、人間の視覚は、明るさの変化に比べて色の変化の方が鈍感なので、データの精度を落とす場合、色相データの精度を落とした方が画像の劣化に気付きにくいからです。 RGBカラーモデルデータではRGBの全てに輝度に関する情報が含まれていますので、色相データだけ精度を落とすのが困難なのです。

ちなみに、人間の視覚が色の変化に鈍感であるという性質を利用したものに、まだカラー写真がなかった明治時代に流行した「彩色写真」があります。 これは白黒写真に着色料で色を付けたもので、極簡単な着色を施すだけですが、けっこう本物のカラー写真のように見える不思議なシロモノです。 少し前に、衛星TVの「彩色写真館 古き日本の風景」という番組で明治時代の彩色写真を紹介していましたが、ちょうど色があせてセピアがかったカラー写真のような、奇妙に懐かしい感じのするものでした。

RGBカラーモデルをYCbCrカラーモデルに変換するには、次のような簡単な変換式を用います。

Y=0.299R+0.587G+0.114B
Cb=−0.1687R−0.3313G+0.5B
Cr=0.5R−0.4187G−0.0813B

「1.3 色をコントロールするための各種カラーモデル」で説明しましたように、YCCbCrカラーモデルはY(光度)・Cb(同輝度の原色の青からの差異)・Cr(同輝度の原色の赤からの差異)の3つのデータで色をコントロールする方法で、テレビやビデオで用いられている方法です。 そしてRGBカラーモデルとYCbCrカラーモデルの間には、次のような関係があります。(これはYCbCrカラーモデルの定義でもあります)

Y=Lr・R+Lg・G+Lb・B
Cb=−Lr・R
————
2−2Lb
Lg・G
————
2−2Lb
B
——
2
Cr=R
——
2
Lg・G
————
2−2Lr
Lb・B
————
2−2Lr
R=Y+(2−2Lr)Cr
G=Y−Lb(2−2Lb)・Cb
———————
Lg
Lr(2−2Lr)・Cr
———————
Lg
B=Y+(2−2Lb)Cb

ただし、Lr、Lg、Lbは白の光度を1とした時のRGB各原色の光度を表す係数で、

Lr+Lg+Lb=1

という関係があります。

コンピュータのCRTカラーモニターが表現できる色の範囲は、可視光線領域の一部だけであり、RGBの各原色は工学分野で用いられる光の3原色とは若干異なります。 このため、理想的にはLr=Lg=Lb =1/3となるべき係数が、

Lr=0.299  Lg=0.578  Lb=0.114

と、緑が比較的明るく、青がやや暗くなります。 このことはCRTカラーモニターでRGBの各原色を表示してみますと、感覚的に納得できると思います。

このLr、Lg、Lbの値を上の関係式に代入しますと、RGBカラーモデルをYCbCrカラーモデルに変換する前述の変換式を導くことができます。 またYCbCrデータからRGBデータに逆変換する変換式も同様に導くことができますので、興味のある方は自分で計算してみてください。(^_-)

(2) サブサンプリング(sub sampling)

次に、Y(輝度)データとCbCr(色相)データを個別にサンプリングする「サブサンプリング」を行います。 通常は、色の変化に鈍感な人間の視覚の特徴を利用して、YデータよりもCbCrデータを低い割合でサンプリングします。 例えば2×2(=4)ピクセルの領域ごとに、Yデータはそのまま4データをサンプリングし、CbとCrは4ピクセルの平均値を各1データとしてサブサンプリングするとします。 こうしますと、元のRGBデータは4ピクセル×3バイト=12バイトですが、YCbCrデータは4+1+1=6バイトと半分に圧縮することができます。 この場合、輝度に関する情報は劣化していませんから、画像の劣化はほとんど目立たない程度です。

この輝度データと色相データのサンプリング比は、1対1(Y1、Cb・Cr各々1)、2対1、4対1などがありますが、普通は4対1にすることが多いようです。 この過程で最初の圧縮が行われ、それは元の画像の色相情報を厳密には復元できない非可逆的な圧縮となります。