妻夫木で学ぶDCT

某大学の某先生が「妻夫木夫妻」→「DCT-I」とつぶやいたのをパクってにインスパイアされて、DCT全8種の違いについて解説することを思い立ちました。K先生、ありがとうございます。m(_ _)m

DCTは全部で8種類

DCT(離散コサイン変換)は実は全部で8種類あります。DCTは、ある有限長シーケンスを交互反転させながら周期信号へと拡張し、その信号に対して離散フーリエ変換(Discrete Fourier Transform; DFT)を適用することと等価です。交互反転させることで一周期分が偶対称となり、結果的にコサイン成分だけが残ることからDCTが導かれます。DFTと比べてサイン成分を持たず計算コストが少なく済むため、画像圧縮のJPEGをはじめとした様々な場面で大活躍しています。ただ、この交互反転のやり方にいくつかのバリエーションがあり、その結果、DCT-I〜VIII(以後、1〜8で簡潔に表現します)の計8種類のパターンが存在します。これについて長さ3のシーケンス「妻夫木」を例として考えてみましょう。
DCT-1は「妻夫木夫妻夫木夫妻・・・」と拡張したものに相当します。一周期が「妻夫木夫」(つまぶきおっと)の周期信号になります。端要素である妻と木は1つだけです。
DCT-2は「妻夫木木夫妻妻夫木木夫妻・・・」としています。一周期は「妻夫木木夫妻」(つまぶきもくおづま)となり、端要素である妻と木が2つ連続します。
DCT-3はもっと複雑で符号反転(赤字)や0の挿入があり、「妻夫木0木夫妻夫木0木夫妻夫木0木夫妻夫木0木夫妻・・・」となります。
DCT-4も同様に符号反転があり「妻夫木木夫妻妻夫木木夫妻妻夫木木夫妻妻夫木木夫妻・・・」となります。
DCT-5は「妻夫木夫妻妻夫木夫妻・・・」と拡張し、一周期は「妻夫木夫妻」(つまぶきふさい)となり、妻2回で木1回です。
DCT-6では「妻夫木木夫妻夫木木夫妻・・・」と拡張し、一周期は「妻夫木木夫」(つまぶきもくお)となり、さっきと逆の妻1回で木2回です。
DCT-7,8は面倒なのでやりません。物好きな人だけやってください。
せっかくなんで長さ7のシーケンス「いたりあでもほ」でもやってみると拡張信号の一周期は以下の通り:DCT-1「イタリアでもホモで有田」、DCT-2「イタリアでもほホモでありたい」、DCT-5「イタリアでもホモでありたい」、DCT-6「イタリアでもほホモで有田」となります。符号反転のは省きました。DCT-5が一番美しいですね。

DCTが使われる場面

これらDCTはそれぞれに少々異なった特性があり様々な場面で活躍しています。DCT-2はJPEG圧縮に使われておりDCTとして最も有名です。DCT-3は、DCT-2の逆変換に対応しており、同様にJPEGの解凍時に使われています。DCT-4は音声圧縮のMP3に応用されていた気がします。DCT-1は変換行列中の値の数学的なシンプルさから様々な論文で見かけます。信号処理の分野ではこの4つが特によく知られており、それに比べてDCT-5,6,7,8はあまり有名ではなく、実際いくつかの文献では「あまり使われないが一応触れておく」的な枕詞とともに述べられていたりします。これはバタフライ演算が設計しにくく、計算コストの点でやや劣るためではないかと思われます。ただ、DCT-5についてはガウシアンフィルタ近似の際にはおいしい特長があることが明らかにされていたりもします(←自分の研究です)。これらの各DCTについての詳細は以下の文献に分かりやすくまとまっています。

  • Gilbert Strangy: "The Discrete Cosine Transform", SIAM Review, Vol. 41, No. 1, pp. 135–147 (1999).