殷子悅,蔡江震,黃賀焜
(福州大學 物理與信息工程學院,福建 福州 350108)
2006 年,中國經過自主研發,頒布了音頻和視頻編碼標準(Audio Video coding Standard,AVS)。由于對以指數增長的可視數據的壓縮需求不斷增長,AVS 工作組在過去的二十年中一直致力于開發高效的視頻編碼標準[1]。AVS 標準制定的出發點是希望實現知識產權的自主可控,讓標準回歸為產業發展服務的本位[2]。為了在視頻傳輸質量和傳輸通道速率之間找到一個平衡點,AVS 淺壓縮標準呼之欲出。它不僅可以使得視頻質量優秀,而且對網絡傳輸要求不高。
淺壓縮在保證數據質量的前提下,快速地將大量數據壓縮成較小的文件大小,從而節省存儲空間和網絡帶寬。與常見的H.265 或H.266 等深壓縮視頻編碼算法相比,淺壓縮算法的壓縮和解壓速度更快,因為它們通常只需要進行少量的計算。因此,淺壓縮通常適用于對實時性要求較高的應用場景。
視頻之所以能夠壓縮,是因為它有很多冗余信息。常見的視頻數據存在空間冗余、時間冗余、編碼冗余和視覺冗余4 種冗余類型[3]。熵編碼是一種對概率不同所帶來的編碼冗余進行設計的視頻編碼模塊,利用信源隨機過程的統計特性,將視頻編碼過程中的語法元素映射成二進制形式寫入比特流中[4]。熵編碼模塊作為編碼過程的最后一步,無論是在國際編碼框架或者國內自主編碼框架中都是非常重要的一個環節[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 的像素塊,色度通道單元則根據YUV/RGB 的格式分為三種:8×1 像素塊(YUV420 格式),8×2 像素塊(YUV422 格式)和16×2 像素塊(YUV444/RGB444 格式)。
AVS 淺壓縮標準主要包括4 個模塊,分別為幀內預測模塊、變換量化模塊、碼率控制模塊以及熵編碼模塊,整體編碼框架如圖1 所示。

圖1 AVS 淺壓縮標準的整體編碼框架
AVS 淺壓縮標準中的熵編碼分為二值化和語法元素交織兩個模塊。其中,二值化模塊包含3 種編碼方式,分別是截斷編碼方式、分類定長編碼方式以及定長編碼方式;語法元素交織模塊按每種語法元素的順序進行交織編碼。
熵編碼模塊在獲取碼率控制模塊產生的語法元素復雜度后,根據幀內預測得到的最佳預測模式來判斷是否編碼剩余的語法元素。AVS 熵編碼的整體編碼順序如圖2 所示。如果最佳預測模式為原始值模式,則對當前宏塊的像素值按比特深度為編碼位數直接進行熵編碼。否則,依次對分組方式、殘差碼長、殘差和邊界符號修正符進行熵編碼。

圖2 熵編碼語法元素編碼流程圖
2.1.1 復雜度
復雜度是碼率控制模塊產生的語法元素。首先計算4 個4×2 子塊的復雜度等級,根據經驗閾值判斷其屬于簡單、一般或者復雜,以確定當前色彩通道16×2 宏塊的復雜度等級(0,1,2,3,4)。其次,根據色彩通道復雜度等級確定當前宏塊的復雜度等級,如果當前是YUV444/RGB444 序列,當前宏塊復雜度為Y,U 和V 三個色彩通道復雜度的平均值。否則,取Y 通道復雜度作為當前宏塊復雜度。最后,對于選中的復雜度等級,使用這個值作為無損編碼比特數的估計,并在當前塊編碼完成后使用編碼開銷信息計算真實的無損編碼比特數,用于更新保存的值,以供后續碼率控制模塊使用。
2.1.2 預測模式
預測模式是幀內預測模塊產生的語法元素。在幀內預測模塊的模式決策過程中,通過計算和對比不同預測模式編碼時所花費的總比特數,選擇代價最小的預測模式作為當前最佳預測模式,并且傳遞到熵編碼模塊進行編碼。
2.1.3 殘差碼長和邊界符號修正符
殘差碼長和邊界符號修正符是熵編碼模塊產生的語法元素。根據當前的最佳預測模式,首先得到當前通道宏塊所對應最佳預測模式的殘差,其次以N=4 為一組內的殘差最大值所占比特數作為當前4×1 塊內的殘差碼長,最后判斷每組的殘差是否出現取值位于當前殘差碼長所能表示的區間的邊界值,并根據取值情況對邊界符號修正符進行賦值。
2.1.4 分組方式
對于亮度通道的每個系數集合,均可采用5 種方式來劃分系數組,如圖3 所示。相同顏色表示使用相同的殘差碼長,具體如下。

圖3 16×2 像素塊的系數組劃分方式
(1)分組模式0:劃分為1 個系數組。
(2)分組模式1:劃分為2 個系數組,掃描順序中的前8 個系數為第一組,后8 個系數為第二組。
(3)分組模式2:劃分為3 個系數組,掃描順序中的前8 個系數為第一組,中間4 個系數為第二組,后4 個系數為第三組。
(4)分組模式3:劃分為3 個系數組,掃描順序中的前4 個系數為第一組,中間4 個系數為第二組,后8 個系數為第三組。
(5)分組模式4:劃分為4 個系數組,掃描順序中的每4 個系數為一組。
色度通道單元則根據YUV/RGB 的格式分為三種:8×1 像素塊(YUV420 格式),8×2 像素塊(YUV422 格式)以及16×2 像素塊(YUV444/RGB444 格式),如圖4 所示。相同顏色表示使用相同的殘差碼長,具體如下。

圖4 像素塊掃描方式和系數組劃分方式
對于8×2 像素塊,掃描方式和系數組劃分方式如圖4(a)所示,相同顏色表示使用相同的殘差碼長,具體為:
(1)分組模式0,劃分為2 個系數組,掃描順序中的前8 個系數為第一組,后8 個系數為第二組。
(2)分組模式1,劃分為4 個系數組,掃描順序中的每4 個系數為一組。
對于8×1 像素塊,掃描方式和系數組劃分方式如圖4(b)所示,具體為:
(1)分組模式0,劃分為1 個系數組。
(2)分組模式1,劃分為2 個系數組,掃描順序中的每4 個系數為一組。
二值化方案定義了語法元素到二進制符號串的唯一映射。按照規定的二值化方案進行編碼,能夠在解碼端根據規則唯一地恢復出原始視頻或原始圖像。目前廣泛使用算數編碼和變長編碼兩種編碼方法去除信源符號中的統計冗余[6]。算數編碼遞歸地對編碼區間進行劃分,是一種把輸入信源符號轉為一個或多個碼字的熵編碼方法,最早由香農的信息論提出[7]。在視頻和圖像壓縮系統中,常用的變長編碼方法包括哈夫曼編碼(Huffman Code),指數哥倫布編碼(Golomb-Rice Code),哥倫布萊斯編碼(Exp-Golomb Code)和一元碼(Unary Code)[6]。哈夫曼編碼是一種根據信源符號的概率分布為其分配碼字的編碼方法,指數哥倫布編碼和哥倫布萊斯編碼則是為滿足幾何分布特性的信源模型提供了最佳編碼效率的方法,而一元碼則在處理概率分布符合指數信源模型的情況下能夠取得最佳的編碼效率。這些編碼方法都是基于不同概率分布特性的信源模型,通過分配更短的碼字給更高概率的符號,從而提高整體的編碼效率。
AVS 淺壓縮中的熵編碼中使用了定長編碼和變長編碼兩種方式。其中,變長編碼方式包括分類定長編碼方式和截斷編碼方式兩種。
定長碼是一種使用長度為log2[cMax+1]進行固定長度編碼的二值化方案。按照重要的比特在前、不重要的比特在后的順序發出信號[8]。AVS 淺壓縮標準中,殘差以碼長進行固定長度編碼的二值化方案如表1 所示。假設此時以N=4 為一組時的殘差碼長為2,那么當前組內所有殘差都用碼長2 進行定長編碼。

表1 殘差的編碼方式
分類定長碼是一種只使用兩種固定長度進行編碼的二值化方案,達到快速判斷語法元素狀態的優勢以便解碼。復雜度、預測模式和系數分組方式這3 種語法元素都是采用分類定長碼。其中,系數分組方式的二值化方案如表2 所示。

表2 系數分組方式的二值化方案
截斷編碼是一種利用數據的統計特性和冗余性進行編碼的二值化方案。在截斷編碼中,常見的方法是對出現頻率較高的數據利用較短比特編碼,而對出現頻率較低的數據進行較長比特編碼。通過這種方式,可以實現對數據的有效壓縮。設殘差碼長的最大值為lcmax,殘差碼長為lc,如表3 所示,AVS 淺壓縮標準中的截斷編碼方式如下:

表3 殘差碼長的編碼方式
(1)當0 ≤lc≤2,輸出固定長度為2 比特的值;
(2)當3 ≤lc≤lcmax-1,輸出當前“lc-1”比特位的1 以及1 位的0;
(3)lc≥lcmax,輸出“lc-1”比特位的1 以及1位的1。
經過二值化后的語法元素,按照色彩空間的順序進行交織送入碼流,即編碼完復雜度后,首先按順序交織Y 分量的所有語法元素:預測模式,分組方式,殘差碼長,殘差和邊界控制符。其次按順序交織U 分量的所有語法元素:預測模式,分組方式,殘差碼長,殘差和邊界控制符。最后按順序交織V分量的所有語法元素:預測模式,分組方式,殘差碼長,殘差和邊界控制符。如表4 所示,當語法元素按照規定的二值化方案映射成唯一的比特流后,按圖5 所示順序進行碼流交織。

表4 每種語法元素進行熵編碼時所需的比特數

圖5 熵編碼的語法元素交織
本文首先介紹了AVS 淺壓縮的整體框架,然后針對熵編碼部分進行詳細介紹。AVS 淺壓縮標準中的熵編碼是一種把語法元素編碼成為二進制數后直接進行碼流輸出的熵編碼方式。國內外學者針對熵編碼的設計集中于二值化、上下文建模和算數編碼三個方面。由于AVS 淺壓縮標準中的熵編碼只涉及二值化部分,因此其還有很大的改進空間。影響熵編碼算法性能的重要因素在于是否利用信源概率分布來設計編碼方式,或者是否自適應地利用上下文信息進行編碼。利用信源概率分布以及利用上下文信息來設計新的熵編碼算法,是一個很大的挑戰,將成為未來改進算法性能的重要方向。因此,對AVS 淺壓縮標準中的熵編碼進行研究,具有很高的價值。