本文介紹一下視頻壓縮編碼和音頻壓縮編碼的基本原理,。其實有關(guān)視頻和音頻編碼的原理的資料非常的多,,但是自己一直也沒有去歸納和總結(jié)一下,在這里簡單總結(jié)一下,,以作備忘,。
1.視頻編碼基本原理
(1)
視頻信號的冗余信息
以記錄數(shù)字視頻的YUV分量格式為例,YUV分別代表亮度與兩個色差信號,。例如對于現(xiàn)有的PAL制電視系統(tǒng),,其亮度信號采樣頻率為13.5MHz;
色度信號的頻帶通常為亮度信號的一半或更少,為6.75MHz或3.375MHz,。以4:2:2的采樣頻率為例,,Y信號采用13.5MHz,色度信號U和
V采用6.75MHz采樣,,采樣信號以8bit量化,,則可以計算出數(shù)字視頻的碼率為:
13.5*8 + 6.75*8 + 6.75*8= 216Mbit/s
如此大的數(shù)據(jù)量如果直接進行存儲或傳輸將會遇到很大困難,因此必須采用壓縮技術(shù)以減少碼率,。數(shù)字化后的視頻信號能進行壓縮主要依據(jù)兩個基本條件:
l
數(shù)據(jù)冗余,。例如如空間冗余、時間冗余,、結(jié)構(gòu)冗余,、信息熵冗余等,即圖像的各像素之間存在著很強的相關(guān)性,。消除這些冗余并不會導(dǎo)致信息損失,,屬于無損壓縮。
l
視覺冗余,。人眼的一些特性比如亮度辨別閾值,,視覺閾值,對亮度和色度的敏感度不同,,使得在編碼的時候引入適量的誤差,,也不會被察覺出來??梢岳萌搜鄣囊曈X特性,,以一定的客觀失真換取數(shù)據(jù)壓縮。這種壓縮屬于有損壓縮,。
數(shù)字視頻信號的壓縮正是基于上述兩種條件,,使得視頻數(shù)據(jù)量得以極大的壓縮,有利于傳輸和存儲,。一般的數(shù)字視頻壓縮編碼方法都是混合編碼,,即將變換編
碼,運動估計和運動補償,,以及熵編碼三種方式相結(jié)合來進行壓縮編碼,。通常使用變換編碼來消去除圖像的幀內(nèi)冗余,用運動估計和運動補償來去除圖像的幀間冗
余,,用熵編碼來進一步提高壓縮的效率,。下文簡單介紹這三種壓縮編碼方法。
(2)
壓縮編碼的方法
(a) 變換編碼
變換編碼的作用是將空間域描述的圖像信號變換到頻率域,,然后對變換后的系數(shù)進行編碼處理,。一般來說,圖像在空間上具有較強的相關(guān)性,變換到頻率域可以實現(xiàn)去相關(guān)和能量集中,。常用的正交變換有離散傅里葉變換,,離散余弦變換等等。數(shù)字視頻壓縮過程中應(yīng)用廣泛的是離散余弦變換,。
離散余弦變換簡稱為DCT變換。它可以將L*L的圖像塊從空間域變換為頻率域,。所以,,在基于DCT的圖像壓縮編碼過程中,首先需要將圖像分成互不重
疊的圖像塊,。假設(shè)一幀圖像的大小為1280*720,,首先將其以網(wǎng)格狀的形式分成160*90個尺寸為8*8的彼此沒有重疊的圖像塊,接下來才能對每個圖
像塊進行DCT變換,。
經(jīng)過分塊以后,,每個8*8點的圖像塊被送入DCT編碼器,將8*8的圖像塊從空間域變換為頻率域,。下圖給出一個實際8*8的圖像塊例子,,圖中的數(shù)字
代表了每個像素的亮度值。從圖上可以看出,,在這個圖像塊中各個像素亮度值比較均勻,,特別是相鄰像素亮度值變化不是很大,說明圖像信號具有很強的相關(guān)性,。
一個實際8*8圖像塊
下圖是上圖中圖像塊經(jīng)過DCT變換后的結(jié)果,。從圖中可以看出經(jīng)過DCT變換后,左上角的低頻系數(shù)集中了大量能量,,而右下角的高頻系數(shù)上的能量很小,。
圖像塊經(jīng)過DCT變換后的系數(shù)
信號經(jīng)過DCT變換后需要進行量化。由于人的眼睛對圖像的低頻特性比如物體的總體亮度之類的信息很敏感,,而對圖像中的高頻細(xì)節(jié)信息不敏感,,因此在傳
送過程中可以少傳或不傳送高頻信息,只傳送低頻部分,。量化過程通過對低頻區(qū)的系數(shù)進行細(xì)量化,,高頻區(qū)的系數(shù)進行粗量化,去除了人眼不敏感的高頻信息,,從而
降低信息傳送量,。因此,量化是一個有損壓縮的過程,,而且是視頻壓縮編碼中質(zhì)量損傷的主要原因,。
量化的過程可以用下面的公式表示:
其中FQ(u,v)表示經(jīng)過量化后的DCT系數(shù);F(u,v)表示量化前的DCT系數(shù);Q(u,v)表示量化加權(quán)矩陣,;q表示量化步長,;round表示歸整,即將輸出的值取為與之最接近的整數(shù)值,。
合理選擇量化系數(shù),,對變換后的圖像塊進行量化后的結(jié)果如圖所示。
量化后的DCT系數(shù)
DCT系數(shù)經(jīng)過量化之后大部分經(jīng)變?yōu)?,,而只有很少一部分系數(shù)為非零值,,此時只需將這些非0值進行壓縮編碼即可。
(b) 熵編碼
熵編碼是因編碼后的平均碼長接近信源熵值而得名,。熵編碼多用可變字長編碼(VLC,,Variable Length
Coding)實現(xiàn)。其基本原理是對信源中出現(xiàn)概率大的符號賦予短碼,,對于出現(xiàn)概率小的符號賦予長碼,,從而在統(tǒng)計上獲得較短的平均碼長??勺冏珠L編碼通常
有霍夫曼編碼,、算術(shù)編碼、游程編碼等,。其中游程編碼是一種十分簡單的壓縮方法,,它的壓縮效率不高,但編碼,、解碼速度快,,仍被得到廣泛的應(yīng)用,特別在變換編
碼之后使用游程編碼,,有很好的效果,。
首先要在量化器輸出直流系數(shù)后對緊跟其后的交流系數(shù)進行Z型掃描(如圖箭頭線所示)。Z型掃描將二維的量化系數(shù)轉(zhuǎn)換為一維的序列,,并在此基礎(chǔ)上進行游程編碼,。最后再對游程編碼后的數(shù)據(jù)進行另一種變長編碼,例如霍夫曼編碼,。通過這種變長編碼,,進一步提高編碼的效率。
(c) 運動估計和運動補償
運動估計(Motion Estimation)和運動補償(Motion
Compensation)是消除圖像序列時間方向相關(guān)性的有效手段,。上文介紹的DCT變換,、量化、熵編碼的方法是在一幀圖像的基礎(chǔ)上進行,,通過這些方法
可以消除圖像內(nèi)部各像素間在空間上的相關(guān)性,。實際上圖像信號除了空間上的相關(guān)性之外,,還有時間上的相關(guān)性。例如對于像新聞聯(lián)播這種背景靜止,,畫面主體運動
較小的數(shù)字視頻,,每一幅畫面之間的區(qū)別很小,畫面之間的相關(guān)性很大,。對于這種情況我們沒有必要對每一幀圖像單獨進行編碼,,而是可以只對相鄰視頻幀中變化的
部分進行編碼,從而進一步減小數(shù)據(jù)量,,這方面的工作是由運動估計和運動補償來實現(xiàn)的,。
運動估計技術(shù)一般將當(dāng)前的輸入圖像分割成若干彼此不相重疊的小圖像子塊,例如一幀圖像的大小為1280*720,,首先將其以網(wǎng)格狀的形式分成
40*45個尺寸為16*16的彼此沒有重疊的圖像塊,然后在前一圖像或者后一個圖像某個搜索窗口的范圍內(nèi)為每一個圖像塊尋找一個與之最為相似的圖像塊,。
這個搜尋的過程叫做運動估計,。通過計算最相似的圖像塊與該圖像塊之間的位置信息,可以得到一個運動矢量,。這樣在編碼過程中就可以將當(dāng)前圖像中的塊與參考圖
像運動矢量所指向的最相似的圖像塊相減,,得到一個殘差圖像塊,由于殘差圖像塊中的每個像素值很小,,所以在壓縮編碼中可以獲得更高的壓縮比,。這個相減過程叫
運動補償。
由于編碼過程中需要使用參考圖像來進行運動估計和運動補償,,因此參考圖像的選擇顯得很重要,。一般情況下編碼器的將輸入的每一幀圖像根據(jù)其參考圖像的
不同分成3種不同的類型:I(Intra)幀、B(Bidirection
prediction)幀,、P(Prediction)幀,。如圖所示。
典型的I,,B,,P幀結(jié)構(gòu)順序
如圖所示,I幀只使用本幀內(nèi)的數(shù)據(jù)進行編碼,,在編碼過程中它不需要進行運動估計和運動補償,。顯然,由于I幀沒有消除時間方向的相關(guān)性,,所以壓縮比相
對不高,。P幀在編碼過程中使用一個前面的I幀或P幀作為參考圖像進行運動補償,實際上是對當(dāng)前圖像與參考圖像的差值進行編碼,。B幀的編碼方式與P幀相似,,
惟一不同的地方是在編碼過程中它要使用一個前面的I幀或P幀和一個后面的I幀或P幀進行預(yù)測,。由此可見,每一個P幀的編碼需要利用一幀圖像作為參考圖像,,
而B幀則需要兩幀圖像作為參考,。相比之下,B幀比P幀擁有更高的壓縮比,。
(d) 混合編碼
上面介紹了視頻壓縮編碼過程中的幾個重要的方法,。在實際應(yīng)用中這幾個方法不是分離的,通常將它們結(jié)合起來使用以達(dá)到最好的壓縮效果,。下圖給出了混合編碼(即變換編碼+
運動估計和運動補償+ 熵編碼)的模型,。該模型普遍應(yīng)用于MPEG1,MPEG2,,H.264等標(biāo)準(zhǔn)中,。
混合編碼模型
從圖中我們可以看到,當(dāng)前輸入的圖像首先要經(jīng)過分塊,,分塊得到的圖像塊要與經(jīng)過運動補償?shù)念A(yù)測圖像相減得到差值圖像X,,然后對該差值圖像塊進行
DCT變換和量化,量化輸出的數(shù)據(jù)有兩個不同的去處:一個是送給熵編碼器進行編碼,,編碼后的碼流輸出到一個緩存器中保存,,等待傳送出去。另一個應(yīng)用是進行
反量化和反變化后的到信號X’,,該信號將與運動補償輸出的圖像塊相加得到新的預(yù)測圖像信號,,并將新的預(yù)測圖像塊送至幀存儲器。
2.音頻編碼基本原理
(1)
音頻信號的冗余信息
數(shù)字音頻信號如果不加壓縮地直接進行傳送,,將會占用極大的帶寬,。例如,一套雙聲道數(shù)字音頻若取樣頻率為44.1KHz,,每樣值按16bit量化,,則其碼率為:
2*44.1kHz*16bit=1.411Mbit/s
如此大的帶寬將給信號的傳輸和處理都帶來許多困難,因此必須采取音頻壓縮技術(shù)對音頻數(shù)據(jù)進行處理,,才能有效地傳輸音頻數(shù)據(jù),。
數(shù)字音頻壓縮編碼在保證信號在聽覺方面不產(chǎn)生失真的前提下,對音頻數(shù)據(jù)信號進行盡可能大的壓縮,。數(shù)字音頻壓縮編碼采取去除聲音信號中冗余成分的方法來實現(xiàn),。所謂冗余成分指的是音頻中不能被人耳感知到的信號,它們對確定聲音的音色,,音調(diào)等信息沒有任何的幫助,。
冗余信號包含人耳聽覺范圍外的音頻信號以及被掩蔽掉的音頻信號等。例如,,人耳所能察覺的聲音信號的頻率范圍為20Hz~20KHz,,除此之外的其它
頻率人耳無法察覺,,都可視為冗余信號。此外,,根據(jù)人耳聽覺的生理和心理聲學(xué)現(xiàn)象,,當(dāng)一個強音信號與一個弱音信號同時存在時,弱音信號將被強音信號所掩蔽而
聽不見,,這樣弱音信號就可以視為冗余信號而不用傳送,。這就是人耳聽覺的掩蔽效應(yīng),主要表現(xiàn)在頻譜掩蔽效應(yīng)和時域掩蔽效應(yīng),,現(xiàn)分別介紹如下:
(a) 頻譜掩蔽效應(yīng)
一個頻率的聲音能量小于某個閾值之后,,人耳就會聽不到,這個閾值稱為最小可聞閾,。當(dāng)有另外能量較大的聲音出現(xiàn)的時候,,該聲音頻率附近的閾值會提高很多,即所謂的掩蔽效應(yīng),。如圖所示:
頻率掩蔽效應(yīng)
由圖中我們可以看出人耳對2KHz~5KHz的聲音最敏感,,而對頻率太低或太高的聲音信號都很遲鈍,當(dāng)有一個頻率為0.2KHz,、強度為60dB的
聲音出現(xiàn)時,其附近的閾值提高了很多,。由圖中我們可以看出在0.1KHz以下,、1KHz以上的部分,由于離0.2KHz強信號較遠(yuǎn),不受0.2KHz強信
號影響,閾值不受影響,;而在0.1KHz~1KHz范圍,,由于0.2KHz強音的出現(xiàn),閾值有較大的提升,人耳在此范圍所能感覺到的最小聲音強度大幅提
升,。如果0.1KHz~1KHz范圍內(nèi)的聲音信號的強度在被提升的閾值曲線之下,,由于它被0.2KHz強音信號所掩蔽,那么此時我們?nèi)硕荒苈牭?0.2KHz的強音信號而根本聽不見其它弱信號,,這些與0.2KHz強音信號同時存在的弱音信號就可視為冗余信號而不必傳送,。
(b) 時域掩蔽效應(yīng)
當(dāng)強音信號和弱音信號同時出現(xiàn)時,還存在時域掩蔽效應(yīng),。即兩者發(fā)生時間很接近的時候,,也會發(fā)生掩蔽效應(yīng)。時域掩蔽過程曲線如圖所示,,分為前掩蔽,、同時掩蔽和后掩蔽三部分。
時域掩蔽效應(yīng)
由圖我們可以看出,,時域掩蔽效應(yīng)可以分成三種:前掩蔽,,同時掩蔽,,后掩蔽。前掩蔽是指人耳在聽到強信號之前的短暫時間內(nèi),,已經(jīng)存在的弱信號會被掩蔽
而聽不到,。同時掩蔽是指當(dāng)強信號與弱信號同時存在時,弱信號會被強信號所掩蔽而聽不到,。后掩蔽是指當(dāng)強信號消失后,,需經(jīng)過較長的一段時間才能重新聽見弱信
號,稱為后掩蔽,。這些被掩蔽的弱信號即可視為冗余信號,。
(2) 壓縮編碼方法
當(dāng)前數(shù)字音頻編碼領(lǐng)域存在著不同的編碼方案和實現(xiàn)方式, 但基本的編碼思路大同小異, 如圖所示。
數(shù)字音頻編碼系統(tǒng)模型
對每一個音頻聲道中的音頻采樣信號,首先都要將它們映射到頻域中,這種時域到頻域的映射可通過子帶濾波器實現(xiàn),。每個聲道中的音頻采樣塊首先要根據(jù)心
理聲學(xué)模型來計算掩蔽門限值,
然后由計算出的掩蔽門限值決定從公共比特池中分配給該聲道的不同頻率域中多少比特數(shù),,接著進行量化以及編碼工作,最后將控制參數(shù)及輔助數(shù)據(jù)加入數(shù)據(jù)之中,,
產(chǎn)生編碼后的數(shù)據(jù)流
|