去塊效應濾波器的結(jié)構(gòu)設計
引言
avc/h.264 標準為新一代全球性互操作標準奠定了技術(shù)基礎,得到了廣播、電信、移動通信和流媒體等領域的廣泛關注,在低碼率傳輸中尤其表現(xiàn)突出。為了消除方塊效應以獲得最佳的主觀視覺效果,h.
264標準引入了去方塊濾波器。它是一種自適應濾波器,不會將真正的圖像輪廓弄得模糊不清,同樣也比普通的fir濾波器要復雜很多。首先需要確定方塊是什么原因造成的,粗燥的量化、相異的運動矢量還是真實輪廓。然后根據(jù)決策器選擇不同類型的濾波器來維持真實輪廓的清晰度而減少方塊效應產(chǎn)生的銳化效果。其中抽頭個數(shù),濾波器系數(shù)的設置以及閾值都是隨編碼方式的不同而各異的。
方塊效應產(chǎn)生的原因
目前,基于塊變換的編解碼器已廣泛應用于靜態(tài)及動態(tài)圖像的壓縮技術(shù)中。在這些編解碼器中,將圖像像素分割成互不重疊的小方塊,然后使用離散dct變換對這些小方塊的數(shù)據(jù)從空間域轉(zhuǎn)換到頻域,然后將所得的dct系數(shù)進行量化、可變長編碼。bdct變換原理是利用圖像的空間相關性,但是由于像素方塊是當作單個整體并分別編碼的,因此編碼過程中并沒有考慮到相鄰塊之間的相關性,從而在重建的圖像中可能會看到方塊邊界。粗燥的量化也是造成方塊效應的原因之一。尤其是當量化步長比較大時,有可能將原來相鄰像素之灰度的連續(xù)變化演變成“臺階”變化,看起來就有“偽邊界”的方塊現(xiàn)象,影響人們的主觀視覺感受。
通過消除或減少方塊現(xiàn)象,圖像質(zhì)量可以大幅度改善。當然增加傳輸帶寬或提高碼率可以獲得更佳的圖像質(zhì)量,但是其代價比較昂貴。另一種方法就是提高退化圖像的主觀質(zhì)量。為了獲得高壓縮率而使用bdct變換,但必須減少隨之產(chǎn)生的偽邊界現(xiàn)象對人們主觀感受的影響。這一過程就是“去除方塊效應”(deblocking)。去方塊效應就是在盡量使圖像總能量保持不變的條件下,把這些“臺階”很高的階躍型變化重新變成“臺階”很小或者近似連續(xù)的變化。
算法
在h.264/avc編解碼器中,去方塊濾波器所處的位置是在反dct變換之后。dct變換采用的方塊大小是4 4,運動估計時采用的最小塊大小也是4 4,所以去方塊效應濾波同樣應用于大小為4 4的方塊邊緣。根據(jù)h.264/avc,濾波順序是按照宏塊(microblock)順序進行的,各個宏塊的亮度、色度數(shù)據(jù)都要進行濾波。先從左至右對豎直邊界進行濾波,隨后從上至下對水平邊界進行濾波,如圖1所示。
消除豎直邊界上的偽邊界現(xiàn)象時,參與濾波的有當前宏塊的數(shù)據(jù)、其左側(cè)宏塊中與當前宏塊相鄰的四小塊數(shù)據(jù)。同樣的,消除水平邊界上的偽邊界現(xiàn)象時,參與濾波的有當前宏塊的數(shù)據(jù)、其上方宏塊中與當前宏塊相鄰的四小塊數(shù)據(jù)。
濾波過程是可選的,邊緣強度(boundary strength,bs)的可能值為0、1、2、3、4。圖2是用于確定 bs 的判決樹。
從邊緣強度判決樹的結(jié)構(gòu)可以發(fā)現(xiàn)強度的大小主要取決于編碼中產(chǎn)生的殘差大小。幀內(nèi)編碼時由于幀內(nèi)預測所涉及的參考像素相對較少,產(chǎn)生的殘差通常比幀間編碼要大。因此對殘差變換量化后產(chǎn)生的誤差就比較大,塊邊緣就有可能存在較強的虛假邊界。此時
bs = 4 或3。而幀間預測相對比較準確,殘差較小,所以邊緣強度也較小。當運動搜索的時候找到完全一樣的參考塊時,殘差的變換系數(shù)為0,此時相鄰兩個像素塊如果使用的參考塊在同一幀內(nèi)并且也相鄰,在解碼后邊界上就不會出現(xiàn)不連續(xù)的現(xiàn)象,因此不需要濾波,也就是
bs = 0 的情況。參考塊不相鄰則 bs=1。如果參考塊和當前塊并不完全相同時,變換系數(shù)不為 0,則bs = 0。色度塊的邊緣強度與亮度宏塊中相應位置的邊緣強度一致。
圖3是跨塊邊界像素圖。對于每次濾波操作,位于邊界兩側(cè)的八個像素 (p0,p1,p2,p3 及 q0,q1,q2,q3) 將輸入到濾波器。
只有當位于塊邊界兩側(cè)的采樣數(shù)據(jù)同時滿足以下四個條件時才進行濾波處理:其中 、 是與量化參數(shù)qp有關的閾值。當bs確定后,主要有兩種類型的濾波處理過程。當0< bs <4時,一般情況下都會修改 p0、q0的值,而亮度塊中的p1、q1可能會更改。當bs = 4時,濾波器可能是三抽頭、四抽頭或五抽頭的。同時根據(jù)八個采樣數(shù)據(jù)以及跟qp有關的一些參數(shù),對不同位置上的像素分別應用不同抽頭的濾波器。
結(jié)構(gòu)設計
圖4中,我們將整個宏塊分割成大小為4 4的方塊,亮度部分有16個,色度部分共有8個。并且整個宏塊的所有數(shù)據(jù)(亮度、色度部分)分成三大部分,第一部分(i)是亮度模塊的0-7塊數(shù)據(jù),第二部分(ii)是亮度部分模塊中的8-15塊數(shù)據(jù),第三部分(iii)是色度模塊的cb、cr數(shù)據(jù)。
根據(jù)h.264視頻標準中的描述,先進行跨豎直邊界上的水平方向濾波,然后是跨水平邊界上的豎直方向濾波,可以得到最基本的濾波順序,如圖5所示。
反dct變換后,每個像素的取值范圍是0~255,可以按8位存儲。將一小塊同一行上四個像素的值拼接組合成一個32位的單元,正好可以存儲于32位數(shù)據(jù)寬度的存儲器并在32位的數(shù)據(jù)總線上傳送。由前端反dct變換模塊輸入至塊效應消除模塊ram的空間大小為1688位,因此同時只有上述i、ii、iii部分中的一個部分數(shù)據(jù)可以存儲到緩存區(qū)中供使用。
考慮如果按照基本的濾波順序運行去方塊濾波程序時,沒有充分利用相鄰4 4數(shù)據(jù)之間的相關性,譬如完成“1”濾波后需要將其右側(cè)方塊的數(shù)據(jù)寫回ram中,等到要進行“5”之前再從ram中讀取將這個方塊的數(shù)據(jù)。對于每一個方塊都要從ram中讀取數(shù)據(jù),完成濾波后還需要將數(shù)據(jù)寫回至相應的地址,如此頻繁讀取ram,對ram的帶寬要求比較高。因此提出了一種改進的濾波順序,如圖6所示。
如果當前處理的是i部分數(shù)據(jù),則依次執(zhí)行序號為1 - 16號濾波過程;如果處理第ii部分數(shù)據(jù),則執(zhí)行序號為17 - 32號濾波步驟;若處理色度模塊數(shù)據(jù)即iii部分時,則執(zhí)行序號為33
- 40號濾波步驟。
一般來說,每個4 4塊會經(jīng)過四次去方塊濾波過程。采用改進的濾波順序時,如果4 4塊尚未完成所有的濾波處理,則這些塊可以存儲到一些buffer或寄存器中。例如:當執(zhí)行完上圖中的“1”后,不需要將右側(cè)方塊數(shù)據(jù)回送至ram中而是先在buffer中暫存一下,以便在執(zhí)行“2”時可以直接從buffer中讀取。同樣當執(zhí)行完“2”后將左側(cè)的數(shù)據(jù)存放至寄存器(re)組中,右側(cè)方塊的數(shù)據(jù)替換buffer中的數(shù)據(jù)。這樣做減少ram的訪問次數(shù),可以提高整個濾波器模塊的處理速度。
圖7中l(wèi)uma_mem、chroma_mem、prediction_mem,output_mem均是采用32位數(shù)據(jù)線的ram。luma_mem、chroma_mem中分別存儲當前處理宏塊上方4行,左側(cè)4列像素的亮度及色度數(shù)據(jù)。prediction_mem中存儲由前端預測模塊輸入至此的、位于當前宏塊的一部分數(shù)據(jù),也即前文中講述的第i、第ii或第iii部分的數(shù)據(jù)。 而output_mem中是用于存儲經(jīng)過濾波處理的輸出數(shù)據(jù),包括當前宏塊上方四行、左側(cè)四列數(shù)據(jù)及當前宏塊數(shù)據(jù)。
get_strength模塊的功能是按照h.264視頻標準中的描述,根據(jù)相鄰塊與本塊像素的編碼方式等參數(shù)得出邊界強度(bs)。do_filter模塊則是處理八個采樣數(shù)據(jù)的濾波過程。 根據(jù)計算,完成整個宏塊的去塊效應濾波需要近500個周期,而不采用buffer及re寄存器組的結(jié)構(gòu)由于每次濾波都需要從ram中讀取數(shù)據(jù),完成之后又需要將數(shù)據(jù)寫回至ram中,消耗了很多時鐘周期在讀寫ram上。可見結(jié)構(gòu)設計具有一定的可行性。
驗證與仿真
為了驗證濾波器結(jié)構(gòu)的正確性,已經(jīng)在c 語言環(huán)境下進行了測試并通過。上述結(jié)構(gòu)也將用硬件描述語言verilog hdl代碼加以實現(xiàn)并進行仿真。
結(jié)論
本文首先分析了動態(tài)圖像中“虛假邊緣”產(chǎn)生的原因,簡單介紹h. 264標準中清除方塊效應的算法,然后提出了一種用于實現(xiàn)該濾波器的大規(guī)模集成電路結(jié)構(gòu)。這種結(jié)構(gòu)充分利用相鄰塊數(shù)據(jù)之間的相關性,通過增加寄存器組暫存數(shù)據(jù)來減少對ram的訪問次數(shù),從而可以提高該濾波器的運行速度。這種結(jié)構(gòu)對h.264編解碼器具有一定的實用價值。
評論