殷子悅,蔡江震,黃賀焜
(福州大學(xué) 物理與信息工程學(xué)院,福建 福州 350108)
2006 年,中國經(jīng)過自主研發(fā),頒布了音頻和視頻編碼標(biāo)準(zhǔn)(Audio Video coding Standard,AVS)。由于對以指數(shù)增長的可視數(shù)據(jù)的壓縮需求不斷增長,AVS 工作組在過去的二十年中一直致力于開發(fā)高效的視頻編碼標(biāo)準(zhǔn)[1]。AVS 標(biāo)準(zhǔn)制定的出發(fā)點是希望實現(xiàn)知識產(chǎn)權(quán)的自主可控,讓標(biāo)準(zhǔn)回歸為產(chǎn)業(yè)發(fā)展服務(wù)的本位[2]。為了在視頻傳輸質(zhì)量和傳輸通道速率之間找到一個平衡點,AVS 淺壓縮標(biāo)準(zhǔn)呼之欲出。它不僅可以使得視頻質(zhì)量優(yōu)秀,而且對網(wǎng)絡(luò)傳輸要求不高。
淺壓縮在保證數(shù)據(jù)質(zhì)量的前提下,快速地將大量數(shù)據(jù)壓縮成較小的文件大小,從而節(jié)省存儲空間和網(wǎng)絡(luò)帶寬。與常見的H.265 或H.266 等深壓縮視頻編碼算法相比,淺壓縮算法的壓縮和解壓速度更快,因為它們通常只需要進(jìn)行少量的計算。因此,淺壓縮通常適用于對實時性要求較高的應(yīng)用場景。
視頻之所以能夠壓縮,是因為它有很多冗余信息。常見的視頻數(shù)據(jù)存在空間冗余、時間冗余、編碼冗余和視覺冗余4 種冗余類型[3]。熵編碼是一種對概率不同所帶來的編碼冗余進(jìn)行設(shè)計的視頻編碼模塊,利用信源隨機過程的統(tǒng)計特性,將視頻編碼過程中的語法元素映射成二進(jìn)制形式寫入比特流中[4]。熵編碼模塊作為編碼過程的最后一步,無論是在國際編碼框架或者國內(nèi)自主編碼框架中都是非常重要的一個環(huán)節(jié)[5]。
AVS淺壓縮支持YUV 4∶0∶0,YUV 4∶2∶0,YUV 4 ∶2 ∶2,YUV 4 ∶4 ∶4 和RGB 4 ∶4 ∶4格式的圖像及視頻,以及8 bit、10 bit、12 bit 和16 bit的輸入比特深度。其中,亮度通道單元為16×2 的像素塊,色度通道單元則根據(jù)YUV/RGB 的格式分為三種:8×1 像素塊(YUV420 格式),8×2 像素塊(YUV422 格式)和16×2 像素塊(YUV444/RGB444 格式)。
AVS 淺壓縮標(biāo)準(zhǔn)主要包括4 個模塊,分別為幀內(nèi)預(yù)測模塊、變換量化模塊、碼率控制模塊以及熵編碼模塊,整體編碼框架如圖1 所示。
圖1 AVS 淺壓縮標(biāo)準(zhǔn)的整體編碼框架
AVS 淺壓縮標(biāo)準(zhǔn)中的熵編碼分為二值化和語法元素交織兩個模塊。其中,二值化模塊包含3 種編碼方式,分別是截斷編碼方式、分類定長編碼方式以及定長編碼方式;語法元素交織模塊按每種語法元素的順序進(jìn)行交織編碼。
熵編碼模塊在獲取碼率控制模塊產(chǎn)生的語法元素復(fù)雜度后,根據(jù)幀內(nèi)預(yù)測得到的最佳預(yù)測模式來判斷是否編碼剩余的語法元素。AVS 熵編碼的整體編碼順序如圖2 所示。如果最佳預(yù)測模式為原始值模式,則對當(dāng)前宏塊的像素值按比特深度為編碼位數(shù)直接進(jìn)行熵編碼。否則,依次對分組方式、殘差碼長、殘差和邊界符號修正符進(jìn)行熵編碼。
圖2 熵編碼語法元素編碼流程圖
2.1.1 復(fù)雜度
復(fù)雜度是碼率控制模塊產(chǎn)生的語法元素。首先計算4 個4×2 子塊的復(fù)雜度等級,根據(jù)經(jīng)驗閾值判斷其屬于簡單、一般或者復(fù)雜,以確定當(dāng)前色彩通道16×2 宏塊的復(fù)雜度等級(0,1,2,3,4)。其次,根據(jù)色彩通道復(fù)雜度等級確定當(dāng)前宏塊的復(fù)雜度等級,如果當(dāng)前是YUV444/RGB444 序列,當(dāng)前宏塊復(fù)雜度為Y,U 和V 三個色彩通道復(fù)雜度的平均值。否則,取Y 通道復(fù)雜度作為當(dāng)前宏塊復(fù)雜度。最后,對于選中的復(fù)雜度等級,使用這個值作為無損編碼比特數(shù)的估計,并在當(dāng)前塊編碼完成后使用編碼開銷信息計算真實的無損編碼比特數(shù),用于更新保存的值,以供后續(xù)碼率控制模塊使用。
2.1.2 預(yù)測模式
預(yù)測模式是幀內(nèi)預(yù)測模塊產(chǎn)生的語法元素。在幀內(nèi)預(yù)測模塊的模式?jīng)Q策過程中,通過計算和對比不同預(yù)測模式編碼時所花費的總比特數(shù),選擇代價最小的預(yù)測模式作為當(dāng)前最佳預(yù)測模式,并且傳遞到熵編碼模塊進(jìn)行編碼。
2.1.3 殘差碼長和邊界符號修正符
殘差碼長和邊界符號修正符是熵編碼模塊產(chǎn)生的語法元素。根據(jù)當(dāng)前的最佳預(yù)測模式,首先得到當(dāng)前通道宏塊所對應(yīng)最佳預(yù)測模式的殘差,其次以N=4 為一組內(nèi)的殘差最大值所占比特數(shù)作為當(dāng)前4×1 塊內(nèi)的殘差碼長,最后判斷每組的殘差是否出現(xiàn)取值位于當(dāng)前殘差碼長所能表示的區(qū)間的邊界值,并根據(jù)取值情況對邊界符號修正符進(jìn)行賦值。
2.1.4 分組方式
對于亮度通道的每個系數(shù)集合,均可采用5 種方式來劃分系數(shù)組,如圖3 所示。相同顏色表示使用相同的殘差碼長,具體如下。
圖3 16×2 像素塊的系數(shù)組劃分方式
(1)分組模式0:劃分為1 個系數(shù)組。
(2)分組模式1:劃分為2 個系數(shù)組,掃描順序中的前8 個系數(shù)為第一組,后8 個系數(shù)為第二組。
(3)分組模式2:劃分為3 個系數(shù)組,掃描順序中的前8 個系數(shù)為第一組,中間4 個系數(shù)為第二組,后4 個系數(shù)為第三組。
(4)分組模式3:劃分為3 個系數(shù)組,掃描順序中的前4 個系數(shù)為第一組,中間4 個系數(shù)為第二組,后8 個系數(shù)為第三組。
(5)分組模式4:劃分為4 個系數(shù)組,掃描順序中的每4 個系數(shù)為一組。
色度通道單元則根據(jù)YUV/RGB 的格式分為三種:8×1 像素塊(YUV420 格式),8×2 像素塊(YUV422 格式)以及16×2 像素塊(YUV444/RGB444 格式),如圖4 所示。相同顏色表示使用相同的殘差碼長,具體如下。
圖4 像素塊掃描方式和系數(shù)組劃分方式
對于8×2 像素塊,掃描方式和系數(shù)組劃分方式如圖4(a)所示,相同顏色表示使用相同的殘差碼長,具體為:
(1)分組模式0,劃分為2 個系數(shù)組,掃描順序中的前8 個系數(shù)為第一組,后8 個系數(shù)為第二組。
(2)分組模式1,劃分為4 個系數(shù)組,掃描順序中的每4 個系數(shù)為一組。
對于8×1 像素塊,掃描方式和系數(shù)組劃分方式如圖4(b)所示,具體為:
(1)分組模式0,劃分為1 個系數(shù)組。
(2)分組模式1,劃分為2 個系數(shù)組,掃描順序中的每4 個系數(shù)為一組。
二值化方案定義了語法元素到二進(jìn)制符號串的唯一映射。按照規(guī)定的二值化方案進(jìn)行編碼,能夠在解碼端根據(jù)規(guī)則唯一地恢復(fù)出原始視頻或原始圖像。目前廣泛使用算數(shù)編碼和變長編碼兩種編碼方法去除信源符號中的統(tǒng)計冗余[6]。算數(shù)編碼遞歸地對編碼區(qū)間進(jìn)行劃分,是一種把輸入信源符號轉(zhuǎn)為一個或多個碼字的熵編碼方法,最早由香農(nóng)的信息論提出[7]。在視頻和圖像壓縮系統(tǒng)中,常用的變長編碼方法包括哈夫曼編碼(Huffman Code),指數(shù)哥倫布編碼(Golomb-Rice Code),哥倫布萊斯編碼(Exp-Golomb Code)和一元碼(Unary Code)[6]。哈夫曼編碼是一種根據(jù)信源符號的概率分布為其分配碼字的編碼方法,指數(shù)哥倫布編碼和哥倫布萊斯編碼則是為滿足幾何分布特性的信源模型提供了最佳編碼效率的方法,而一元碼則在處理概率分布符合指數(shù)信源模型的情況下能夠取得最佳的編碼效率。這些編碼方法都是基于不同概率分布特性的信源模型,通過分配更短的碼字給更高概率的符號,從而提高整體的編碼效率。
AVS 淺壓縮中的熵編碼中使用了定長編碼和變長編碼兩種方式。其中,變長編碼方式包括分類定長編碼方式和截斷編碼方式兩種。
定長碼是一種使用長度為log2[cMax+1]進(jìn)行固定長度編碼的二值化方案。按照重要的比特在前、不重要的比特在后的順序發(fā)出信號[8]。AVS 淺壓縮標(biāo)準(zhǔn)中,殘差以碼長進(jìn)行固定長度編碼的二值化方案如表1 所示。假設(shè)此時以N=4 為一組時的殘差碼長為2,那么當(dāng)前組內(nèi)所有殘差都用碼長2 進(jìn)行定長編碼。
表1 殘差的編碼方式
分類定長碼是一種只使用兩種固定長度進(jìn)行編碼的二值化方案,達(dá)到快速判斷語法元素狀態(tài)的優(yōu)勢以便解碼。復(fù)雜度、預(yù)測模式和系數(shù)分組方式這3 種語法元素都是采用分類定長碼。其中,系數(shù)分組方式的二值化方案如表2 所示。
表2 系數(shù)分組方式的二值化方案
截斷編碼是一種利用數(shù)據(jù)的統(tǒng)計特性和冗余性進(jìn)行編碼的二值化方案。在截斷編碼中,常見的方法是對出現(xiàn)頻率較高的數(shù)據(jù)利用較短比特編碼,而對出現(xiàn)頻率較低的數(shù)據(jù)進(jìn)行較長比特編碼。通過這種方式,可以實現(xiàn)對數(shù)據(jù)的有效壓縮。設(shè)殘差碼長的最大值為lcmax,殘差碼長為lc,如表3 所示,AVS 淺壓縮標(biāo)準(zhǔn)中的截斷編碼方式如下:
表3 殘差碼長的編碼方式
(1)當(dāng)0 ≤lc≤2,輸出固定長度為2 比特的值;
(2)當(dāng)3 ≤lc≤lcmax-1,輸出當(dāng)前“l(fā)c-1”比特位的1 以及1 位的0;
(3)lc≥lcmax,輸出“l(fā)c-1”比特位的1 以及1位的1。
經(jīng)過二值化后的語法元素,按照色彩空間的順序進(jìn)行交織送入碼流,即編碼完復(fù)雜度后,首先按順序交織Y 分量的所有語法元素:預(yù)測模式,分組方式,殘差碼長,殘差和邊界控制符。其次按順序交織U 分量的所有語法元素:預(yù)測模式,分組方式,殘差碼長,殘差和邊界控制符。最后按順序交織V分量的所有語法元素:預(yù)測模式,分組方式,殘差碼長,殘差和邊界控制符。如表4 所示,當(dāng)語法元素按照規(guī)定的二值化方案映射成唯一的比特流后,按圖5 所示順序進(jìn)行碼流交織。
表4 每種語法元素進(jìn)行熵編碼時所需的比特數(shù)
圖5 熵編碼的語法元素交織
本文首先介紹了AVS 淺壓縮的整體框架,然后針對熵編碼部分進(jìn)行詳細(xì)介紹。AVS 淺壓縮標(biāo)準(zhǔn)中的熵編碼是一種把語法元素編碼成為二進(jìn)制數(shù)后直接進(jìn)行碼流輸出的熵編碼方式。國內(nèi)外學(xué)者針對熵編碼的設(shè)計集中于二值化、上下文建模和算數(shù)編碼三個方面。由于AVS 淺壓縮標(biāo)準(zhǔn)中的熵編碼只涉及二值化部分,因此其還有很大的改進(jìn)空間。影響熵編碼算法性能的重要因素在于是否利用信源概率分布來設(shè)計編碼方式,或者是否自適應(yīng)地利用上下文信息進(jìn)行編碼。利用信源概率分布以及利用上下文信息來設(shè)計新的熵編碼算法,是一個很大的挑戰(zhàn),將成為未來改進(jìn)算法性能的重要方向。因此,對AVS 淺壓縮標(biāo)準(zhǔn)中的熵編碼進(jìn)行研究,具有很高的價值。