■離散コサイン変換(DCT)による画像の圧縮

 カラー静止画像の国際標準符号化方式であるJPEGの圧縮方式には、基本的に可逆符号化方式と非可逆符号化方式の2つがありますが、一般に圧縮率が大きく取れる非可逆圧縮方式の方がよく利用されます。

 非可逆方式の具体的な手順は概略次のとおりです。
(1)カラーモードをRGB信号からYIQ信号に変換し、I,Qの色差情報を1/4に間引きます。
(2)YIQの各チャネルの画像を8x8画素のブロック単位に分け、ブロックごとにDCT(離散コサイン変換)により周波数分布を求めます。
(3)求まった周波数分布の各要素を量子化行列で割ると、高周波成分の多くの情報がカットされ、ゼロが並ぶようになります。
(4)DC成分とAC成分に分けて、DC成分はハフマン符号化あるいは算術圧縮により、またAC成分はランレングス符号化およびハフマン符号化により、それぞれ別々に圧縮します。
(5)データの復元は上記と逆の手順によりますが、(3)で失われたデータは復元されず、従って非可逆となります。

 ここでは上記手順のうち、DCT(Discrete Cosine Transform:離散コサイン変換)に焦点を当ててみましょう。
 次の3種類の処理が体験できます。
<1>カラー画像のまま、RGBの各成分毎にDCT−>高周波カット―>IDCT
<2>カラー画像をモノクロ画像に変換後、DCT−>高周波カット―>IDCT(結果もモノクロ)
<3>カラー画像(RGB)をYIQ信号に変換後、YIQの各成分毎にDCT−>高周波カット―>IDCT―>RGBに復元

・数種類の画像を用意しています。
・離散コサイン変換の計算式に基づいて忠実に計算しますので、若干時間がかかります。
・カットする高周波成分の次数を指定できます。
  次数を下げると8x8のブロックの境界線が現れます(ブロックノイズ)。
・High pass filter にすると、逆に低周波成分をカットします。
・IDCT計算で得られる復元画像データ(RGB)値は丸め誤差などにより0〜255を外れることがあります。
  圧縮後画像に現れる斑点はこのためです。
  Check Pixel(IDCT後)にチェックを入れると、0〜255の範囲内に修正します。
・圧縮前画像、DCT係数(下記計算式中のF(i,j)の値)、圧縮後画像のpixel値を指定ブロック毎に表示します。
  ただし、RGBのまま圧縮の場合は Blue成分
      YIQ変換後に圧縮の場合は Y成分
      モノクロ変換後の圧縮の場合 Y成分
  を表示します。

 参考までに、 2次元DCTと逆DCT(IDCT:Inverse DCT)の計算式を示します。
DCTformula.jpg
[参考文献] 末松良一、他: 画像処理工学、コロナ社(2001)
ホーム