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