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