視頻壓縮技術(shù)解析
6.1.1 視頻信號(hào)壓縮的可能性 視頻數(shù)據(jù)中存在著大量的冗余, 即圖像的各像素?cái)?shù)據(jù)之間存在極強(qiáng)的相關(guān)性。 利用這些相關(guān)性, 一部分像素的數(shù)據(jù)可以由另一部分像素的數(shù)據(jù)推導(dǎo)出來, 結(jié)果視頻數(shù)據(jù)量能極大地壓縮, 有利于傳輸和存儲(chǔ)。 視頻數(shù)據(jù)主要存在以下形式的冗余。 1. 空間冗余 2. 時(shí)間冗余 3. 結(jié)構(gòu)冗余 6. 圖像區(qū)域的相同性冗余 6.1.2 視頻信號(hào)的數(shù)字化和壓縮 圖 6-1 電視信號(hào)的數(shù)字化和復(fù)原 3. 均勻量化和非均勻量化 非均勻量化有兩種方法, 一是把非線性處理放在編碼器前和解碼器后的模擬部分, 編、 解碼仍采用均勻量化, 在均勻量化編碼器之前, 對(duì)輸入信號(hào)進(jìn)行壓縮, 這樣等效于對(duì)大信號(hào)進(jìn)行粗量化, 小信號(hào)進(jìn)行細(xì)量化; 在均勻量化解碼器之后, 再進(jìn)行擴(kuò)張, 以恢復(fù)原信號(hào)。 另一種方法是直接采用非均勻量化器, 輸入信號(hào)大時(shí)進(jìn)行粗量化(量化間距大) , 輸入信號(hào)小時(shí)細(xì)量化(量化間距小)。 也有采用若干個(gè)量化間距不等的均勻量化器, 當(dāng)輸入信號(hào)超過某一電平時(shí)進(jìn)入粗間距均勻量化器, 低于某一電平時(shí)進(jìn)入細(xì)間距量化器, 稱為準(zhǔn)瞬時(shí)壓擴(kuò)方式。 通常用Q表示量化, 用Q-1表示反量化。 量化過程相當(dāng)于由輸入值找到它所在的區(qū)間號(hào), 反量化過程相當(dāng)于由量化區(qū)間號(hào)得到對(duì)應(yīng)的量化電平值。 量化區(qū)間總數(shù)遠(yuǎn)遠(yuǎn)少于輸入值的總數(shù), 所以量化能實(shí)現(xiàn)數(shù)據(jù)壓縮。 很明顯, 反量化后并不能保證得到原來的值, 因此量化過程是一個(gè)不可逆過程, 用量化的方法來進(jìn)行壓縮編碼是一種非信息保持型編碼。 通常這兩個(gè)過程均可用查表方法實(shí)現(xiàn), 量化過程在編碼端完成, 而反量化過程則在解碼端完成。 對(duì)量化區(qū)間標(biāo)號(hào)(量化值)的編碼一般采用等長(zhǎng)編碼方法。 當(dāng)量化分層總數(shù)為K時(shí), 經(jīng)過量化壓縮后的二進(jìn)制數(shù)碼率為lbK比特/量值。 在一些要求較高的場(chǎng)合, 可采用可變字長(zhǎng)編碼如哈夫曼編碼或算術(shù)編碼來進(jìn)一步提高編碼效率。 BT.601建議采用了對(duì)亮度信號(hào)和兩個(gè)色差信號(hào)分別編碼的分量編碼方式, 對(duì)不同制式的信號(hào)采用相同的取樣頻率13.5 MHz, 與任何制式的彩色副載波頻率無關(guān), 對(duì)亮度信號(hào)Y的取樣頻率為13.5 MHz。 由于色度信號(hào)的帶寬遠(yuǎn)比亮度信號(hào)的帶寬窄, 對(duì)色度信號(hào)U和V的取樣頻率為6.75 MHz。 每個(gè)數(shù)字有效行分別有720個(gè)亮度取樣點(diǎn)和360×2個(gè)色差信號(hào)取樣點(diǎn)。 對(duì)每個(gè)分量的取樣點(diǎn)都是均勻量化, 對(duì)每個(gè)取樣進(jìn)行8比特精度的PCM編碼。 1. 霍夫曼(Huffman)編碼 圖 6-2 霍夫曼(Huffman)編碼 假設(shè)信源由4個(gè)符號(hào)S1、 S2、 S3和S4組成, 其概率模型如表6-1所示。 把各符號(hào)出現(xiàn)的概率表示在如圖6-3所示的單位概率區(qū)間之中, 區(qū)間的寬度代表概率值的大小, 各符號(hào)所對(duì)應(yīng)的子區(qū)間的邊界值, 實(shí)際上是從左到右各符號(hào)的累積概率。 在算術(shù)編碼中通常采用二進(jìn)制的小數(shù)來表示概率, 每個(gè)符號(hào)所對(duì)應(yīng)的概率區(qū)間都是半開區(qū)間, 如S1對(duì)應(yīng)[0, 0.001), S2對(duì)應(yīng)[0.001, 0.011)。 算術(shù)編碼所產(chǎn)生的碼字實(shí)際上是一個(gè)二進(jìn)制小數(shù)值的指針, 該指針指向所編的符號(hào)所對(duì)應(yīng)的概率區(qū)間。 表6-1 信源概率模型和算術(shù)編碼過程 圖 6-3 算術(shù)編碼過程示意圖 若將符號(hào)序列S3S3S2S4進(jìn)行算術(shù)編碼, 序列的第一個(gè)符號(hào)為S3, 我們用指向圖6-3中第3個(gè)子區(qū)間的指針來代表這個(gè)符號(hào), 由此得到碼字0.011。 后續(xù)的編碼將在前面編碼指向的子區(qū)間內(nèi)進(jìn)行。 將[0.011, 0.111)區(qū)間再按符號(hào)的概率值劃分成4份, 對(duì)第二個(gè)符號(hào)S3, 指針指向0.1001,碼 字串變?yōu)?.1001。 然后S3所對(duì)應(yīng)的子區(qū)間又被劃分為4份, 開始對(duì)第3個(gè)符號(hào)進(jìn)行編碼……。 算術(shù)編碼的基本法則如下: 根據(jù)上述法則, 對(duì)序列S3S3S2S4進(jìn)行算術(shù)編碼的過程如下: 3. 游程編碼 6.1.5 預(yù)測(cè)編碼和變換編碼 利用幀內(nèi)相關(guān)性(像素間、 行間的相關(guān))的DPCM稱為幀內(nèi)預(yù)測(cè)編碼。 如果對(duì)亮度信號(hào)和兩個(gè)色差信號(hào)分別進(jìn)行DPCM編碼, 對(duì)亮度信號(hào)采用較高的取樣率和較多位數(shù)編碼, 對(duì)色差信號(hào)用較低的取樣率和較少位數(shù)編碼, 構(gòu)成時(shí)分復(fù)合信號(hào)后再進(jìn)行DPCM編碼, 這樣做使總碼率更低。 利用幀間相關(guān)性(鄰近幀的時(shí)間相關(guān)性)的DPCM被稱為幀間預(yù)測(cè)編碼, 因幀間相關(guān)性大于幀內(nèi)相關(guān)性, 其編碼效率更高。 若把這兩種DPCM組合起來, 再配上變字長(zhǎng)編碼技術(shù), 能取得較好的壓縮效果。 DPCM是圖像編碼技術(shù)中研究得最早, 且應(yīng)用最廣的一種方法, 它的一個(gè)重要的特點(diǎn)是算法簡(jiǎn)單, 易于硬件實(shí)現(xiàn)。 圖6-4(a)是它的示意圖, 編碼單元主要包括線性預(yù)測(cè)器和量化器兩部分。 圖 6-4 DPCM原理 DPCM編碼性能主要取決于預(yù)測(cè)器的設(shè)計(jì), 預(yù)測(cè)器設(shè)計(jì)要確定預(yù)測(cè)器的階數(shù)N以及各預(yù)測(cè)系數(shù)。 圖6-5是一個(gè)4階預(yù)測(cè)器的示意圖, 圖6-5(a)表示預(yù)測(cè)器所用的輸入像素和被預(yù)測(cè)像素之間的位置關(guān)系, 圖6-5(b)表示預(yù)測(cè)器的結(jié)構(gòu)。
視頻圖像在水平方向相鄰像素之間、 垂直方向相鄰像素之間的變化一般都很小, 存在著極強(qiáng)的空間相關(guān)性。 特別是同一景物各點(diǎn)的灰度和顏色之間往往存在著空間連貫性, 從而產(chǎn)生了空間冗余, 常稱為幀內(nèi)相關(guān)性。
在相鄰場(chǎng)或相鄰幀的對(duì)應(yīng)像素之間, 亮度和色度信息存在著極強(qiáng)的相關(guān)性。 當(dāng)前幀圖像往往具有與前、 后兩幀圖像相同的背景和移動(dòng)物體, 只不過移動(dòng)物體所在的空間位置略有不同, 對(duì)大多數(shù)像素來說, 亮度和色度信息是基本相同的, 稱為幀間相關(guān)性或時(shí)間相關(guān)性。
在有些圖像的紋理區(qū), 圖像的像素值存在著明顯的分布模式。 如方格狀的地板圖案等。 已知分布模式, 可以通過某一過程生成圖像, 稱為結(jié)構(gòu)冗余。
4. 知識(shí)冗余
有些圖像與某些知識(shí)有相當(dāng)大的相關(guān)性。 如人臉的圖像有固定的結(jié)構(gòu), 嘴的上方有鼻子, 鼻子的上方有眼睛, 鼻子位于臉部圖像的中線上。 這類規(guī)律性的結(jié)構(gòu)可由先驗(yàn)知識(shí)得到, 此類冗余稱為知識(shí)冗余。
5. 視覺冗余
人眼具有視覺非均勻特性, 對(duì)視覺不敏感的信息可以適當(dāng)?shù)厣釛墶?在記錄原始的圖像數(shù)據(jù)時(shí), 通常假定視覺系統(tǒng)是線性的和均勻的, 對(duì)視覺敏感和不敏感的部分同等對(duì)待, 從而產(chǎn)生了比理想編碼(即把視覺敏感和不敏感的部分區(qū)分開來編碼)更多的數(shù)據(jù), 這就是視覺冗余。 人眼對(duì)圖像細(xì)節(jié)、 幅度變化和圖像的運(yùn)動(dòng)并非同時(shí)具有最高的分辨能力。
人眼視覺對(duì)圖像的空間分解力和時(shí)間分解力的要求具有交換性, 當(dāng)對(duì)一方要求較高時(shí), 對(duì)另一方的要求就較低。 根據(jù)這個(gè)特點(diǎn), 可以采用運(yùn)動(dòng)檢測(cè)自適應(yīng)技術(shù), 對(duì)靜止圖像或慢運(yùn)動(dòng)圖像降低其時(shí)間軸抽樣頻率, 例如每?jī)蓭瑐魉鸵粠?對(duì)快速運(yùn)動(dòng)圖像降低其空間抽樣頻率。
另外, 人眼視覺對(duì)圖像的空間、 時(shí)間分解力的要求與對(duì)幅度分解力的要求也具有交換性, 對(duì)圖像的幅度誤差存在一個(gè)隨圖像內(nèi)容而變的可覺察門限, 低于門限的幅度誤差不被察覺, 在圖像的空間邊緣(輪廓)或時(shí)間邊緣(景物突變瞬間)附近, 可覺察門限比遠(yuǎn)離邊緣處增大3~4倍, 這就是視覺掩蓋效應(yīng)。
根據(jù)這個(gè)特點(diǎn), 可以采用邊緣檢測(cè)自適應(yīng)技術(shù), 對(duì)于圖像的平緩區(qū)或正交變換后代表圖像低頻成分的系數(shù)細(xì)量化, 對(duì)圖像輪廓附近或正交變換后代表圖像高頻成分的系數(shù)粗量化; 當(dāng)由于景物的快速運(yùn)動(dòng)而使幀間預(yù)測(cè)編碼碼率高于正常值時(shí)進(jìn)行粗量化, 反之則進(jìn)行細(xì)量化。 在量化中, 盡量使每種情況下所產(chǎn)生的幅度誤差剛好處于可覺察門限之下, 這樣能實(shí)現(xiàn)較高的數(shù)據(jù)壓縮率而主觀評(píng)價(jià)不變。
在圖像中的兩個(gè)或多個(gè)區(qū)域所對(duì)應(yīng)的所有像素值相同或相近, 從而產(chǎn)生的數(shù)據(jù)重復(fù)性存儲(chǔ), 這就是圖像區(qū)域的相似性冗余。 在這種情況下, 記錄了一個(gè)區(qū)域中各像素的顏色值, 與其相同或相近的區(qū)域就不再記錄各像素的值。 矢量量化方法就是針對(duì)這種冗余圖像的壓縮方法。
7. 紋理的統(tǒng)計(jì)冗余
有些圖像紋理盡管不嚴(yán)格服從某一分布規(guī)律, 但是在統(tǒng)計(jì)的意義上服從該規(guī)律, 利用這種性質(zhì)也可以減少表示圖像的數(shù)據(jù)量, 稱為紋理的統(tǒng)計(jì)冗余。
電視圖像信號(hào)數(shù)據(jù)存在的信息冗余為視頻壓縮編碼提供了可能。
模擬電視信號(hào)(包括視頻和音頻)通過取樣、 量化后編碼 為二進(jìn)制數(shù)字信號(hào)的過程稱為模數(shù)變換(A/D變換)或脈沖編碼調(diào)制(PCM, Pulse Coding Modulation), 所得到的信號(hào)也稱為PCM信號(hào), 其過程可用圖6-1(a)表示。 若取樣頻率等于fs、 用n比特量化, 則PCM信號(hào)的碼率為nfs(比特/s)。 PCM編碼既可以對(duì)彩色全電視信號(hào)直接進(jìn)行, 也可以對(duì)亮度信號(hào)和兩個(gè)色差信號(hào)分別進(jìn)行, 前者稱為全信號(hào)編碼, 后者稱為分量編碼。
PCM信號(hào)經(jīng)解碼和插入濾波恢復(fù)為模擬信號(hào), 如圖6-1(b)所示, 解碼是編碼的逆過程, 插入濾波是把解碼后的信號(hào)插補(bǔ)為平滑、 連續(xù)的模擬信號(hào)。 這兩個(gè)步驟合稱為數(shù)模變換(D/A變換)或PCM解碼。
(a) A/D變換; (b) D/A變換
1. 奈奎斯特取樣定理
理想取樣時(shí), 只要取樣頻率大于或等于模擬信號(hào)中最高頻率的兩倍, 就可以不失真地恢復(fù)模擬信號(hào), 稱為奈奎斯特取樣定理。 模擬信號(hào)中最高頻率的兩倍稱為折疊頻率。
2. 亞奈奎斯特取樣
按取樣定理, 若取樣頻率fs小于模擬信號(hào)最高頻率fmax的2倍會(huì)產(chǎn)生混疊失真, 但若巧妙地選擇取樣頻率, 令取樣后頻譜中的混疊分量落在色度分量和亮度分量之間, 就可用梳狀濾波器去掉混疊成分。
在輸入信號(hào)的動(dòng)態(tài)范圍內(nèi), 量化間隔幅度都相等的量化稱為均勻量化或線性量化。 對(duì)于量化間距固定的均勻量化, 信噪比隨輸入信號(hào)幅度的增加而增加, 在強(qiáng)信號(hào)時(shí)固然可把噪波淹沒掉, 在弱信號(hào)時(shí), 噪波的干擾就十分顯著。
為改善弱信號(hào)時(shí)的信噪比, 量化間距應(yīng)隨輸入信號(hào)幅度而變化, 大信號(hào)時(shí)進(jìn)行粗量化, 小信號(hào)時(shí)進(jìn)行細(xì)量化, 也就是采用非均勻量化(或稱非線性量化)。
6.1.3 ITU-R BT.601分量數(shù)字系統(tǒng)
數(shù)字視頻信號(hào)是將模擬視頻信號(hào)經(jīng)過取樣、 量化和編碼后形成的。 模擬電視有PAL、 NTSC等制式, 必然會(huì)形成不同制式的數(shù)字視頻信號(hào), 不便于國(guó)際數(shù)字視頻信號(hào)的互通。 1982年10月, 國(guó)際無線電咨詢委員會(huì)(CCIR, Consultative Committee for International Radio)通過了第一個(gè)關(guān)于演播室彩色電視信號(hào)數(shù)字編碼的建議, 1993年變更為ITU-R(國(guó)際電聯(lián)無線電通信部分, International Telecommunications Union-Radio communications Sector)BT.601分量數(shù)字系統(tǒng)建議。
這幾個(gè)參數(shù)對(duì)525行、 60場(chǎng)/秒和625行50場(chǎng)/秒的制式都是相同的。 有效取樣點(diǎn)是指只有行、 場(chǎng)掃描正程的樣點(diǎn)有效, 逆程的樣點(diǎn)不在PCM編碼的范圍內(nèi)。 因?yàn)樵跀?shù)字化的視頻信號(hào)中, 不再需要行、 場(chǎng)同步信號(hào)和消隱信號(hào), 只要有行、 場(chǎng)(幀)的起始位置即可。 例如, 對(duì)于PAL制, 傳輸所有的樣點(diǎn)數(shù)據(jù), 大約需要200 Mb/s的傳輸速率, 傳輸有效樣點(diǎn)只需要160 Mb/s左右的速率。
色度信號(hào)的取樣率是亮度信號(hào)取樣率的一半, 常稱作4∶2∶2格式, 可以理解為每一行里的Y、 U、 V的樣點(diǎn)數(shù)之比為4∶2∶2。
6.1.4 熵編碼
熵編碼(Entropy Coding)是一類無損編碼, 因編碼后的平均碼長(zhǎng)接近信源的熵而得名。 熵編碼多用可變字長(zhǎng)編碼(VLC, Variable Length Coding)實(shí)現(xiàn)。 其基本原理是對(duì)信源中出現(xiàn)概率大的符號(hào)賦以短碼, 對(duì)出現(xiàn)概率小的符號(hào)賦以長(zhǎng)碼, 從而在統(tǒng)計(jì)上獲得較短的平均碼長(zhǎng)。 所編的碼應(yīng)是即時(shí)可譯碼, 某一個(gè)碼不會(huì)是另一個(gè)碼的前綴, 各個(gè)碼之間無需附加信息便可自然分開。
霍夫曼(Huffman)編碼是一種可變長(zhǎng)編碼, 編碼方法如圖6-2所示。
(1) 將輸入信號(hào)符號(hào)以出現(xiàn)概率由大至小為序排成一列。
(2) 將兩處最小概率的符號(hào)相加合成為一個(gè)新概率, 再按出現(xiàn)概率的大小排序。
(3) 重復(fù)步驟(2), 直至最終只剩兩個(gè)概率。
(4) 編碼從最后一步出發(fā)逐步向前進(jìn)行, 概率大的符號(hào)賦予“0”碼, 另一個(gè)概率賦予“1”碼, 直至到達(dá)最初的概率排列為止。
2. 算術(shù)編碼
霍夫曼編碼的每個(gè)代碼都要使用一個(gè)整數(shù)位, 如果一個(gè)符號(hào)只需要用2.5位就能表示, 但在霍夫曼編碼中卻必須用3個(gè)符號(hào)來表示, 因此它的效率較低。 與其相比, 算術(shù)編碼并不是為每個(gè)符號(hào)產(chǎn)生一個(gè)單獨(dú)的代碼, 而是使整條信息共用一個(gè)代碼, 增加到信息上的每個(gè)新符號(hào)都遞增地修改輸出代碼。
(1) 初始狀態(tài): 編碼點(diǎn)(指針?biāo)柑?C0=0, 區(qū)間寬度A0=1。
(2) 新編碼點(diǎn): Ci= Ci-1 + Ai-1×Pi。
式中, Ci-1是原編碼點(diǎn); Ai-1是原區(qū)間寬度;
Pi所編符號(hào)對(duì)應(yīng)的累積概率。
新區(qū)間寬度Ai= Ai-1×pi
式中, pi為所編符號(hào)對(duì)應(yīng)的概率。
第一個(gè)符號(hào)S3:
C1=C0+A0×P1=0+1×0.011=0.011
A1=A0×p1=1×0.1=0.1
[0.011,0.111]
第二個(gè)符號(hào)S3: C2=C1+A1×P2
=0.011+0.1×0.011=0.1001
A2=A1×p2=0.1×0.1=0.01
[0.1001,0.1101]
第三個(gè)符號(hào)S2:
C3=C2+A2×P3=0.1001+0.01×0.001=0.10011
A3=A2×p3=0.01×0.01=0.0001
[0.10011,0.10101]
第四個(gè)符號(hào)S4: C4=C3+A3×P4=0.10011+0.0001×0.111=0.1010011
A4=A3×p4=0.0001×0.001=0.0000001
[0.1010011,0.10101)
游程編碼(RLC, Run Length Coding)是一種十分簡(jiǎn)單的壓縮方法, 它將數(shù)據(jù)流中連續(xù)出現(xiàn)的字符用單一的記號(hào)來表示。 例如, 字符串5310000000000110000000012000000000000可以壓縮為5310-10110-08120-12, 其中, “-”后面兩個(gè)數(shù)字是“-”前面數(shù)字的連續(xù)個(gè)數(shù)。 游程編碼的壓縮率不高, 但編碼、 解碼的速度快, 仍被得到廣泛的應(yīng)用, 特別是在變換編碼后再進(jìn)行游程編碼, 有很好的效果。
1. DPCM原理
基于圖像的統(tǒng)計(jì)特性進(jìn)行數(shù)據(jù)壓縮的基本方法就是預(yù)測(cè)編碼。 它是利用圖像信號(hào)的空間或時(shí)間相關(guān)性, 用已傳輸?shù)南袼貙?duì)當(dāng)前的像素進(jìn)行預(yù)測(cè), 然后對(duì)預(yù)測(cè)值與真實(shí)值的差——預(yù)測(cè)誤差進(jìn)行編碼處理和傳輸。 目前用得較多的是線性預(yù)測(cè)方法, 全稱為差值脈沖編碼調(diào)制(DPCM, Differential Pulse Code Modulation), 簡(jiǎn)稱為DPCM。
編碼器的輸出不是圖像像素的樣值f(m, n), 而是該樣值與預(yù)測(cè)值g(m, n)之間的差值, 即預(yù)測(cè)誤差e(m, n)的量化值E(m, n)。 根據(jù)圖像信號(hào)統(tǒng)計(jì)特性的分析, 給出一組恰當(dāng)?shù)念A(yù)測(cè)系數(shù), 使預(yù)測(cè)誤差主要分布在“0”附近, 經(jīng)非均勻量化, 采用較少的量化分層, 圖像數(shù)據(jù)得到壓縮。 而量化噪聲又不易被人眼所覺察, 圖像的主觀質(zhì)量并不明顯下降。 圖6-4(b)是DPCM解碼器, 其原理和編碼器剛好相反。
(a) DPCM編碼器; (b) DPCM解碼器