ファイヤープロジェクト
符号化技術について
2003-07-20T15:13+09:00   matsu
符号化に情報源符号化と通信路符号化があるとしたら,静止画の符号化は情報源符号化になる.「生」の静止画データがあって,それをコンピュータにとって処理しやすく,データ量を少なく表現するための技術である.MPEGは(音声を含む)動画の圧縮符号化に関する仕様である.ここでは,MPEGの仕様を理解していくために必要な基本的な静止画の符号化技術について記述する.
圧縮符号化技術は以下の三つの技術で構成される.
変換技術
「生のデータ」をコンピュータで処理しやすい形に変換する.
量子化技術
変換されたデータを品質やデータ量を考慮して,「削る」.
圧縮技術
量子化されたデータのデータを容量的に小さくする.
静止画の符号化の流れは以下のようになる.
生のデータ->変換->量子化->圧縮
符号化した静止画データはファイルとして保管したり,送信したりする.
静止画を符号化して保存したけど,再生する術がない,では意味が無い.符号化したら,その結果のデータを解釈して静止画を表示するなど,「解釈」ができなければならない.これが逆符号化であり,符号化の三つの技術のそれぞれに対応する形で以下の三つの技術がある.
  • 逆変換技術
  • 逆量子化
  • 解凍技術
符号化された静止画データを再生する流れは以下のようになる.
符号化された静止画データ->解凍->逆量子化->逆変換
符号化の過程でデータを削ったりすることがあるので,この結果得られるデータは「生のデータ」と一致するとは限らない.
画像は色合いの異なるいくつかの画像の重ね合わせで再現できる.「色合いの異なるいくつかの画像」には,「画素間の相関関係による圧縮符号化」や,「符号の出現頻度の偏りによる圧縮符号化」が有効なる.そこで,ある画像を色合いによっていくつかの画像に分解したい.この変換をDCT変換(離散コサイン変換)という.以下,もう少し詳しく説明する.
ある画素が隣の画素と極端に色合いが異なると,類推しにくい.このことを「相関関係が低い」という.逆に似通った色合いなら,「相関関係が高い」という.色合い,相関関係から,空間周波数が定義される.
色合いの変化相関関係空間周波数
激しい低い高い
緩やか高い低い
DCT変換は,このように空間周波数ごとに分けられた各画面(の一階層)をDCT係数(のテーブル)に変換する.DCT係数は縦が垂直周波数で,横が水平周波数になっている.左上の要素は空間周波数が高く,右下が低い.DCT変換すると,低周波数成分の値は大きく,高周波数成分の値が小さくなる.
8x8画素ブロックをDCT変換したあとの左上の要素はDC(直流)成分,のこりの63要素はAC(交流)成分という.DC成分は符号化済みの直前の8x8画素ブロックのDC成分との差分の符号である.AC成分はDC成分を起点として各画素をスキャンすることで係数の列に並べかえて符号化する(よくわからん).スキャンの方法にはジグザグ,オルタネート垂直,オルタネート水平スキャンがある.
量子化は,音声帯域信号をデジタル化するためのPCM(パルス符号変調)が有名だろうか.PCMではサンプリングして量子化する.例えば,単純なサインカーブをディスプレイに表示するにはどうしたらいいだろうか.概念的にはサインカーブは曲線であり,無限の点の集合である.「無限の点の集合」ということは,これをデジタルで完璧に扱うことは不可能である.ではどうするのか.一定の(時間的もしくは空間的)間隔でサンプリングしてその値を表示する.
double x;
double y;
for(x=START;x<END;x+=1/RATE){
y=sin(x);
plot(x,y);
}
こんな感じか.もしEND-STARTが単位時間なら,RATEはサンプリング周波数ということになる.サンプリング周波数が大きい程,きめ細かなサインカーブになるが,ディスプレイの解像度などを考慮すると,ある値以上はサンプリング周波数をあげても意味が無い.
サンプリングしたら,量子化する.限りなくミクロの視点で認識できるのであれば,音声の波形は無限の形を取ることができる.ある瞬間の音の強さに,無限のパターンがあるならば,やはりデジタルで完璧に表現することは不可能である.そこで,この無限のパターンを一定の値で割って,ある桁以下を切り捨てる.この割る数を量子化ステップ数といい,値が小さいほど,多くのパターンを表現できる.
このように,サンプリングと量子化は,「生のデータ」からデータを切り捨てることだと言えよう.よって「生のデータ」を復元することはできない.切る捨て過ぎると品質が悪いし,切り捨てないとデータ量が無限に膨らむ.人間の感覚器で認識できないデータはまず切捨て,それ以上の切捨ては用途によって要求される品質と相談,ということになるだろうか.
DCT変換と同様,量子化は8x8画素ブロックに分けて行う.この画素ブロックと同じ量子化ステップのマトリクスを用意し,対応する画素を量子化するのである.各画素における量子化の対象は,輝度と色差である.色差には赤Rと青Bの二つの信号を使用する.すなわち
  • 輝度信号 Y
  • 青色の色差信号 Cb=B-Y
  • 赤色の色差信号 Cr=R-Y
であり,いずれも8ビットである.CrをU,CbVとして,輝度/色差信号をYUVと呼ことがある.
データの圧縮には,いろいろな手法がある.「生のデータ」は冗長である.それを簡潔に表現するとデータ量が減ることが多い.これが圧縮の考え方である.プログラムでも,
int i=0;
i++;i++;i++;i++;i++;i++;i++;i++;i++;i++;
とするより,
int i=10;
としたほうが,ステップ数が小さい.ただし,後者では「iは始め0で,そのあと1足す動作を10回行った」という情報は無くなってしまう.圧縮技術においても,もとのデータを完全に取り出せる「可逆圧縮」ともとのデータを完全にはとりだせない「非可逆圧縮」がある.一般に「非可逆圧縮」の方が圧縮率は高い.(結果的に)データを削るのだから当然である.「非可逆圧縮」には,暗号化における利点もある.
matsu(C)
Since 2002
Mail to matsu