路偉,余寧梅,南江涵,王冬芳
(西安理工大學 自動化與信息工程學院,陜西 西安 710048)
HEVC(High Efficiency Video Coding)圖像編碼是基于圖像塊進行的DCT/DST(Discrete Cosine Transform/Discrete Sine Transform)變換量化的,因而會導致圖像塊的邊界處重構像素的精度低于塊內部重構像素數(shù)據(jù)的精度,從而導致了邊緣塊效應。這種塊效應會影響到編碼壓縮的效率,也會影響到解碼出圖像的清晰度。因此是當前的高清視頻編解碼技術所必須考慮的一個重要問題。去塊濾波技術可以在不明顯影響圖像內容的情況下去除方塊效應的影響,顯著提高重構圖像的主客觀質量,是改善圖像塊效應的有效方法。文獻[1]針對H.264與HEVC去塊濾波算法的異同進行了研究,并列出相關數(shù)據(jù)說明了HEVC中去塊濾波算法的低碼率方面優(yōu)于H.264。文獻[2]針對HEVC的算法,提出了一種基于判決條件的快速算法,用來確定其濾波強度以及濾波方式。文獻[3]針對需要濾波塊中像素點間的相關性,提出了一種低復雜度的感知優(yōu)化,用以降低濾波器的計算復雜度。文獻[4]是最新的草案定稿版,將歷屆會議提案中有關去塊濾波部分的最優(yōu)算法列入其中,提高了去塊濾波處理效率。但是,以上研究都在算法層面展開。由于 HEVC是靠增加編碼復雜度來獲得編碼效率的提升,編解碼時間也隨之大幅增加。采用軟件對圖像進行去塊濾波處理,處理時間過長,不能滿足實時處理要求。為了提高處理速度,采用硬件加速的方式勢在必行。在HEVC編解碼系統(tǒng)中,去塊濾波是非常重要也是占用編碼時間多的模塊之一,對HEVC去塊濾波模塊的VLSI實現(xiàn)進行研究,提高超高清視頻的編碼速度具有重要意義。在HEVC去塊濾波的VLSI研究方面,文獻[5]采用四級流水線結構,完成了濾波邊界的判斷、濾波強度判斷、參數(shù)選取、強弱濾波的實現(xiàn),同時采用內存交互技術根據(jù)濾波順序進行數(shù)據(jù)調度,增大了濾波數(shù)據(jù)的吞吐率。但是,內存交互技術和流水線中模塊的計算有著密切的關系,在數(shù)據(jù)流控制上比較困難,并且容易造成數(shù)據(jù)地址錯誤的情況。文獻[6]采用由水平和垂直兩個方向組成的8×8寄存器陣列來計算四叉樹子塊的邊界濾波。并且采用總線技術將多種分割模式的濾波塊逐一調度,利用寄存器陣列進行濾波計算。但是,這種總線調度寄存器陣列結構在SOC系統(tǒng)中有一定瓶頸,并且易受DDR控制器帶寬和總線帶寬的約束,對數(shù)據(jù)處理有一定局限性。
基于以上原因,本文對HEVC去塊濾波算法結構進行分析,設計了轉置矩陣模塊。在不改變算法濾波順序的基礎上,采用轉置模塊對數(shù)據(jù)進行暫存,以此減少數(shù)據(jù)重復讀取操作,進而解決了ASIC架構中去塊濾波模塊面積資源消耗大的問題。
HEVC去塊濾波是為了減少各單元(CU(Coding Unit)、PU(Prediction Unit)、TU(Transform Unit))邊界的塊效應而采用的一種濾波方式。HEVC為了利于簡化硬件設計和并行處理,將濾波的基本單元設置為8×8塊大小的單元。由于CU、PU、TU是按照四叉樹分割方式將LCU(Largest Coding Unit)從64×64大小的塊分為32×32、16×16、8×8大小,從而對相應的邊界進行去塊濾波處理[7]。去塊濾波的方式如圖1所示,圖1中每個黑色的圓點代表了單元塊中的一個像素點(Sample)。圖1由6個8×8大小的塊組成了待濾波的區(qū)域,其中Block of 8×8 sample指向了其中一個8×8塊。6個8×8塊中的兩個方框是需要進行濾波的兩個濾波區(qū)域(Can be deblocked),圖1標出了需要進行濾波的位置,分別是水平邊界(Horizontal boundary)和垂直邊界(Vertical boundary)[8]。由圖1可以看出,垂直邊界和水平邊界都在需要濾波的區(qū)域中,并且兩個需要濾波區(qū)域的參考像素點Sample是互不相關的,即這兩個濾波區(qū)域可以單獨完成濾波。
圖1 PU濾波方式
HEVC去塊濾波的基本單元塊是8×8塊,其邊界選擇在8×8塊邊界區(qū)域,每個8×8塊的邊界分別和自己相鄰的8×8塊邊界組成了去塊濾波的邊界,如圖1所示。左邊需要濾波區(qū)域由四個相鄰的8×8塊組成的濾波邊界。依次是左上8×8塊的右下4×4塊,中上8×8塊的左下4×4塊,左下8×8塊的右上4×4塊,中下8×8塊的左上的4×4塊。這4個4×4塊的相鄰邊界分別組成了垂直邊界(Vertical boundary)和水平邊界(Horizontal boundary)[9]。得到的濾波基本單元塊,如圖2所示。首先對垂直邊界進行濾波,會用到水平方向的8行數(shù)據(jù),P3iP2iP1iP0i, Q0iQ1iQ2iQ3i(i=0…7)。垂直邊界濾波完成后,需要對水平邊界進行濾波。此時,需要用到之前經(jīng)過濾波后,垂直方向的8列數(shù)據(jù),Pij(i=3,2,1,0.j=0…7)和Qij(i=3,2,1,0,j=0…7)。水平邊界的濾波完成后,就可將得到去塊濾波后的最終數(shù)據(jù)。
圖2 去塊濾波的邊界
其濾波的算法是采用P和Q點進行濾波。下面以一行(列)為例說明:
強濾波:
p0′=(p2+2·p1+2·p0+2·q0+q1+4)?3
(1)
q0′=(p1+2·p0+2·q0+2·q1+q2+4)?3
(2)
p1′=(p2+p1+p0+q0+2)?2
(3)
q1′=(p0+q0+q1+q2+2)?2
(4)
p2′=(2·p3+3·p2+p1+p0+q0+4)?3
(5)
q2′=(p0+q0+q1+3·q2+2·q3+4)?3
(6)
弱濾波:
Δ定義為:
Δ=(9·(q0-p0)-3·(q1-p1)+8)?4
(7)
當abs(Δ)小于tc·10時,有:
Δ=Clip3(-tc,tc,Δ)
(8)
p0′=Clip1(p0+Δ)
(9)
q0′=Clip1(q0-Δ)
(10)
如果dEp1 = 1,則:
Δp=Clip3(-tc?1),tc?1,(((p2+p0+1)?1)-p1+Δ)?1)
(11)
p1′=Clip1(p1+Δp)
(12)
如果dEq1=1,則:
Δq=Clip3(-tc?1),tc?1,(((q2+q0+1)?1)-q1-Δ)?1)
(13)
q1′=Clip(q1+Δq)
(14)
其中p1′和q1′(i=0,1,2)是濾波后的像素值。
由以上算法原理可知,HEVC濾波將CU、PU、TU按照四叉樹方式分割并對邊界進行濾波,并且劃分出來的每個需要濾波單元都是相互獨立的[10]。根據(jù)這一原理,本研究設計了圖3所示濾波單元數(shù)可配置的并行濾波結構。首先,通過Local bus得到重構數(shù)據(jù)及相應的參數(shù)(參數(shù)中包含有LCU經(jīng)四叉樹的分割信息),將重構數(shù)據(jù)及相應的參數(shù)暫存到Temp SRAM中。通過Control控制器將重構數(shù)據(jù)中需要濾波的CU塊及參數(shù)信息存入Curr CU中。在Curr CU模塊中根據(jù)分割參數(shù)信息,將CU塊按照預測分割方式分成了多個PU塊,將這些PU塊及參數(shù)按照順序依次送入Sep 8×8模塊。在Sep 8×8中將PU塊按照四叉樹分割方式分割到8×8大小塊為止。從8×8塊中取出需要進行濾波的數(shù)據(jù)及相應的參數(shù),并將其排序,依次送入下面的Filter Unit中。Filter Unit模塊接收需要進行濾波的數(shù)據(jù)及相關的參數(shù)信息進行濾波處理。這里采用可配置并行處理的方式,設置了N個濾波處理單元Filter Unit進行并行處理。N的數(shù)值越大,F(xiàn)ilter Unit單元數(shù)越多,可同時處理濾波單元就越多,處理濾波數(shù)據(jù)的速度越快,吞吐量越大。反之,N的數(shù)值越小,F(xiàn)ilter Unit單元數(shù)越小,可同時處理濾波單元就越少。對于一個LCU會有若干個邊界需要濾波,其中32×32分割塊的邊界有8個8×8的邊界,垂直邊界和水平邊界各4個,16×16、8×8分割塊分別含有4個和2個8×8邊界。為了保證分割塊能夠按照算法中給定的順序進行處理,將設計中的濾波單元數(shù)量N設置為2的倍數(shù)。將濾波的順序進行排序依次處理。假設Filter Unit單元數(shù)為4,當待處理的分割塊為32×32、16×16、8×8時,一次可進行的水平或者垂直濾波的分割塊數(shù)分別為1、2和4個。各個Filter Unit單元處理完成后得到了濾波后的數(shù)據(jù),通過Control控制Data out模塊,N個并行的濾波數(shù)據(jù)按照之前定義的順序輸出數(shù)據(jù)。
圖3 去塊濾波結構圖
HEVC去塊濾波單元硬件系統(tǒng)的核心模塊有:濾波強度計算模塊(BS Calculation)、亮度塊濾波模塊(Luma Filter)、色度塊濾波模塊(Chroma Filter)、轉置模塊(Transpose)、數(shù)據(jù)供給和控制模塊(Data Provide & Control)和數(shù)據(jù)緩存(SRAM)。
去塊濾波單元結構和模塊間的數(shù)據(jù)流走向如圖4所示,即:
① 將重構圖的PU或者TU中需要進行濾波的像素點和相應的參數(shù)值輸入RFs暫存,等待濾波處理。RFs保存了待濾波的數(shù)據(jù)和相應的參數(shù)值。
② 待濾波的像素點和參數(shù)準備好后,將8×8的每行(列)的8個像素信息,經(jīng)由Data Provide & Control模塊傳輸給BS Calculation模塊進行相應行(列)濾波強度值計算。此處需要根據(jù)整體編碼器中的幀內、幀間模式以及相鄰快的信息進行判斷。具體處理的方式為,當BS=2時使用強濾波、當BS=1時使用弱濾波、當BS=0時不濾波。具體判斷方式如圖5所示。
圖4 去塊濾波單元硬件結構
圖5 BS計算流程圖
對于當前塊Q或相鄰塊P為幀內預測模式且邊界為宏塊邊界的BS=2,即為強濾波。當前塊Q或相鄰塊P有非零coeff、當前塊Q或相鄰塊P有不同的參考像素、當前塊Q或相鄰塊P有不同的MVS、|MV_P - MV_Q|>=4,符合這幾種情況的BS=1,即為弱濾波。凡不屬于以上幾種情況的BS=0,即為不濾波。
③ 當整個8×8塊的濾波強度值計算完畢后,會返回Data Provide & Control模塊一個濾波強度值,這個濾波強度值決定了接下來要采用的濾波是強濾波還是弱濾波。
④ 濾波強度計算完成后,系統(tǒng)開啟Luma filter,向其中每次輸入8行8個亮度像素信息以及已經(jīng)準備好的亮度邊界濾波強度值。經(jīng)過濾波計算后,8×8亮度塊重新返回至Data Provide & Control模塊內。
⑤ 4×4色度濾波與亮度濾波相似。每次向Chorma filter輸入4行4個色度像素信息和色度邊界濾波強度值。經(jīng)過濾波計算后,4×4色度塊重新返回至Data Provide & Control模塊內。
⑥ 由于每次只能進行垂直濾波或者水平濾波,因此,按照濾波順序,需要將8行亮度塊的像素點和4行色度塊的像素點先進行垂直濾波。濾波完成后,會被輸入至Transpose模塊內,進行像素矩陣轉置。經(jīng)過轉置的模塊會被暫時存入SRAM中,用于水平濾波。
⑦ 當所有亮度塊垂直邊界濾波完成,且經(jīng)過轉置存入SRAM后,Data Provide & Control模塊會提取SRAM中經(jīng)過轉置的亮度塊,輸入亮度濾波模塊,進行水平濾波。從步驟2開始重復上面的操作,完成水平濾波。同樣,色度濾波也會有這樣的操作。
HEVC算法中去塊濾波的順序是,首先,對LCU的所有CU、PU、TU的垂直邊界進行濾波,將濾波后的數(shù)據(jù)存入外部存儲。當所有垂直邊界濾波完成后,用已經(jīng)垂直濾波完成后的sample值對LCU的所有CU、PU、TU的水平邊界進行濾波。硬件設計中如果按照算法的順序進行濾波設計,垂直濾波后的數(shù)據(jù)需要通過Local Bus進行存儲。當所有的垂直邊界濾波完成后,需要再次通過Local Bus調取垂直邊界濾波完成后的數(shù)據(jù)進行水平濾波。這樣會使得系統(tǒng)需要對Local Bus進行數(shù)據(jù)讀和取操作,從而影響系統(tǒng)的處理速度。為了能夠讓垂直濾波后的數(shù)據(jù)不需要通過Local Bus存入外部存儲,而直接被水平濾波使用。本文對垂直邊界濾波完成后的數(shù)據(jù)進行轉置、暫存的操作,從而使垂直邊界濾波完成后的數(shù)據(jù)進行后續(xù)水平邊界濾波的處理操作。采用這種設計可以提高數(shù)據(jù)利用率,增加模塊的復用性,減少對于外部存儲的依賴,使得去塊濾波系統(tǒng)變的高效。
圖6給出了以4×4為例的色度轉置模塊結構圖。首先,垂直濾波完成后的數(shù)據(jù)存入Data in中,數(shù)據(jù)保存并由Control模塊控制,每次只讀出4×4塊的一行數(shù)據(jù)。將讀出的第一行數(shù)據(jù)送給Data buffer 1。Data buffer1按照一行相應的位置送入移位寄存器模塊分別是0、1、2、3,同時第二行數(shù)據(jù)進入Data buffer 1。經(jīng)過一個時鐘周期后,第二行的Data buffer 1數(shù)據(jù)按照行相應的位置送入移位寄存器模塊0、1、2、3,而此時第一行的0、1、2、3內的數(shù)據(jù)移位到相應位置4、5、6、7。依次類推,4個時鐘周期運算后一個4×4塊就可以完成寄存器組的移位。然后,將0、4、8、12送入Data buffer 2,同時將后面列依次向左移位。經(jīng)過一個時鐘周期后,Data buffer 2將數(shù)據(jù)按照順序傳給Data out 1,就得到了第一列的數(shù)據(jù)。此時,下一個色度塊的第一行數(shù)據(jù)從Data buffer 1給3、7、11、15。依次類推,4個時鐘周期后就得到4個列的數(shù)據(jù),此時下一個色度塊的數(shù)據(jù)已經(jīng)全部在寄存器組中,Control控制寄存器組向下移位,重復以上操作,從Data buffer 3輸出給Data out 2。依次循環(huán)下去。
按照以上步驟就可以實現(xiàn)濾波的轉置,并且是按照流水級運行,能夠提高數(shù)據(jù)處理能力。對于亮度8×8塊,需要將寄存器組設計為8×8,原理與色度轉置模塊一致。
圖6 色度轉置模塊
本文以HEVC去塊濾波算法為基礎,研究設計了去塊濾波的VLSI實現(xiàn)方式,利用8×8濾波塊可獨立進行濾波的特性,設計了可調濾波單元個數(shù)的并行結構??膳渲脼V波單元數(shù)為N個,N越大濾波單元越多,處理效率越高,吞吐率越大,但面積會增加;N越小濾波單元越小,處理效率和吞吐率會下降,但面積會減少。根據(jù)算法中分割塊濾波邊界的特點,對采用可配置濾波單元數(shù)進行計算,得到表1所示數(shù)據(jù)。可看到,隨著N的增加,門數(shù)、吞吐率、處理能力也有所增加。
在設計過程中分別對N=1、2、4、6、8時的設計進行了綜合,得到了相應的門數(shù)。對于吞吐率的計算本研究根據(jù)設計中采用流水線技術,每個濾波單元可處理相應的一個塊的一行(列)數(shù)據(jù)。本研究首先計算出N=4時的吞吐率約為1.1 GB/s,再根據(jù)每個濾波單元能夠處理261 MB/s的數(shù)據(jù)得出N為其他值時的吞吐率。處理能力是在相應吞吐率基礎上計算得到。
表1 N配置表
本文采用了轉置矩陣的方式對數(shù)據(jù)進行暫存,而并非采用直接將每行(列)計算完的數(shù)據(jù)先存儲起來。等所有的行(列)的數(shù)據(jù)都計算完后,再對數(shù)據(jù)按照行、列轉置的方式依次輸入給濾波模塊計算下一步的列(行)的數(shù)據(jù)。因此,這樣可在存儲單元上減少一定的面積。結合可配置濾波單元數(shù)的方式,當要達到高效處理數(shù)據(jù)單元的時候存儲單元減少的面積數(shù)就會更多。
為了能夠保證高清視頻編碼4 K視頻序列的流暢性的最低要求,幀率需要每秒達到30幀。本文采用N=4,即4個并行的濾波處理單元進行處理操作,這樣可用相對較小的硬件資源消耗達到流暢性的最低要求。在此配置下,表2說明了本研究的設計和參考文獻的比較。相同工藝參數(shù)下,比文獻[5]所提及的門數(shù)少、處理能力高。比文獻[6]門數(shù)多5.7 K,但是數(shù)據(jù)吞吐率和處理能力都比文獻[6]高。
表2 資源消耗表
1)以HEVC去塊濾波算法為基礎,設計了去塊濾波的VLSI實現(xiàn)方式。
2)利用濾波塊間相互獨立進行濾波的特性,設計了可配置濾波單元個數(shù)的并行結構,給出了實現(xiàn)框圖。并針對濾波先垂直后水平的濾波順序,設計了轉置模塊,將垂直濾波后的數(shù)據(jù)進行轉置。為了避免使用系統(tǒng)總線進行數(shù)據(jù)重復讀取,而有可能降低系統(tǒng)處理數(shù)據(jù)的效率,把轉置后的數(shù)據(jù)暫存在SRAM中,為水平濾波提供實時的數(shù)據(jù),以提高流水線運行效率。
3)使用 SMIC 0.13 μm的工藝庫參數(shù),綜合后在300 MHz下,配置濾波單元數(shù)為4個,系統(tǒng)總門數(shù)為59.7 K,可以實時處理3840×2160@33fps的圖像序列。
參考文獻:
[1]Zhou M, Sze V, Mastuba Y.A study on HEVC parsing throughput issue:joint collaborative team on video coding[C].Torino, JCTVC-F068, 2011.
[2]Sullivan G J, Ohm J R, Han W J, et al.Overview of the high efficiency video coding (HEVC) standard[J].IEEE Transcation Circuits and Systems for Video Technology, 2012, 22(9): 1649-1668.
[3]Naccari M B, Ascenso C.Low complexity deblocking filter perceptual optimization for the HEVC code:2011 18th IEEE international conference on image processing (ICIP)[C].Brussels,2011:159-163.
[4]Bross B, Han W J, Ohm J R, et al.High efficiency video coding (HEVC) text specification draft 10 (for FDIS & Consent):JCTVC-L1003_v25[C].Geneva ,2013:190-220.
[5]Shen weiwei, Shang Qing, Shen Sha, et al.A high-throughput VLSI architecture for deblocking filter in HEVC:IEEE international symposium on circuits and systems (ISCAS)[C].Beijing:China,2013:673-676.
[6]Jongwoo B.Register array-based VLSI architecture of H265/HEVC loop filter[J].IEICE Electronics Express,2013, 10(7):1-9.
[7]Ohm J R, Sullivan G J, Schwarz H, et al.Comparison of the coding efficiency of video coding standards including high efficiency video coding (HEVC)[J].IEEE Transactions on Circuits and Systems for Video Technology, 2012, 22(12): 1669-1684.
[8]Bross B, Han W J, Ohm J R,et al.High efficiency video coding (HEVC) text specification draft 10 (for FDIS & Consent):JCTVC-L1003[C].Geneva ,2013: 179-201.
[9]Bossen F, Bross B, Sühring K.et al.HEVC complexity and implementation analysis[J].IEEE Transactions on Circuits and Systems for Video Technology, 2012, 22(12): 1550-1561.
[10]Andrey Norkin, Gisle Bj ntegaard, Arild Fuldseth HEVC deblocking filter[J].IEEE Transactions on Circuits and Systems for Video Technology, 2012, 22(12):1801-1809.