新聞中心

EEPW首頁 > 設(shè)計(jì)應(yīng)用 > 去塊效應(yīng)濾波器的結(jié)構(gòu)設(shè)計(jì)

去塊效應(yīng)濾波器的結(jié)構(gòu)設(shè)計(jì)

——
作者:同濟(jì)大學(xué) 張婉 時(shí)間:2007-01-26 來源:《世界電子元器件》 收藏

引言

avc/h.264 標(biāo)準(zhǔn)為新一代全球性互操作標(biāo)準(zhǔn)奠定了技術(shù)基礎(chǔ),得到了廣播、電信、移動(dòng)通信和流媒體等領(lǐng)域的廣泛關(guān)注,在低碼率傳輸中尤其表現(xiàn)突出。為了消除方塊效應(yīng)以獲得最佳的主觀視覺效果,h. 264標(biāo)準(zhǔn)引入了去方塊濾波器。它是一種自適應(yīng)濾波器,不會(huì)將真正的圖像輪廓弄得模糊不清,同樣也比普通的fir濾波器要復(fù)雜很多。首先需要確定方塊是什么原因造成的,粗燥的量化、相異的運(yùn)動(dòng)矢量還是真實(shí)輪廓。然后根據(jù)決策器選擇不同類型的濾波器來維持真實(shí)輪廓的清晰度而減少方塊效應(yīng)產(chǎn)生的銳化效果。其中抽頭個(gè)數(shù),濾波器系數(shù)的設(shè)置以及閾值都是隨編碼方式的不同而各異的。

本文引用地址:http://2s4d.com/article/20768.htm


方塊效應(yīng)產(chǎn)生的原因

目前,基于塊變換的編解碼器已廣泛應(yīng)用于靜態(tài)及動(dòng)態(tài)圖像的壓縮技術(shù)中。在這些編解碼器中,將圖像像素分割成互不重疊的小方塊,然后使用離散dct變換對這些小方塊的數(shù)據(jù)從空間域轉(zhuǎn)換到頻域,然后將所得的dct系數(shù)進(jìn)行量化、可變長編碼。bdct變換原理是利用圖像的空間相關(guān)性,但是由于像素方塊是當(dāng)作單個(gè)整體并分別編碼的,因此編碼過程中并沒有考慮到相鄰塊之間的相關(guān)性,從而在重建的圖像中可能會(huì)看到方塊邊界。粗燥的量化也是造成方塊效應(yīng)的原因之一。尤其是當(dāng)量化步長比較大時(shí),有可能將原來相鄰像素之灰度的連續(xù)變化演變成“臺(tái)階”變化,看起來就有“偽邊界”的方塊現(xiàn)象,影響人們的主觀視覺感受。

通過消除或減少方塊現(xiàn)象,圖像質(zhì)量可以大幅度改善。當(dāng)然增加傳輸帶寬或提高碼率可以獲得更佳的圖像質(zhì)量,但是其代價(jià)比較昂貴。另一種方法就是提高退化圖像的主觀質(zhì)量。為了獲得高壓縮率而使用bdct變換,但必須減少隨之產(chǎn)生的偽邊界現(xiàn)象對人們主觀感受的影響。這一過程就是“去除方塊效應(yīng)”(deblocking)。去方塊效應(yīng)就是在盡量使圖像總能量保持不變的條件下,把這些“臺(tái)階”很高的階躍型變化重新變成“臺(tái)階”很小或者近似連續(xù)的變化。


算法

在h.264/avc編解碼器中,去方塊濾波器所處的位置是在反dct變換之后。dct變換采用的方塊大小是4 4,運(yùn)動(dòng)估計(jì)時(shí)采用的最小塊大小也是4 4,所以去方塊效應(yīng)濾波同樣應(yīng)用于大小為4 4的方塊邊緣。根據(jù)h.264/avc,濾波順序是按照宏塊(microblock)順序進(jìn)行的,各個(gè)宏塊的亮度、色度數(shù)據(jù)都要進(jìn)行濾波。先從左至右對豎直邊界進(jìn)行濾波,隨后從上至下對水平邊界進(jìn)行濾波,如圖1所示。

消除豎直邊界上的偽邊界現(xiàn)象時(shí),參與濾波的有當(dāng)前宏塊的數(shù)據(jù)、其左側(cè)宏塊中與當(dāng)前宏塊相鄰的四小塊數(shù)據(jù)。同樣的,消除水平邊界上的偽邊界現(xiàn)象時(shí),參與濾波的有當(dāng)前宏塊的數(shù)據(jù)、其上方宏塊中與當(dāng)前宏塊相鄰的四小塊數(shù)據(jù)。

