王衛(wèi)坤, 楊秀芝, 陳建
(福州大學(xué)物理與信息工程學(xué)院, 福建 福州 350108)
視頻編碼聯(lián)合組(joint collaborative team on video coding, JCT-VC)于2013年正式頒布了高性能視頻編碼(high efficiency video coding, HEVC)標(biāo)準(zhǔn)[1], 采用基于塊的混合編碼框架. 在對(duì)變換系數(shù)的量化過(guò)程中, 高頻交流系數(shù)的量化失真會(huì)在解碼圖像的強(qiáng)邊緣周圍產(chǎn)生波紋現(xiàn)象, 稱為振鈴效應(yīng)[2], 嚴(yán)重影響視頻的主客觀質(zhì)量. 為削弱振鈴效應(yīng)對(duì)視頻質(zhì)量的影響, H.265/HEVC標(biāo)準(zhǔn)中增加了新的環(huán)路濾波模塊: 樣點(diǎn)自適應(yīng)補(bǔ)償技術(shù)(sample adaptive offset, SAO)[3]. SAO技術(shù)從像素域入手, 對(duì)每一個(gè)像素值進(jìn)行種類判別, 對(duì)于被判定為存在特定種類振鈴效應(yīng)的像素值, 則增加對(duì)應(yīng)的補(bǔ)償值來(lái)削弱振鈴效應(yīng)帶來(lái)的失真, 從而有效地提高解碼視頻的主客觀質(zhì)量. 同時(shí), 經(jīng)過(guò)補(bǔ)償?shù)闹貥?gòu)像素更有利于參考, 可以提高預(yù)測(cè)精度, 減小后續(xù)編碼圖像的預(yù)測(cè)殘差, 從而降低編碼碼率. 然而, SAO技術(shù)自身計(jì)算復(fù)雜度極高, 給后續(xù)視頻幀的預(yù)測(cè)過(guò)程帶來(lái)較大的延時(shí), 嚴(yán)重影響編碼效率. 因此, 通過(guò)對(duì)算法進(jìn)行優(yōu)化來(lái)減少SAO編碼耗時(shí)對(duì)編碼性能的提升具有重大意義.
近年來(lái), 不斷有專家學(xué)者提出新的觀點(diǎn)和方法用于改進(jìn)SAO技術(shù). 文獻(xiàn)[4]利用幀內(nèi)預(yù)測(cè)過(guò)程中的角度模式信息來(lái)預(yù)測(cè)SAO的最優(yōu)邊界補(bǔ)償模式, 簡(jiǎn)化了SAO模式判別過(guò)程. 文獻(xiàn)[5]在文獻(xiàn)[4]的基礎(chǔ)上做了進(jìn)一步的改進(jìn), 即利用幀內(nèi)預(yù)測(cè)模式信息預(yù)判出最優(yōu)的SAO邊界補(bǔ)償模式之后, 在該SAO模式的信息統(tǒng)計(jì)過(guò)程中對(duì)像素值進(jìn)行1/2下采樣, 有效地減少了SAO編碼耗時(shí). 文獻(xiàn)[6]提出一種基于邊界補(bǔ)償模式融合、 邊帶補(bǔ)償模式預(yù)決策和融合隔離的SAO算法來(lái)降低SAO的復(fù)雜度, 此方案主要針邊帶補(bǔ)償模式進(jìn)行優(yōu)化, 而對(duì)復(fù)雜度更高的邊界補(bǔ)償模式改進(jìn)較小. 文獻(xiàn)[7]將時(shí)域中若干幀的相同位置的編碼樹單元(coding tree unit, CTU)劃分為一個(gè)CTU組, 并由組中前一部分CTU確定CTU組的主導(dǎo)SAO模式, 而后部分CTU自適應(yīng)地復(fù)用主導(dǎo)SAO模式, 該方案顯著減少了SAO編碼耗時(shí). 文獻(xiàn)[8-9]依據(jù)CU劃分深度等信息來(lái)判斷圖像塊的紋理復(fù)雜度, 以此來(lái)確定SAO的開關(guān), 兩種方案在CTU劃分方式較復(fù)雜的情況下優(yōu)化較小. 文獻(xiàn)[10]利用幀間預(yù)測(cè)模式信息、 CTU空間域相關(guān)性、 亮度分量和色度分量相關(guān)性, 提出一種提前終止SAO的機(jī)制, 然而此方案中的改進(jìn)措施無(wú)法應(yīng)用于所有的編碼配置. 文獻(xiàn)[11]在幀級(jí)和CTU級(jí)兩個(gè)層面分別提出一種針對(duì)360°全景視頻的SAO的優(yōu)化方案, 減少SAO編碼耗時(shí). 文獻(xiàn)[12-13]為基于GPU的SAO優(yōu)化算法, 能夠有效減少SAO編碼耗時(shí), 但是方案比較依賴GPU設(shè)備的特性. 文獻(xiàn)[14]提出一種基于主要邊緣一致性(dominant edge assent, DEA)的快速SAO模式判別方法, 通過(guò)判斷CTU的主要邊緣方向來(lái)預(yù)測(cè)CTU的最優(yōu)邊界補(bǔ)償模式, 加快SAO模式判別過(guò)程.
本研究提出一種新的HEVC快速樣點(diǎn)自適應(yīng)補(bǔ)償算法, 利用邊緣方向提取算法獲取CTU的邊緣方向特性, 并據(jù)此來(lái)簡(jiǎn)化SAO模式判別過(guò)程. 算法在性能損失較小的情況下顯著地減少了SAO編碼耗時(shí), 并且適用于任意類型的視頻幀以及所有的編碼配置.
SAO分為模式判別和像素濾波兩個(gè)過(guò)程, 模式判別又分為信息統(tǒng)計(jì)和模式?jīng)Q策兩個(gè)部分, 整體流程如圖1所示.
圖1 SAO整體流程
模式判別過(guò)程以CTB為基本單位, 為評(píng)估CTB中不同種類的振鈴效應(yīng)所帶來(lái)的影響, 需要遍歷所有的SAO模式. 在信息統(tǒng)計(jì)過(guò)程中, 每種SAO模式均按特定的分類規(guī)則將重構(gòu)像素劃分為不同的種類, 并且統(tǒng)計(jì)每個(gè)種類所包含的像素個(gè)數(shù)以及該種類像素在圖像中對(duì)應(yīng)位置的原始像素與重構(gòu)像素之間的差值之和. 模式?jīng)Q策過(guò)程利用統(tǒng)計(jì)得到的信息計(jì)算出當(dāng)前CTB在每一種模式下的相對(duì)率失真代價(jià), 選擇其中代價(jià)值最小的模式作為當(dāng)前CTB的最優(yōu)SAO模式, 模式?jīng)Q策的最后階段, 將CTU的亮度、 色度CTB分量的最優(yōu)SAO模式對(duì)應(yīng)的總代價(jià)與左融合、 上融合模式的代價(jià)相比較, 代價(jià)值最小的模式即為CTU的最優(yōu)SAO模式. 最后, 在最優(yōu)SAO模式下, 對(duì)CTU進(jìn)行逐像素的SAO濾波, 消除振鈴效應(yīng). SAO模式判別過(guò)程的耗時(shí)占據(jù)整個(gè)SAO過(guò)程耗時(shí)的93%[5]. 因此, 通過(guò)優(yōu)化算法減少模式判別過(guò)程遍歷的模式數(shù)量, 可以顯著降低SAO編碼延時(shí). SAO的補(bǔ)償模式可以分為邊界補(bǔ)償(edge offset, EO)和邊帶補(bǔ)償(band offset, BO)兩種, 1.1與1.2節(jié)將簡(jiǎn)要介紹這兩種模式.
EO模式將CTB中的每一個(gè)像素值與其相鄰像素值進(jìn)行大小比較, 然后根據(jù)比較結(jié)果對(duì)該像素值進(jìn)行歸類, 對(duì)不同種類的像素值使用不同的補(bǔ)償值進(jìn)行補(bǔ)償. 根據(jù)相鄰像素值的位置差異, 可以將EO模式分為4種類型, 分別是水平方向(EO_0)、 垂直方向(EO_1)、 135°方向(EO_2)和45°方向(EO_3), 如圖2所示.
圖2 4種EO類型(c表示當(dāng)前像素, a和b表示相鄰像素)
對(duì)于每一種類型, 根據(jù)圖3所示的像素值大小關(guān)系將當(dāng)前重構(gòu)像素劃分為4個(gè)不同的種類, 并利用率失真優(yōu)化準(zhǔn)則獲取各個(gè)種類的像素所對(duì)應(yīng)的最優(yōu)補(bǔ)償值. 不屬于這4個(gè)種類的像素即為較平坦的像素, 無(wú)需補(bǔ)償.
圖3 EO模式像素分類
BO模式根據(jù)像素的強(qiáng)度值進(jìn)行歸類, 將像素范圍等分為32個(gè)邊帶. 對(duì)于8比特像素值, 其范圍為0~255, 每條邊帶包含8個(gè)像素值, 即位于[8i, 8i+7]范圍內(nèi)的像素值屬于第i個(gè)邊帶, 其中i∈[0, 31]. 每個(gè)邊帶根據(jù)自身像素特點(diǎn)進(jìn)行補(bǔ)償, 同一邊帶使用同一個(gè)補(bǔ)償值. H.265/HEVC標(biāo)準(zhǔn)規(guī)定, 一個(gè)CTB只需選取其中4條連續(xù)邊帶進(jìn)行補(bǔ)償, 使得BO模式和EO模式的補(bǔ)償值數(shù)量保持一致.
若一個(gè)CTB的最優(yōu)SAO模式被判定為其中一種類型的EO模式, 則當(dāng)前CTB中只有一種方向的圖像邊緣振鈴效應(yīng)可以得到較好的改善. 然而SAO的模式判別過(guò)程要對(duì)所有的SAO模式進(jìn)行遍歷, 其中包括4種方向的EO模式, 這造成了大量的時(shí)間浪費(fèi), 大大增加了計(jì)算復(fù)雜度. 圖像中可能包含多種方向的圖像邊緣, 但其中主要的邊緣方向通常只有少數(shù)幾種, 因此可以通過(guò)獲取圖像中主要的邊緣方向來(lái)提前預(yù)測(cè)當(dāng)前CTB的最優(yōu)EO模式, 從而簡(jiǎn)化SAO模式判別過(guò)程.
本算法通過(guò)邊緣方向提取算法獲取亮度CTB中紋理豐富區(qū)域的邊緣方向列表. 然后根據(jù)得到的邊緣方向列表分析該CTB的邊緣方向分布特征. 在進(jìn)行SAO模式判別時(shí), 只對(duì)其中一種或兩種數(shù)量較多的邊緣方向所對(duì)應(yīng)的EO模式進(jìn)行遍歷. 最后利用CTU中亮度分量和色度分量的相關(guān)性減少色度分量在SAO模式判別過(guò)程中遍歷的EO模式數(shù)量, 從而顯著減少SAO編碼耗時(shí).
圖4 邊緣方向提取區(qū)域示例(數(shù)字表示當(dāng)前CU的深度)
對(duì)于一個(gè)特定大小的圖像塊, 紋理豐富的區(qū)域決定了其主要的邊緣方向, 而且這些區(qū)域更容易受到振鈴效應(yīng)的影響. 所以本算法在進(jìn)行邊緣方向提取之前, 先將圖像塊劃分為紋理豐富區(qū)域和平坦區(qū)域, 并且只對(duì)紋理豐富的局部區(qū)域進(jìn)行邊緣方向提取, 從而減少邊緣方向提取所消耗的時(shí)間, 降低算法本身的復(fù)雜度. HEVC編碼器在將CTU劃分為CU的過(guò)程中, 根據(jù)圖像內(nèi)容自適應(yīng)地選擇最優(yōu)劃分方式. 其中平坦區(qū)域用較大的CU編碼可以減少所用的比特?cái)?shù), 提高編碼效率. 根據(jù)這一特點(diǎn), 將CU深度較大(CU尺寸較小)的區(qū)域設(shè)為紋理豐富的區(qū)域, 而將CU深度較小的區(qū)域設(shè)為平坦區(qū)域. 具體地, 在一個(gè)CTU中, 將CU深度大于1的區(qū)域設(shè)為紋理豐富的區(qū)域, 進(jìn)行邊緣方向提??; 而CU深度為0和1的區(qū)域則被設(shè)為平坦區(qū)域, 省略邊緣方向提取過(guò)程. 如圖4所示, 只有紅色方框中的部分是需要進(jìn)行邊緣方向提取的區(qū)域. 在當(dāng)前情形下, 相比于對(duì)所有區(qū)域都進(jìn)行邊緣方向提取的方案, 此方法可以節(jié)省50%的提取時(shí)間.
在確定了一個(gè)CTU的邊緣方向提取區(qū)域之后, 對(duì)該CTU的亮度分量進(jìn)行邊緣方向提取, 得到當(dāng)前亮度CTB的邊緣方向列表. 并據(jù)此判斷該亮度CTB的邊緣方向分布情況, 以減少當(dāng)前亮度CTB在SAO模式判別過(guò)程中遍歷的EO模式數(shù)量, 從而減少SAO編碼耗時(shí). MPEG-7中的邊緣直方圖描述符(edge histogram descriptor, EHD)[15]可以用來(lái)獲得一副圖像的邊緣方向分布. 本算法對(duì)EHD算法進(jìn)行了調(diào)整和改進(jìn), 用于獲取亮度CTB的邊緣方向列表. 具體算法流程如下:
1) 首先將當(dāng)前亮度CTB中需要提取邊緣方向的區(qū)域劃分為4 px×4 px大小的圖像塊, 此時(shí)圖像塊尺寸較小, 邊緣方向趨于單一, 便于提取和歸類. 將圖像塊的邊緣方向歸為五類, 如圖5所示, 其中0°、 90°、 135°、 45°四種情形分別對(duì)應(yīng)SAO的EO_0、 EO_1、 EO_2、 EO_3四種模式, 最后一種情形表示圖像塊包含非單一邊緣方向的情況.
圖5 圖像塊邊緣方向
圖6 圖像塊劃分
2) 對(duì)每個(gè)4 px×4 px圖像塊, 將其4等分成2 px×2 px的子塊, 并對(duì)每一個(gè)子塊的像素值進(jìn)行求和, 將第k塊的像素值的和表示為S(k), 如圖6所示.
3) 邊緣方向?yàn)V波器如圖7所示. 將經(jīng)過(guò)求和的圖像塊分別與圖7所示的5個(gè)邊緣方向?yàn)V波器進(jìn)行卷積, 獲取圖像塊在不同邊緣方向上的邊緣值, 具體的卷積過(guò)程如下式所示.
圖7 邊緣方向?yàn)V波器
(1)
其中: 與f0、f90、f135、f45濾波器進(jìn)行卷積可以分別獲得圖像塊在0°、 90°、 135°、 45°方向上的邊緣值, 依次記作E0,E90,E135,E45; 而與fn濾波器進(jìn)行卷積可以篩選出含有非單一邊緣方向的圖像塊, 將此邊緣值記為En.
4) 得到圖像塊的5個(gè)邊緣值后, 選擇其中最大的邊緣值所對(duì)應(yīng)的方向作為該圖像塊的邊緣方向, 即:
max{E0,E90,E135,E45,En}≠0
(2)
5) 重復(fù)第2)、 3)、 4)步, 直至獲取區(qū)域內(nèi)所有4 px×4 px圖像塊的邊緣方向. 分別統(tǒng)計(jì)邊緣方向?yàn)?°、 90°、 135°和45°的圖像塊個(gè)數(shù), 其中含有非單一邊緣方向的圖像塊(最大邊緣值為En的圖像塊)不參與統(tǒng)計(jì). 按照個(gè)數(shù)從大到小的規(guī)則對(duì)4種邊緣方向進(jìn)行排序, 即可獲得當(dāng)前亮度CTB的邊緣方向列表. 該列表表明亮度CTB中每種邊緣方向的含量, 列表中各種邊緣方向的含量從頭至尾依次降低, 將方向列表中排在首位的邊緣方向設(shè)為CTU的主要邊緣方向, 位置排在第二的方向設(shè)為CTU的次要邊緣方向.
6) 根據(jù)邊緣方向列表中的主要邊緣方向和次要邊緣方向決定亮度分量在SAO模式判別過(guò)程中遍歷的EO模式數(shù)量, 簡(jiǎn)化SAO模式判別過(guò)程. 具體做法為: 在當(dāng)前CTU進(jìn)行亮度分量的SAO模式判別過(guò)程中, 若主要邊緣方向個(gè)數(shù)為0, 則不遍歷EO模式, 只遍歷BO模式; 若主要邊緣方向個(gè)數(shù)不為0且次要邊緣方向的個(gè)數(shù)小于30, 則只遍歷主要邊緣方向?qū)?yīng)的EO模式和BO模式; 若次要邊緣方向的個(gè)數(shù)大于30, 則遍歷主要邊緣方向和次要邊緣方向?qū)?yīng)的EO模式和BO模式.
一個(gè)CTU由一個(gè)亮度CTB(Y分量)和兩個(gè)色度CTB(Cb分量和Cr分量)組成, H.265/HEVC標(biāo)準(zhǔn)規(guī)定, 兩個(gè)色度CTB的SAO模式必須一致, 這樣可以有效降低算法復(fù)雜度, 減少SAO參數(shù)編碼比特?cái)?shù), 這利用了兩個(gè)色度分量之間的相關(guān)性. 為進(jìn)一步簡(jiǎn)化邊緣方向提取過(guò)程, 本算法不對(duì)色度分量進(jìn)行邊緣方向提取, 而是利用亮度和色度分量之間的相關(guān)性來(lái)減少色度分量的EO模式遍歷數(shù)量, 從而進(jìn)一步優(yōu)化SAO模式判別過(guò)程, 減少SAO編碼耗時(shí). 具體做法為: 將2.2中得到的邊緣方向列表中排在最后的邊緣方向設(shè)為當(dāng)前CTU的低含量邊緣方向, 在進(jìn)行當(dāng)前CTU的色度分量的SAO模式判別時(shí), 不對(duì)低含量邊緣方向?qū)?yīng)的 EO模式進(jìn)行遍歷. 例如邊緣方向列表為{0°, 135°, 45°, 90°}, 則當(dāng)前CTU的低含量邊緣方向?yàn)?0°, 在色度分量SAO模式判別時(shí)不遍歷EO_1模式. 若邊緣方向列表中各種邊緣方向的個(gè)數(shù)均為0, 則當(dāng)前CTU的色度分量SAO模式判別過(guò)程只遍歷BO模式.
本算法在HM-16.7平臺(tái)上驗(yàn)證, 實(shí)驗(yàn)對(duì)6類不同分辨率的視頻序列進(jìn)行了測(cè)試, 共包含21個(gè)序列, 編碼器配置為全I(xiàn)幀(AI)、 隨機(jī)訪問(wèn)(RA)、 低延時(shí)B幀(LB)、 低延時(shí)P幀(LP), 量化參數(shù)QP設(shè)置為22、 27、 32、 37, 最大CU尺寸為64, 每一個(gè)序列在任意配置、 任意QP值的條件下均測(cè)試50幀. 算法性能通過(guò)BDrate[16]和節(jié)省時(shí)間兩個(gè)指標(biāo)來(lái)表征, BDrate值越小, 表示性能越好, 節(jié)省時(shí)間是指提出的算法減少的SAO編碼時(shí)間, 計(jì)算方式為:
(3)
實(shí)驗(yàn)結(jié)果如表1所示. 表中給出了所有序列的Y-BDrate以及每種配置下節(jié)省的SAO編碼時(shí)間, 其中, 在AI、 RA、 LB、 LP四種配置下, 本算法分別可以減少31.75%、 56.85%、 52.81%、 51.51%的SAO編碼時(shí)間, 同時(shí)分別只有0.228%、 0.419%、 0.568%和1.313%的性能損失. 表1還給出了關(guān)閉SAO時(shí)編碼器的性能, 可以看到, 與關(guān)閉SAO時(shí)相比, 本算法造成的性能損失較小.
表1 實(shí)驗(yàn)結(jié)果
表2給出本算法與近幾年部分參考文獻(xiàn)的性能對(duì)比. 文獻(xiàn)[5]在4種配置下平均節(jié)省75.5%的SAO編碼時(shí)間, 算法在AI配置下取得了較好的性能, 而在RA、 LB、 LP配置下性能損失較多; 文獻(xiàn)[7]在4種配置下平均節(jié)省75%的SAO編碼時(shí)間, 算法更適用于時(shí)域相關(guān)性較強(qiáng)且運(yùn)動(dòng)幅度較小的視頻內(nèi)容, 在AI和LB配置下性能損失略大; 文獻(xiàn)[14]同樣利用了提取CTU主要邊緣方向來(lái)預(yù)測(cè)最優(yōu)EO模式的方案, 算法通過(guò)邊緣方向一致性算法直接獲取CTU整體的主要邊緣方向, 因此該算法更適用于整體邊緣方向較單一且無(wú)局部復(fù)雜紋理的CTU, 算法在LP配置下取得了較好的效果, 而在AI配置下算法的Y-BDrate損失了0.4%, 相對(duì)原始SAO算法損失略大; 本算法在AI配置下性能損失小于文獻(xiàn)[14], 在LB配置下本算法比文獻(xiàn)[14]更節(jié)省時(shí)間, 而在RA配置下, 本算法在性能損失和節(jié)省時(shí)間兩個(gè)方面均優(yōu)于文獻(xiàn)[14].
表2 與此前算法的性能對(duì)比
本算法通過(guò)分析CTU的邊緣方向特征, 減少CTU在SAO模式判別過(guò)程中遍歷的EO模式數(shù)量, 大大簡(jiǎn)化了SAO模式判別過(guò)程, 顯著減少SAO編碼耗時(shí). 實(shí)驗(yàn)結(jié)果表明, 本算法在性能損失較小的條件下, 在AI、 RA、 LB、 LP四種配置下分別節(jié)省了31.75%、 56.85%、 52.81%、 51.51%的SAO編碼時(shí)間. 此外, 若待處理圖像中包含過(guò)于復(fù)雜的紋理, 本算法在邊緣方向提取過(guò)程中就會(huì)容易受到來(lái)自編碼噪聲的影響, 導(dǎo)致性能損失增大, 可以據(jù)此對(duì)算法做進(jìn)一步的改進(jìn).