第五篇 · 第12章
第12.1節 離散餘弦變換(DCT)晶片:將影像從「空間域」轉為「頻率域」的硬體運算#
從傅立葉到 Ahmed 的洞察#
1974 年,在堪薩斯州立大學任職的印度裔學者納西爾·艾哈邁德(Nasir Ahmed)發表了離散餘弦變換(Discrete Cosine Transform, DCT)。他的想法源自一個樸素的觀察:影像中的相鄰像素高度相關,而 DCT 恰好能將這種相關性「化為己用」——它等價於 DFT 的實部再加上邊界鏡射延拓,因此能量集中能力超過任何已知實數變換,被文獻稱為「接近 K-L 變換」(Karhunen-Loève Transform,統計上最佳但無法算的變換)。艾哈邁德當年並未申請專利,他說:「我只是想讓它被廣泛使用。」這個決定成就了人類史上被使用次數最多的影像數學。
為什麼影像可以被「壓縮」?#
人眼對低頻亮度變化敏感、對高頻紋理與色度細節不敏感(對比敏感度函數 CSF 的生理事實)。一張 8×8 的自然影像區塊中,絕大多數能量集中在左上角的低頻係數;DCT 把空間域的 64 個相關像素,變換為頻率域的 64 個大多接近零的係數——「壓縮」不是刪掉資料,而是在感知不敏感處粗略量化。
DCT-II 的正向變換(以 8×8 區塊為單位)為:
其中 \(C(0) = \frac{1}{\sqrt{2}}\),\(C(k)=1\)(\(k>0\))。反變換形式對稱。這 64 個餘弦基底函數(從全平面的直流到對角高頻條紋)是固定的,因此 64 個係數的乘法可以預先排列成常數矩陣乘法,硬體只需乘法器陣列與加法樹,不必任何通用運算。
JPEG 編碼管線#
JPEG 於 1992 年由 ISO/IEC JTC1 與 ITU-T(原 CCITT)共同制定為 ISO/IEC 10918-1 / ITU-T T.81。標準的誕生是一場「最佳提案競賽」:1987 年 ISO 徵集演算法,比較了 DCT、DPCM、自適應變換與向量量化後,DCT 勝出。整個編碼管線如下:
flowchart LR
RGB[RGB 像素] --> CSC[色彩空間轉換<br/>YCbCr 4:2:0 下取樣]
CSC --> B8[切成 8×8 區塊]
B8 --> FDCT[2D DCT-II<br/>64 係數]
FDCT --> Q[量化<br/>除以量化表 Q_uv]
Q --> ZZ[之字形掃描<br/>零係數集中成串]
ZZ --> RLE[行程編碼 RLE]
RLE --> ENT[霍夫曼編碼<br/>(預設表可內建 ROM)]
ENT --> BS[位元流輸出]三個關鍵硬體設計:
- 8×8 區塊:區塊太小(如 4×4)則區塊效應明顯,太大(如 16×16)則記憶體與延遲暴增,8×8 是 1990 年代 SRAM 面積的甜蜜點;
- 量化表:\(Q_{uv}\) 由心理視覺實驗訂出(亮度表與色度表各一張,存於晶片 ROM),例如亮度表中低頻量化步長 16、最高頻可達 121。量化是 JPEG 唯一有損的步驟,除法以移位與乘法近似實現;
- 之字形掃描(zigzag):把 8×8 係數矩陣按對角線順序展平成一維,使量化後的長串零落在序列尾端,後續行程編碼只需記錄「跳過幾個零」。
專用晶片的年代:DCT 有了自己的積體電路#
1990 年前後,富士通、LSI Logic、C-Cube(後來的 MPEG 晶片先驅)都推出單功能 DCT 晶片:輸入 8×8 像素,輸出 64 個係數,時脈約 30–80 MHz。由於二維 DCT 可拆成兩次一維 DCT(行變換→轉置 RAM→列變換),硬體上常見「行變換器+轉置記憶體+列變換器」的三段架構,一維部分再以 Loeffler-Ligtenberg-Moshovitz 的蝶形快速演算法實現,把每區塊運算量從 1,024 次乘法降到 144 次。這是「演算法—架構共同設計」的教科書範例:演算法的規整性直接轉化為矽面的規整性。
前因後果:從 JPEG 到 MPEG 的家譜#
JPEG 的成功讓 MPEG(ISO/IEC JTC1 SC29 WG11,1988 年成立)直接繼承了整套工具箱:MPEG-1(1993)的幀內編碼就是 JPEG 的 DCT+量化+霍夫曼;MPEG-2(1995)成為 DVD 與數位電視的底層;MPEG-4 Part 2(1999)引入物件編碼;H.264/AVC(2003,ITU-T VCEG 與 ISO MPEG 聯合組 JVT 制定)以整數變換取代浮點 DCT、加入 CABAC 熵編碼,但「區塊變換+量化+熵編碼」的骨架不變。標準組織的 FRAND(合理且無歧視)授權制度讓數百家專利權人共享授權金池,也讓 H.264 的專利地圖成為後來 Google 推動免權利金 VP8/WebM、開放媒體聯盟 AV1 的直接動因——壓縮數學的「公共財」與「專利池」之間的張力延續至今。
| 標準 | 年份 | 變換 | 典型位元率 | 主要應用 |
|---|---|---|---|---|
| JPEG | 1992 | 8×8 DCT | 0.25–1 bpp | 靜態影像 |
| MPEG-1 | 1993 | 8×8 DCT | 1.5 Mbps | VCD |
| MPEG-2 | 1995 | 8×8 DCT | 4–10 Mbps | DVD、數位電視 |
| MPEG-4 Part 2 | 1999 | 8×8 DCT | 1–4 Mbps | 網路視訊 |
| H.264/AVC | 2003 | 整數 4×4/8×8 | 0.5–4 Mbps | 藍光、串流 |
延伸思考#
- JPEG 的 8×8 區塊在低碼率下產生「馬賽克」偽影;若當年選 16×16,今日的手機記憶體與 CPU 快取設計會有何不同?
- 艾哈邁德未申請專利的選擇,對照 H.264 專利池每年數億美元的授權金——基礎數學的公共性該如何界定?
- 神經網路取代 DCT 的呼聲不斷,但 JPEG 至今仍是網路上 70% 的影像格式;一個變換能活過 50 年的條件是什麼?