HEVC中的去方块滤波——Deblocking Filter
Deblocking Filter的作用
Deblocking與SAO都是HEVC中的環路濾波器,重建圖像會首先經過Deblocking,再進行SAO。Deblocking主要用來去除編碼的塊效應,SAO消除圖像的振鈴效應。
塊效應(block artifact)
我們知道現在的主流編碼器都是使用基于塊的混合編碼框架,以編碼塊為單位進行預測、變換、量化。
這就導致不同的編碼塊會使用不同的編碼參數,進而不同編碼重建塊之間的存在一定的差異,尤其在編碼塊邊界處較為明顯。
編碼塊邊界處不連續的現象就是塊效應。
這種現象在QP較大時比較明顯,因此QP越大Deblocking的強度也越大。塊效應如下圖所示:
濾波邊界判決
濾波位置
在HEVC中,濾波只對橫坐標或縱坐標位于8像素的整數倍處的邊界進行,所謂邊界即是CU、PU或TU的交界處。
濾波順序
在一幅圖像中,首先對豎直的邊界進行濾波,之后在對水平的邊界進行。如下圖:
圖中每個網格大小都是8x8,首先會從左至右進行實線邊界的濾波(如果是邊界的話),接下來會從上至下進行虛線邊界的濾波(如果是邊界)。
在HEVC中,豎直的邊界之間濾波互不影響,因此可以同時進行。對于水平邊界同理。
邊界強度(Boundary strength, Bs)
一個邊界是否需要濾波需要看它的邊界強度。主要是通過相鄰的塊的編碼信息來判斷,如預測模式或運動矢量。Bs的取值由下表得到:
可以看到:
- 當兩個相鄰塊有一個以上的幀內預測塊時,Bs=2
- 當兩個相鄰塊有一個以上的非零變換系數塊時,Bs=1
- 當兩個相鄰塊的運動矢量差值絕對值大于一個色度分量像素時,Bs =1
- 當兩個相鄰塊參考不同圖像時,Bs =1
- 其余情況Bs=0
即我們認為相鄰塊的預測模式、運動矢量、變換系數差異越大時,它們的邊界就越明顯。
對于亮度度分量,只有當Bs>0才會應用Deblocking,而對于色度分量,只有Bs>1才會應用Deblocking
此外,對于亮度分量而言,邊界兩邊的像素如何進行Deblocking需要進一步判斷,而對于色度分量,兩邊則相同,不用進一步判斷。
Bs獲取的流程如下圖,其中P,Q代表兩個相鄰的塊
Deblocking以4x4像素塊為基本單位進行,如下圖,對于豎直邊界而言,每次進行Deblocking的像素為其兩側的兩個4x4像素塊。
計算出當前邊界的Bs后,如果Bs滿足條件,還需要進一步判斷邊界兩側的像素是否滿足下式:
其中beta跟量化參數有關,可以查表得到,不用關注。其余的p和q對應上圖中的像素值。這個式子就在說雖然兩個塊的差異較為明顯,中間有一條邊界,但是兩個塊內部應該是比較平坦的,內部差異較小,這樣才是我們想要濾波的情況。
濾波強度
HEVC中有兩種濾波模式:強濾波、一般濾波。確定當前邊界要濾波后還要判斷是要進行強濾波還是一般濾波。
濾波強度不要和邊界強度搞混了。邊界強度Bs是告訴你這里有沒有邊界,濾波強度則是來判斷邊界是不是很明顯,需不需要狠狠地濾一波。
是否進行強濾波由下面3個式子判斷:
其中Tc也是查表得到的。i=0,3 也就是說要判斷4x4塊中的第1行和第4行是否滿足這三個式子,都滿足就進行強濾波。
整體的流程圖如下:
接下來介紹一般濾波和強濾波怎么做
一般濾波
對于一般濾波,有可能改變一個像素值,也有可能改變兩個像素值,需要通過下式來判斷:
7.5式用來判斷P中改變幾個像素值,7.6式用來判斷Q中改變幾個像素值。如果滿足式子則改變兩個,否則改變一個。
這兩個式子的含義就是說塊越平坦也就意味著P和Q的邊界越明顯,即需要改變的像素也就越多。
兩個式子分別對邊界的兩邊進行判斷,有可能一邊需要改變一個像素,而另一邊需要改變兩個像素。
對于邊界兩邊兩個4x4的塊而言,每一行都需要進行上述操作。
除了7.5 與7.6的條件外,還需要滿足一個條件才能進行濾波:
其中tct_ctc?是查表得到的,這個式子是為了避免斜坡型的紋理被濾波。整體濾波的判斷流程如下:
濾波后的像素值由下式得到:
也就是在原始像素的基礎上加上偏移值,具體偏移值怎么算的還有一系列式子,這里就不說了。
通過濾波,消除塊效應,如下示意圖:
強濾波
強濾波通常作用于平坦區域,這些區域的塊效應往往更加明顯。強濾波每四個像素改變三個像素的值。如下:
Q塊也是同理,將式中的p換成q即可。
色度分量的Deblocking
前面說到過,色度分量只有Bs=2時才進行Deblocking。
色度分量的濾波比較簡單,只改變每四個像素中的一個,即p0和q0,的值。也不用分強濾波還是一般濾波,邊界兩側也都是改變一個像素。
像素值的濾波方式跟式7.7和7.8一樣,只不過其中的delta由下式獲得:
自適應濾波
前面式子中有兩個參數是查表得到的即β\betaβ和 tct_ctc?。其實我們可以自己定義他們的值,進而實現對濾波的自適應控制。像HM中就有輸入參數可以控制。在PPS中也會有相應的語法元素:tc_offset_div2 和 beta_offset_div2。實際的 tct_ctc?值就等于 tct_ctc? + tc_offset_div2 * 2, β\betaβ同理。
總結
以上是生活随笔為你收集整理的HEVC中的去方块滤波——Deblocking Filter的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为你的Windows XP瘦身(转)
- 下一篇: 如此的nba开局!