離散コサイン変換(りさんコサインへんかん、英: discrete cosine transform、DCT)は、離散信号を周波数領域へ変換する方法の一つである。 DCTは、有限数列を、余弦関数数列 cos(nk) を基底とする一次結合(つまり、適切な周波数と振幅のコサインカーブの和)の係数に変換する。余弦関数は実数に対しては実数を返すので、実数列に対してはDCT係数も実数列となる。 これは、離散フーリエ変換 (DFT: discrete Fourier transform) が、実数に対しても複素数を返す exp(ink) を使うため、実数列に対しても複素数列となるのと大きな違いである。なお、DFTも偶関数数列に対しては実係数を返す、つまりコサイン成分のみとなるが、DCTはy軸で折り返して偶関数化してDFTすることと等価であり、実際にそう計算することが多い。 DCTでは、係数が実数になる上、特定の成分への集中度があがる。JPEGなどの画像圧縮、AACやMP3、ATRACといった音声圧縮、デジタルフィルタ等広い範囲で用いられている。 逆変換を逆離散コサイン変換(英: inverse discrete cosine transform (IDCT))と呼ぶ。 DCTには標準的な方法が8通りあり、そのうち4つがふつうに用いられる。最も一般的な方法は type-II DCT であり、単にDCTと呼んだ場合これを指すことが多い(以下DCT-II)。同様に、DCT-IIの逆変換である type-III DCT は単に逆DCT (inverse DCT) ないしIDCTと呼ばれることが多い。 DCTに関連する変換法が二つある。一つは離散サイン変換 DCT、特にDCT-IIは信号・画像処理にしばしば用いられる。特に不可逆圧縮に頻用されるが、これはDCTの持つ強力な「エネルギー圧縮」特性による。DCTで変換すると、情報が少数の低周波成分に集中する傾向が生まれ、マルコフ過程の制限に基づく信号について、非相関成分の検出に最適であるKarhunen-Loeve変換 たとえばDCTはJPEG、MJPEG、MPEG、DV等の画像圧縮に用いられる。これらの画像圧縮では、N × N のブロックに2次元DCT-IIを行い、その結果を量子化し、エントロピー圧縮
概要
種類
応用
音声圧縮に用いられるMDCT、AAC、Vorbis、MP3も関連した変換法である。
DCTは、偏微分方程式をスペクトル法で解くときにも広く使われる。その場合、配列の両端での境界条件の偶奇性に対応して、異なるDCTの変種が使われる。
DCTはまた、チェビシェフ多項式とも密接に関係しており、高速DCT算法(下記)はクレーンショー・カーチス数値積分則のような、任意の関数についてのチェビシェフ近似に用いられる。 フーリエ変換やそれに類似の変換(以下、類フーリエ変換とよぶ)のように、離散コサイン変換 (DCT) も関数あるいは信号を異なる周波数と振幅をもつ三角関数の和として表現する。また、DCTは、離散フーリエ変換 (DFT) と同じく、離散的なデータ点からなる有限の関数に対して施される。一見してそれとわかるDCTとDFTとの違いはDCTがコサイン(余弦)関数のみを使うのに対してDFTがコサインとサイン(正弦)関数の両方を(複素数の指数関数の形式で)使うという点である。しかし、この見かけの違いはもっと本質的な違いの帰結でしかない。すなわち、DCTとDFTあるいは他の関連する変換は境界条件において異なっているということである。 有限の定義域をもつ関数に施される類フーリエ変換、すなわちDFTやDCTやフーリエ級数は、暗黙のうちにその定義域の外部に関数を「拡張」して定義しているのだと考えることができる。つまり、ある関数 f(x) を一旦三角関数の和として表現してしまうと、任意の x に対し、それがたとえ元の関数 f(x) が定義されていない x であったとしても、その x におけるその三角関数の和を計算できる。DFTやフーリエ級数では元の関数の周期的な拡張がなされていると考えることができる。DCTでは、(離散的でない)コサイン変換
非形式的概説
しかしながら、DCTは「有限」で「離散的」な数列に対して施されるものであるから、連続なコサイン変換にはない2つの微妙な問題が引き起こされる。まず、有限の点で定義された関数は定義域に左端と右端(すなわち最小の添字と最大の添字)とをもつので、その両方それぞれで偶対称であるか奇対称であるかを指定しなければならない。次に、関数の定義域は離散的であるので、どの位置に関して関数が偶/奇対称であるのかを指定しなければならない。例えば、abcd という均等に離れた4つの点の列を考えてみよう。そして例えば、左の境界で偶対称であると指定したとしよう。このときどの位置で対称なのかという微妙な相違が生ずる。すなわち、データは点 a に関して偶対称であって偶関数への拡張は dcbabcd なのだろうか、それともデータは a とその前の点との中間点に関して偶対称であって拡張は dcbaabcd であるのか(a が繰り返すのか)?