王衛坤, 楊秀芝, 陳建
(福州大學物理與信息工程學院, 福建 福州 350108)
視頻編碼聯合組(joint collaborative team on video coding, JCT-VC)于2013年正式頒布了高性能視頻編碼(high efficiency video coding, HEVC)標準[1], 采用基于塊的混合編碼框架. 在對變換系數的量化過程中, 高頻交流系數的量化失真會在解碼圖像的強邊緣周圍產生波紋現象, 稱為振鈴效應[2], 嚴重影響視頻的主客觀質量. 為削弱振鈴效應對視頻質量的影響, H.265/HEVC標準中增加了新的環路濾波模塊: 樣點自適應補償技術(sample adaptive offset, SAO)[3]. SAO技術從像素域入手, 對每一個像素值進行種類判別, 對于被判定為存在特定種類振鈴效應的像素值, 則增加對應的補償值來削弱振鈴效應帶來的失真, 從而有效地提高解碼視頻的主客觀質量. 同時, 經過補償的重構像素更有利于參考, 可以提高預測精度, 減小后續編碼圖像的預測殘差, 從而降低編碼碼率. 然而, SAO技術自身計算復雜度極高, 給后續視頻幀的預測過程帶來較大的延時, 嚴重影響編碼效率. 因此, 通過對算法進行優化來減少SAO編碼耗時對編碼性能的提升具有重大意義.
近年來, 不斷有專家學者提出新的觀點和方法用于改進SAO技術. 文獻[4]利用幀內預測過程中的角度模式信息來預測SAO的最優邊界補償模式, 簡化了SAO模式判別過程. 文獻[5]在文獻[4]的基礎上做了進一步的改進, 即利用幀內預測模式信息預判出最優的SAO邊界補償模式之后, 在該SAO模式的信息統計過程中對像素值進行1/2下采樣, 有效地減少了SAO編碼耗時. 文獻[6]提出一種基于邊界補償模式融合、 邊帶補償模式預決策和融合隔離的SAO算法來降低SAO的復雜度, 此方案主要針邊帶補償模式進行優化, 而對復雜度更高的邊界補償模式改進較小. 文獻[7]將時域中若干幀的相同位置的編碼樹單元(coding tree unit, CTU)劃分為一個CTU組, 并由組中前一部分CTU確定CTU組的主導SAO模式, 而后部分CTU自適應地復用主導SAO模式, 該方案顯著減少了SAO編碼耗時. 文獻[8-9]依據CU劃分深度等信息來判斷圖像塊的紋理復雜度, 以此來確定SAO的開關, 兩種方案在CTU劃分方式較復雜的情況下優化較小. 文獻[10]利用幀間預測模式信息、 CTU空間域相關性、 亮度分量和色度分量相關性, 提出一種提前終止SAO的機制, 然而此方案中的改進措施無法應用于所有的編碼配置. 文獻[11]在幀級和CTU級兩個層面分別提出一種針對360°全景視頻的SAO的優化方案, 減少SAO編碼耗時. 文獻[12-13]為基于GPU的SAO優化算法, 能夠有效減少SAO編碼耗時, 但是方案比較依賴GPU設備的特性. 文獻[14]提出一種基于主要邊緣一致性(dominant edge assent, DEA)的快速SAO模式判別方法, 通過判斷CTU的主要邊緣方向來預測CTU的最優邊界補償模式, 加快SAO模式判別過程.
本研究提出一種新的HEVC快速樣點自適應補償算法, 利用邊緣方向提取算法獲取CTU的邊緣方向特性, 并據此來簡化SAO模式判別過程. 算法在性能損失較小的情況下顯著地減少了SAO編碼耗時, 并且適用于任意類型的視頻幀以及所有的編碼配置.
SAO分為模式判別和像素濾波兩個過程, 模式判別又分為信息統計和模式決策兩個部分, 整體流程如圖1所示.

