羅瑜
(陜西中醫(yī)藥大學(xué) 基礎(chǔ)學(xué)院,陜西咸陽(yáng) 712046)
隨著通信技術(shù)的發(fā)展,人們對(duì)視頻和圖像的要求也越來(lái)越高。目前圖像的分辨率已從FHD 慢慢過(guò)渡到8K,幀率也從30 f/s 發(fā)展成目前主流的60 f/s。高分辨率和高幀率大大提升了視覺(jué)體驗(yàn),但同時(shí)也給信息的傳輸帶來(lái)了很大的技術(shù)挑戰(zhàn),即如何快速完成大量數(shù)據(jù)的傳輸。為解決該問(wèn)題,新的視頻編碼技術(shù)不斷被提出,比如H.265、AVS2 和VP9 等編碼標(biāo)準(zhǔn)。目前,國(guó)際上最先進(jìn)的視頻編碼標(biāo)準(zhǔn)為開(kāi)放媒體聯(lián)盟(Alliance for Open Media,AOM)提出的AV1標(biāo)準(zhǔn),該編碼標(biāo)準(zhǔn)主要針對(duì)8K 碼流,與H.265、AVS2以及VP9 相比,它用近2 倍的壓縮復(fù)雜度換來(lái)約30%壓縮率的提升[1-2],大大降低了視頻的傳輸帶寬。
解碼是編碼的逆過(guò)程,根據(jù)AV1 的編碼標(biāo)準(zhǔn)可以知道,AV1 的解碼流程主要包含8 個(gè)模塊,如圖1所示[3-5]。
圖1 中,每個(gè)模塊的作用說(shuō)明如下:
1)熵解碼模塊主要完成語(yǔ)法元素(Syntactic Element,SE)的解析。
2)反變換量化:本模塊根據(jù)熵解碼解析出的SE,計(jì)算出每個(gè)殘差系數(shù)的值。
圖1 AV1解碼流程
3)計(jì)算MV:本模塊根據(jù)熵解碼解析出的SE,計(jì)算出每個(gè)殘差系數(shù)對(duì)應(yīng)的運(yùn)動(dòng)矢量(Motion Vector,MV)[6-7]。
4)像素重建:本模塊主要根據(jù)殘差系數(shù)和其對(duì)應(yīng)的MV,計(jì)算出每個(gè)像素值[8]。
5)Loop Filter:本濾波模塊主要減弱或者消除變換量化帶來(lái)的塊效應(yīng)[9-10]。
6)CDEF:本濾波模塊主要減弱變換量化帶來(lái)的振鈴效應(yīng)[11]。
7)Up Scaling:本模塊在水平方向進(jìn)行上采樣,以恢復(fù)圖像的真實(shí)水平分辨率[12]。
8)Loop Restoration:本模塊為有效的通用去噪濾波器,可消除DCT 噪聲。
經(jīng)過(guò)大城市的熏陶,丁柔的言談舉止都非常得體,與我閑聊了她這幾年在北京的奮斗史,大多是一些比較心酸的往事。只是她的分貝卻揚(yáng)得有些高,大抵是故意想讓周橋聽(tīng)見(jiàn)。
在進(jìn)行Loop Restoration 處理前,AV1 在概念上首先把一幀圖像在垂直方向上分為N個(gè)stripe,每個(gè)stripe 對(duì) 應(yīng) 一 套 參 數(shù),即stripeNum、stripeStartY 和startEndY,這些參數(shù)決定著濾波器在進(jìn)行濾波時(shí),是取CDEF 濾波后的數(shù)據(jù)還是取CDEF 濾波前的數(shù)據(jù)進(jìn)行濾波[5,12]。這套參數(shù)說(shuō)明如下:
1)stripeNum 為每個(gè)stripe 的索引號(hào)。當(dāng)stripe Num 為0 時(shí),stripe 的高度為56pixels;stripeNum 為N-1 時(shí),stripe 的高度為(frame_height-56)%64;對(duì)于其它的stripeNum,stripe 的高度為64pixels,如圖2 中的長(zhǎng)條所示。
2)stripeStartY 為每個(gè)stripe 的起始行對(duì)應(yīng)的Y坐標(biāo)。
3)stripeY 為每個(gè)stripe 的結(jié)束行對(duì)應(yīng)的Y坐標(biāo)。
其次AV1 標(biāo)準(zhǔn)又把一幀圖像在水平和垂直方向上分為若干個(gè)矩形方塊,即restoration unit,如圖2 中的虛線方塊所示。每個(gè)restoration unit 的大小由熵解碼模塊解析得到,且都有其對(duì)應(yīng)的坐標(biāo)(unitRow,unitCol),根據(jù)此坐標(biāo)可計(jì)算得到濾波過(guò)程用到的各個(gè)參數(shù)。
圖2 stripe 和restoration unit示意圖
Loop Restoration 濾波器的處理如圖3 所示,它主要包含兩種濾波器,即Winner濾波器和SelfGuided濾波器,其中Winner 濾波器采用兩個(gè)一維的對(duì)稱(chēng)濾波器進(jìn)行實(shí)現(xiàn),SelfGuided 濾波器則采用兩個(gè)重建信號(hào)的線性組合來(lái)模擬接近真實(shí)數(shù)據(jù)。通過(guò)AV1標(biāo)準(zhǔn)可知,通過(guò)rType 參數(shù)(通過(guò)unitRow 和unitCol計(jì)算得到)決定選擇Winner 濾波器還是SelfGuided 濾波器[5,13]。
圖3 Loop Restoration處理流程
Winner 濾波器采用兩個(gè)一維濾波器級(jí)聯(lián)來(lái)實(shí)現(xiàn)濾波功能,即先進(jìn)行7 階水平對(duì)稱(chēng)濾波,然后再進(jìn)行7 階垂直對(duì)稱(chēng)濾波。7 階水平濾波如圖4 所示,由于后面有垂直7 階濾波,因此在進(jìn)行水平濾波時(shí)需要向上和下各擴(kuò)展3 行,其中黑色部分表示當(dāng)前要濾波的4×4 塊,深灰色塊表示當(dāng)前正在濾波的位置,深灰色塊左右各3 個(gè)數(shù)據(jù)表示濾波時(shí)需要用到的鄰域數(shù)據(jù)。在獲取鄰域數(shù)據(jù)時(shí),若正在進(jìn)行水平濾波的位置和黑色4×4 塊屬于不同stripe(如圖4(a)的上半部分所示),則采用CDEF 濾波前的數(shù)據(jù)進(jìn)行水平一維濾波;若正在進(jìn)行水平濾波的位置和黑色4×4 塊屬于同一個(gè)stripe(如圖4(a)的下半部分所示),則采用CDEF 濾波后的數(shù)據(jù)進(jìn)行水平一維濾波。
圖4 Winner濾波器濾波原理示意圖
在進(jìn)行完水平濾波后,得到中間變量h_filter[10][4]的中間數(shù)據(jù),然后對(duì)該數(shù)據(jù)進(jìn)行7 階對(duì)稱(chēng)的一維垂直濾波,從而得到最終的Winner 濾波結(jié)果,如圖4(b)所示。
對(duì)于Winner 濾波器的處理過(guò)程,其ASIC 的實(shí)現(xiàn)如圖5 所示,其中pixel_0 表示CDEF 濾波前的數(shù)據(jù),pixel_1 表示CDEF 濾波后的數(shù)據(jù),通過(guò)當(dāng)前濾波行的坐標(biāo)y和stripeStartY 的比較結(jié)果判斷選擇pixel_0還是pixel_1。interRound0 表示四舍五入的小數(shù)位數(shù);hfilter[7]表示水平濾波的7 個(gè)抽頭系數(shù),可直接根據(jù)unitRow 和unitCol 對(duì)熵解碼模塊解析出的濾波系數(shù)LrWinner 進(jìn)行查表得到。
圖5 Winner濾波器中水平濾波器的ASIC實(shí)現(xiàn)
進(jìn)行完水平濾波器后,需要對(duì)水平濾波的結(jié)果再進(jìn)行垂直7 階濾波。垂直濾波器的實(shí)現(xiàn)和水平濾波器的實(shí)現(xiàn)很類(lèi)似,只是濾波用到的抽頭系數(shù)vfilter[7]和四舍五入的位數(shù)interRound1 有所不同,因此其ASIC 的實(shí)現(xiàn)這里不再贅述。
根據(jù)AV1 標(biāo)準(zhǔn)可知,SelfGuided 濾波器首先采用兩個(gè)box濾波器,以得到兩個(gè)濾波結(jié)果flt0和flt1,然后再對(duì)flt0 和flt1 進(jìn)行線性組合,從而得到SelfGuided濾波器的最終結(jié)果,處理流程如圖6 所示[13-15]。
圖6 selfGuided濾波器處理流程
每個(gè)box 濾波器是由兩個(gè)濾波器級(jí)聯(lián)而成。對(duì)于flt0 的box 濾波,第一級(jí)濾波首先把當(dāng)前4×4 的數(shù)據(jù)塊擴(kuò)展成5×5 的數(shù)據(jù)塊,以保證第二級(jí)的3×3 二維濾波器在對(duì)當(dāng)前的4×4 塊進(jìn)行濾波時(shí)能取到鄰區(qū)數(shù)據(jù),如圖7(a)所示,其中黑色塊表示當(dāng)前4×4 數(shù)據(jù)塊,淺灰色塊表示在4×4 數(shù)據(jù)塊周?chē)鷶U(kuò)展的數(shù)據(jù),最終和黑色塊一起形成了5×5 的數(shù)據(jù)塊;然后再對(duì)這5×5數(shù)據(jù)塊上的每個(gè)數(shù)據(jù)進(jìn)行5×5 的二維濾波,得到中間結(jié)果A[6][6]和B[6][6],如圖7(b)所示,其中深灰色塊表示當(dāng)前正在濾波的位置,其周?chē)?×5 表示濾波用到的鄰域數(shù)據(jù)[16]。
圖7 box filter0內(nèi)5×5二維濾波示意圖
在計(jì)算得到A[6][6]和B[6][6]后,需要分別對(duì)A[6][6]和B[6][6]在原始4×4 數(shù)據(jù)塊的位置上進(jìn)行3×3 的二維濾波,得到數(shù)據(jù)a 和b,如圖8 所示;然后根據(jù)公式(1),利用a 和b 對(duì)4×4 塊上的數(shù)據(jù)進(jìn)行線性縮放,從而得到box filter0 的最終濾波結(jié)果flt0[4][4]。式(1)中,curr_pixel 表示4×4 塊上的每個(gè)位置的像素值,i和j的取值范圍都是0~3。
對(duì)于flt1 的Box 濾波,其濾波過(guò)程和flt0 類(lèi)似,不同的是把4×4 數(shù)據(jù)塊擴(kuò)展成5×5 的數(shù)據(jù)塊后,然后對(duì)5×5 數(shù)據(jù)塊的每個(gè)數(shù)據(jù)進(jìn)行3×3 的二維濾波,而不是5×5 的二維濾波,因此這里不再贅述。
圖8 A[6][6]和B[6][6]3×3二維濾波示意圖
通過(guò)box filter 后得到濾波結(jié)果flt0[4][4]和flt1[4][4]后,然后通過(guò)線性組合得到最終的selfGuided 濾波器的濾波結(jié)果,即selfGuided[4][4]。根據(jù)AV1 標(biāo)準(zhǔn)可知,其ASIC實(shí)現(xiàn)如圖9所示,其中的個(gè)參數(shù)說(shuō)明如下:
1)LrSgrXqd 由前級(jí)的熵解碼模塊計(jì)算得到的一個(gè)數(shù)組數(shù) 據(jù),w0 和w1 可通過(guò)unitRow 和unitCol 對(duì)LrSgrXqd 數(shù)組查表得到。
2)set 可 通 過(guò)unitRow 和unitCol 對(duì)LrSgrSet 數(shù) 組查表得到,且Sgr_Params 為各個(gè)元取值固定的一組數(shù)組,r0 和r1 可 通過(guò)參數(shù)set 對(duì)Sgr_Params 數(shù)組查表得到。
圖9 flt0[4][4]和flt1[4][4]線性組合ASIC實(shí)現(xiàn)框圖
AV1 是由AOM 組織提出的、目前國(guó)際上壓縮效率最高的視頻壓縮標(biāo)準(zhǔn)。文中詳細(xì)闡述和分析了Loop Restoration 濾波器中各個(gè)步驟的實(shí)現(xiàn)原理和物理意義,最終用加法器和移位操作代替乘法器,給出了Loop Restoration 濾波器的ASIC 最優(yōu)實(shí)現(xiàn),大大節(jié)省了ASIC 實(shí)現(xiàn)過(guò)程中的資源消耗,對(duì)工程實(shí)現(xiàn)有較大的參考意義,有較強(qiáng)的商業(yè)應(yīng)用價(jià)值。