濾波過程是可選的,邊緣強(qiáng)度(boundary strength,bs)的可能值為0、1、2、3、4。圖2是用于確定 bs 的判決樹。

從邊緣強(qiáng)度判決樹的結(jié)構(gòu)可以發(fā)現(xiàn)強(qiáng)度的大小主要取決于編碼中產(chǎn)生的殘差大小。幀內(nèi)編碼時(shí)由于幀內(nèi)預(yù)測所涉及的參考像素相對較少,產(chǎn)生的殘差通常比幀間編碼要大。因此對殘差變換量化后產(chǎn)生的誤差就比較大,塊邊緣就有可能存在較強(qiáng)的虛假邊界。此時(shí) bs = 4 或3。而幀間預(yù)測相對比較準(zhǔn)確,殘差較小,所以邊緣強(qiáng)度也較小。當(dāng)運(yùn)動(dòng)搜索的時(shí)候找到完全一樣的參考塊時(shí),殘差的變換系數(shù)為0,此時(shí)相鄰兩個(gè)像素塊如果使用的參考塊在同一幀內(nèi)并且也相鄰,在解碼后邊界上就不會(huì)出現(xiàn)不連續(xù)的現(xiàn)象,因此不需要濾波,也就是 bs = 0 的情況。參考塊不相鄰則 bs=1。如果參考塊和當(dāng)前塊并不完全相同時(shí),變換系數(shù)不為 0,則bs = 0。色度塊的邊緣強(qiáng)度與亮度宏塊中相應(yīng)位置的邊緣強(qiáng)度一致。

圖3是跨塊邊界像素圖。對于每次濾波操作,位于邊界兩側(cè)的八個(gè)像素 (p0,p1,p2,p3 及 q0,q1,q2,q3) 將輸入到濾波器。

只有當(dāng)位于塊邊界兩側(cè)的采樣數(shù)據(jù)同時(shí)滿足以下四個(gè)條件時(shí)才進(jìn)行濾波處理:其中 、 是與量化參數(shù)qp有關(guān)的閾值。當(dāng)bs確定后,主要有兩種類型的濾波處理過程。當(dāng)0< bs <4時(shí),一般情況下都會(huì)修改 p0、q0的值,而亮度塊中的p1、q1可能會(huì)更改。當(dāng)bs = 4時(shí),濾波器可能是三抽頭、四抽頭或五抽頭的。同時(shí)根據(jù)八個(gè)采樣數(shù)據(jù)以及跟qp有關(guān)的一些參數(shù),對不同位置上的像素分別應(yīng)用不同抽頭的濾波器。


結(jié)構(gòu)設(shè)計(jì)

圖4中,我們將整個(gè)宏塊分割成大小為4 4的方塊,亮度部分有16個(gè),色度部分共有8個(gè)。并且整個(gè)宏塊的所有數(shù)據(jù)(亮度、色度部分)分成三大部分,第一部分(i)是亮度模塊的0-7塊數(shù)據(jù),第二部分(ii)是亮度部分模塊中的8-15塊數(shù)據(jù),第三部分(iii)是色度模塊的cb、cr數(shù)據(jù)。

根據(jù)h.264視頻標(biāo)準(zhǔn)中的描述,先進(jìn)行跨豎直邊界上的水平方向?yàn)V波,然后是跨水平邊界上的豎直方向?yàn)V波,可以得到最基本的濾波順序,如圖5所示。

反dct變換后,每個(gè)像素的取值范圍是0~255,可以按8位存儲(chǔ)。將一小塊同一行上四個(gè)像素的值拼接組合成一個(gè)32位的單元,正好可以存儲(chǔ)于32位數(shù)據(jù)寬度的存儲(chǔ)器并在32位的數(shù)據(jù)總線上傳送。由前端反dct變換模塊輸入至塊效應(yīng)消除模塊ram的空間大小為1688位,因此同時(shí)只有上述i、ii、iii部分中的一個(gè)部分?jǐn)?shù)據(jù)可以存儲(chǔ)到緩存區(qū)中供使用。
考慮如果按照基本的濾波順序運(yùn)行去方塊濾波程序時(shí),沒有充分利用相鄰4 4數(shù)據(jù)之間的相關(guān)性,譬如完成“1”濾波后需要將其右側(cè)方塊的數(shù)據(jù)寫回ram中,等到要進(jìn)行“5”之前再從ram中讀取將這個(gè)方塊的數(shù)據(jù)。對于每一個(gè)方塊都要從ram中讀取數(shù)據(jù),完成濾波后還需要將數(shù)據(jù)寫回至相應(yīng)的地址,如此頻繁讀取ram,對ram的帶寬要求比較高。因此提出了一種改進(jìn)的濾波順序,如圖6所示。