圖1 SAO整體流程
模式判別過程以CTB為基本單位, 為評估CTB中不同種類的振鈴效應所帶來的影響, 需要遍歷所有的SAO模式. 在信息統計過程中, 每種SAO模式均按特定的分類規則將重構像素劃分為不同的種類, 并且統計每個種類所包含的像素個數以及該種類像素在圖像中對應位置的原始像素與重構像素之間的差值之和. 模式決策過程利用統計得到的信息計算出當前CTB在每一種模式下的相對率失真代價, 選擇其中代價值最小的模式作為當前CTB的最優SAO模式, 模式決策的最后階段, 將CTU的亮度、 色度CTB分量的最優SAO模式對應的總代價與左融合、 上融合模式的代價相比較, 代價值最小的模式即為CTU的最優SAO模式. 最后, 在最優SAO模式下, 對CTU進行逐像素的SAO濾波, 消除振鈴效應. SAO模式判別過程的耗時占據整個SAO過程耗時的93%[5]. 因此, 通過優化算法減少模式判別過程遍歷的模式數量, 可以顯著降低SAO編碼延時. SAO的補償模式可以分為邊界補償(edge offset, EO)和邊帶補償(band offset, BO)兩種, 1.1與1.2節將簡要介紹這兩種模式.
EO模式將CTB中的每一個像素值與其相鄰像素值進行大小比較, 然后根據比較結果對該像素值進行歸類, 對不同種類的像素值使用不同的補償值進行補償. 根據相鄰像素值的位置差異, 可以將EO模式分為4種類型, 分別是水平方向(EO_0)、 垂直方向(EO_1)、 135°方向(EO_2)和45°方向(EO_3), 如圖2所示.

圖2 4種EO類型(c表示當前像素, a和b表示相鄰像素)
對于每一種類型, 根據圖3所示的像素值大小關系將當前重構像素劃分為4個不同的種類, 并利用率失真優化準則獲取各個種類的像素所對應的最優補償值. 不屬于這4個種類的像素即為較平坦的像素, 無需補償.

圖3 EO模式像素分類
BO模式根據像素的強度值進行歸類, 將像素范圍等分為32個邊帶. 對于8比特像素值, 其范圍為0~255, 每條邊帶包含8個像素值, 即位于[8i, 8i+7]范圍內的像素值屬于第i個邊帶, 其中i∈[0, 31]. 每個邊帶根據自身像素特點進行補償, 同一邊帶使用同一個補償值. H.265/HEVC標準規定, 一個CTB只需選取其中4條連續邊帶進行補償, 使得BO模式和EO模式的補償值數量保持一致.
若一個CTB的最優SAO模式被判定為其中一種類型的EO模式, 則當前CTB中只有一種方向的圖像邊緣振鈴效應可以得到較好的改善. 然而SAO的模式判別過程要對所有的SAO模式進行遍歷, 其中包括4種方向的EO模式, 這造成了大量的時間浪費, 大大增加了計算復雜度. 圖像中可能包含多種方向的圖像邊緣, 但其中主要的邊緣方向通常只有少數幾種, 因此可以通過獲取圖像中主要的邊緣方向來提前預測當前CTB的最優EO模式, 從而簡化SAO模式判別過程.
本算法通過邊緣方向提取算法獲取亮度CTB中紋理豐富區域的邊緣方向列表. 然后根據得到的邊緣方向列表分析該CTB的邊緣方向分布特征. 在進行SAO模式判別時, 只對其中一種或兩種數量較多的邊緣方向所對應的EO模式進行遍歷. 最后利用CTU中亮度分量和色度分量的相關性減少色度分量在SAO模式判別過程中遍歷的EO模式數量, 從而顯著減少SAO編碼耗時.

