1974 - DCT 離散餘弦轉換#
案件摘要#
1974 年,Nasir Ahmed 提出離散餘弦轉換(DCT)。之後它成為幾乎所有影音壓縮標準(JPEG、MPEG、H.26x)的心臟——數位影音之所以能塞進有限的頻寬與儲存,DCT 是最大功臣。
前因#
- 數位影音的原始資料量驚人:未壓縮的 NTSC 影像約 100 Mbps,一小時節目數十 GB——1970 年代的儲存與網路完全無法負荷。
- 取樣定理解決了「怎麼數位化」,但沒解決「怎麼壓縮」。需要的壓縮必須利用影像本身的統計特性:相鄰像素高度相關。
線索與推理#
線索一:能量集中#
影像 \(f(x,y)\) 切成 8×8 區塊,做二維 DCT:
\[ F(u,v) = \frac{1}{4}C(u)C(v)\sum_{x=0}^{7}\sum_{y=0}^{7} f(x,y)\cos\frac{(2x+1)u\pi}{16}\cos\frac{(2y+1)v\pi}{16} \]
DCT 把影像從「空間域」轉到「頻率域」:自然影像的能量集中在低頻係數(左上角),高頻係數大多接近零——丟掉高頻,人眼看不出差別。DCT 近似 KLT(Karhunen–Loève 轉換)在強相關訊號下的最佳能量集中性,但計算遠比 KLT 簡單。
線索二:量化#
對 DCT 係數除以量化表再取整:
\[ \hat F(u,v) = \mathrm{round}\!\left(\frac{F(u,v)}{Q(u,v)}\right) \]
量化表對高頻係數用較大的量化步階(除得兇)——這是有損壓縮的核心:失真被集中在人眼不敏感的高頻。亮度與色度可用不同量化表(色度壓得更兇,沿襲 NTSC 的感知壓縮傳統)。
線索三:壓縮管線#
DCT 之後接上之字形掃描(zigzag)、遊程編碼(RLE)、熵編碼(Huffman),構成 JPEG/MPEG 的標準管線:
\[ \text{區塊} \to \text{DCT} \to \text{量化} \to \text{zigzag} \to \text{熵編碼} \]
Python 實作:DCT 能量集中示範#
import numpy as np
from scipy.fftpack import dct, idct
block = np.random.rand(8, 8) # 平滑影像區塊
F = dct(dct(block, axis=0, norm='ortho'), axis=1, norm='ortho')
F[4:, :] = 0; F[:, 4:] = 0 # 丟掉高頻
recon = idct(idct(F, axis=0, norm='ortho'), axis=1, norm='ortho')
後果#
- 1992 年 JPEG(靜態影像)、1993 年 MPEG-1、之後所有 H.26x 標準皆以 DCT 為核心。
- 2013 年 HEVC 與 2018 年 AV1 改用更大區塊(16/32/64)與變換組合,但仍是 DCT 家族的延伸。
- Ahmed 的論文當年被拒稿一次——之後成為工程史上引用次數最高的論文之一。