如果當(dāng)前處理的是i部分?jǐn)?shù)據(jù),則依次執(zhí)行序號為1 - 16號濾波過程;如果處理第ii部分?jǐn)?shù)據(jù),則執(zhí)行序號為17 - 32號濾波步驟;若處理色度模塊數(shù)據(jù)即iii部分時(shí),則執(zhí)行序號為33 - 40號濾波步驟。
一般來說,每個(gè)4 4塊會(huì)經(jīng)過四次去方塊濾波過程。采用改進(jìn)的濾波順序時(shí),如果4 4塊尚未完成所有的濾波處理,則這些塊可以存儲(chǔ)到一些buffer或寄存器中。例如:當(dāng)執(zhí)行完上圖中的“1”后,不需要將右側(cè)方塊數(shù)據(jù)回送至ram中而是先在buffer中暫存一下,以便在執(zhí)行“2”時(shí)可以直接從buffer中讀取。同樣當(dāng)執(zhí)行完“2”后將左側(cè)的數(shù)據(jù)存放至寄存器(re)組中,右側(cè)方塊的數(shù)據(jù)替換buffer中的數(shù)據(jù)。這樣做減少ram的訪問次數(shù),可以提高整個(gè)濾波器模塊的處理速度。

圖7中l(wèi)uma_mem、chroma_mem、prediction_mem,output_mem均是采用32位數(shù)據(jù)線的ram。luma_mem、chroma_mem中分別存儲(chǔ)當(dāng)前處理宏塊上方4行,左側(cè)4列像素的亮度及色度數(shù)據(jù)。prediction_mem中存儲(chǔ)由前端預(yù)測模塊輸入至此的、位于當(dāng)前宏塊的一部分?jǐn)?shù)據(jù),也即前文中講述的第i、第ii或第iii部分的數(shù)據(jù)。 而output_mem中是用于存儲(chǔ)經(jīng)過濾波處理的輸出數(shù)據(jù),包括當(dāng)前宏塊上方四行、左側(cè)四列數(shù)據(jù)及當(dāng)前宏塊數(shù)據(jù)。

get_strength模塊的功能是按照h.264視頻標(biāo)準(zhǔn)中的描述,根據(jù)相鄰塊與本塊像素的編碼方式等參數(shù)得出邊界強(qiáng)度(bs)。do_filter模塊則是處理八個(gè)采樣數(shù)據(jù)的濾波過程。 根據(jù)計(jì)算,完成整個(gè)宏塊的去塊效應(yīng)濾波需要近500個(gè)周期,而不采用buffer及re寄存器組的結(jié)構(gòu)由于每次濾波都需要從ram中讀取數(shù)據(jù),完成之后又需要將數(shù)據(jù)寫回至ram中,消耗了很多時(shí)鐘周期在讀寫ram上??梢娊Y(jié)構(gòu)設(shè)計(jì)具有一定的可行性。


驗(yàn)證與仿真

為了驗(yàn)證濾波器結(jié)構(gòu)的正確性,已經(jīng)在c 語言環(huán)境下進(jìn)行了測試并通過。上述結(jié)構(gòu)也將用硬件描述語言verilog hdl代碼加以實(shí)現(xiàn)并進(jìn)行仿真。


結(jié)論

本文首先分析了動(dòng)態(tài)圖像中“虛假邊緣”產(chǎn)生的原因,簡單介紹h. 264標(biāo)準(zhǔn)中清除方塊效應(yīng)的算法,然后提出了一種用于實(shí)現(xiàn)該濾波器的大規(guī)模集成電路結(jié)構(gòu)。這種結(jié)構(gòu)充分利用相鄰塊數(shù)據(jù)之間的相關(guān)性,通過增加寄存器組暫存數(shù)據(jù)來減少對ram的訪問次數(shù),從而可以提高該濾波器的運(yùn)行速度。這種結(jié)構(gòu)對h.264編解碼器具有一定的實(shí)用價(jià)值。




關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