圖4 邊緣方向提取區域示例(數字表示當前CU的深度)
對于一個特定大小的圖像塊, 紋理豐富的區域決定了其主要的邊緣方向, 而且這些區域更容易受到振鈴效應的影響. 所以本算法在進行邊緣方向提取之前, 先將圖像塊劃分為紋理豐富區域和平坦區域, 并且只對紋理豐富的局部區域進行邊緣方向提取, 從而減少邊緣方向提取所消耗的時間, 降低算法本身的復雜度. HEVC編碼器在將CTU劃分為CU的過程中, 根據圖像內容自適應地選擇最優劃分方式. 其中平坦區域用較大的CU編碼可以減少所用的比特數, 提高編碼效率. 根據這一特點, 將CU深度較大(CU尺寸較小)的區域設為紋理豐富的區域, 而將CU深度較小的區域設為平坦區域. 具體地, 在一個CTU中, 將CU深度大于1的區域設為紋理豐富的區域, 進行邊緣方向提取; 而CU深度為0和1的區域則被設為平坦區域, 省略邊緣方向提取過程. 如圖4所示, 只有紅色方框中的部分是需要進行邊緣方向提取的區域. 在當前情形下, 相比于對所有區域都進行邊緣方向提取的方案, 此方法可以節省50%的提取時間.
在確定了一個CTU的邊緣方向提取區域之后, 對該CTU的亮度分量進行邊緣方向提取, 得到當前亮度CTB的邊緣方向列表. 并據此判斷該亮度CTB的邊緣方向分布情況, 以減少當前亮度CTB在SAO模式判別過程中遍歷的EO模式數量, 從而減少SAO編碼耗時. MPEG-7中的邊緣直方圖描述符(edge histogram descriptor, EHD)[15]可以用來獲得一副圖像的邊緣方向分布. 本算法對EHD算法進行了調整和改進, 用于獲取亮度CTB的邊緣方向列表. 具體算法流程如下:
1) 首先將當前亮度CTB中需要提取邊緣方向的區域劃分為4 px×4 px大小的圖像塊, 此時圖像塊尺寸較小, 邊緣方向趨于單一, 便于提取和歸類. 將圖像塊的邊緣方向歸為五類, 如圖5所示, 其中0°、 90°、 135°、 45°四種情形分別對應SAO的EO_0、 EO_1、 EO_2、 EO_3四種模式, 最后一種情形表示圖像塊包含非單一邊緣方向的情況.

圖5 圖像塊邊緣方向

圖6 圖像塊劃分
2) 對每個4 px×4 px圖像塊, 將其4等分成2 px×2 px的子塊, 并對每一個子塊的像素值進行求和, 將第k塊的像素值的和表示為S(k), 如圖6所示.
3) 邊緣方向濾波器如圖7所示. 將經過求和的圖像塊分別與圖7所示的5個邊緣方向濾波器進行卷積, 獲取圖像塊在不同邊緣方向上的邊緣值, 具體的卷積過程如下式所示.

圖7 邊緣方向濾波器

(1)
其中: 與f0、f90、f135、f45濾波器進行卷積可以分別獲得圖像塊在0°、 90°、 135°、 45°方向上的邊緣值, 依次記作E0,E90,E135,E45; 而與fn濾波器進行卷積可以篩選出含有非單一邊緣方向的圖像塊, 將此邊緣值記為En.
4) 得到圖像塊的5個邊緣值后, 選擇其中最大的邊緣值所對應的方向作為該圖像塊的邊緣方向, 即:
max{E0,E90,E135,E45,En}≠0
(2)
5) 重復第2)、 3)、 4)步, 直至獲取區域內所有4 px×4 px圖像塊的邊緣方向. 分別統計邊緣方向為0°、 90°、 135°和45°的圖像塊個數, 其中含有非單一邊緣方向的圖像塊(最大邊緣值為En的圖像塊)不參與統計. 按照個數從大到小的規則對4種邊緣方向進行排序, 即可獲得當前亮度CTB的邊緣方向列表. 該列表表明亮度CTB中每種邊緣方向的含量, 列表中各種邊緣方向的含量從頭至尾依次降低, 將方向列表中排在首位的邊緣方向設為CTU的主要邊緣方向, 位置排在第二的方向設為CTU的次要邊緣方向.
6) 根據邊緣方向列表中的主要邊緣方向和次要邊緣方向決定亮度分量在SAO模式判別過程中遍歷的EO模式數量, 簡化SAO模式判別過程. 具體做法為: 在當前CTU進行亮度分量的SAO模式判別過程中, 若主要邊緣方向個數為0, 則不遍歷EO模式, 只遍歷BO模式; 若主要邊緣方向個數不為0且次要邊緣方向的個數小于30, 則只遍歷主要邊緣方向對應的EO模式和BO模式; 若次要邊緣方向的個數大于30, 則遍歷主要邊緣方向和次要邊緣方向對應的EO模式和BO模式.
一個CTU由一個亮度CTB(Y分量)和兩個色度CTB(Cb分量和Cr分量)組成, H.265/HEVC標準規定, 兩個色度CTB的SAO模式必須一致, 這樣可以有效降低算法復雜度, 減少SAO參數編碼比特數, 這利用了兩個色度分量之間的相關性. 為進一步簡化邊緣方向提取過程, 本算法不對色度分量進行邊緣方向提取, 而是利用亮度和色度分量之間的相關性來減少色度分量的EO模式遍歷數量, 從而進一步優化SAO模式判別過程, 減少SAO編碼耗時. 具體做法為: 將2.2中得到的邊緣方向列表中排在最后的邊緣方向設為當前CTU的低含量邊緣方向, 在進行當前CTU的色度分量的SAO模式判別時, 不對低含量邊緣方向對應的 EO模式進行遍歷. 例如邊緣方向列表為{0°, 135°, 45°, 90°}, 則當前CTU的低含量邊緣方向為90°, 在色度分量SAO模式判別時不遍歷EO_1模式. 若邊緣方向列表中各種邊緣方向的個數均為0, 則當前CTU的色度分量SAO模式判別過程只遍歷BO模式.
本算法在HM-16.7平臺上驗證, 實驗對6類不同分辨率的視頻序列進行了測試, 共包含21個序列, 編碼器配置為全I幀(AI)、 隨機訪問(RA)、 低延時B幀(LB)、 低延時P幀(LP), 量化參數QP設置為22、 27、 32、 37, 最大CU尺寸為64, 每一個序列在任意配置、 任意QP值的條件下均測試50幀. 算法性能通過BDrate[16]和節省時間兩個指標來表征, BDrate值越小, 表示性能越好, 節省時間是指提出的算法減少的SAO編碼時間, 計算方式為:

(3)
實驗結果如表1所示. 表中給出了所有序列的Y-BDrate以及每種配置下節省的SAO編碼時間, 其中, 在AI、 RA、 LB、 LP四種配置下, 本算法分別可以減少31.75%、 56.85%、 52.81%、 51.51%的SAO編碼時間, 同時分別只有0.228%、 0.419%、 0.568%和1.313%的性能損失. 表1還給出了關閉SAO時編碼器的性能, 可以看到, 與關閉SAO時相比, 本算法造成的性能損失較小.

表1 實驗結果
表2給出本算法與近幾年部分參考文獻的性能對比. 文獻[5]在4種配置下平均節省75.5%的SAO編碼時間, 算法在AI配置下取得了較好的性能, 而在RA、 LB、 LP配置下性能損失較多; 文獻[7]在4種配置下平均節省75%的SAO編碼時間, 算法更適用于時域相關性較強且運動幅度較小的視頻內容, 在AI和LB配置下性能損失略大; 文獻[14]同樣利用了提取CTU主要邊緣方向來預測最優EO模式的方案, 算法通過邊緣方向一致性算法直接獲取CTU整體的主要邊緣方向, 因此該算法更適用于整體邊緣方向較單一且無局部復雜紋理的CTU, 算法在LP配置下取得了較好的效果, 而在AI配置下算法的Y-BDrate損失了0.4%, 相對原始SAO算法損失略大; 本算法在AI配置下性能損失小于文獻[14], 在LB配置下本算法比文獻[14]更節省時間, 而在RA配置下, 本算法在性能損失和節省時間兩個方面均優于文獻[14].

表2 與此前算法的性能對比
本算法通過分析CTU的邊緣方向特征, 減少CTU在SAO模式判別過程中遍歷的EO模式數量, 大大簡化了SAO模式判別過程, 顯著減少SAO編碼耗時. 實驗結果表明, 本算法在性能損失較小的條件下, 在AI、 RA、 LB、 LP四種配置下分別節省了31.75%、 56.85%、 52.81%、 51.51%的SAO編碼時間. 此外, 若待處理圖像中包含過于復雜的紋理, 本算法在邊緣方向提取過程中就會容易受到來自編碼噪聲的影響, 導致性能損失增大, 可以據此對算法做進一步的改進.