參考論文:HEVC Deblocking Filter
《HEVC標准介紹、HEVC幀間預測論文筆記》系列博客,目錄見:http://www.cnblogs.com/DwyaneTalk/p/5711333.html

一、Deblock Filter的目的
在AVC中,圖像被分成16x16的MB,對於HEVC則分成16x16到64x64的LCU,LCU按照四叉樹結構分成CU,CU的大小從8x8到64x64。CU可以進一步划分成PU和TU,划分成TU也是按照四叉樹結構,HEVC支持4x4到32x32的變換大小,更大的變換塊也就導致了更加嚴重的塊效應、振鈴效應等。
二、Deblock Filter的過程
1、濾波條件判斷:DB過程考慮8x8的塊邊界,對於每個CU,分成8x8的塊之后,對於8x8塊的每一個邊界,進行下面判斷決定是否進行DB,以及DB的強度。
A、是否是PU或者TU的邊界,如果不是則不進行DB;
B、進行邊界強度BS(boundary strength )的判定,邊界強度的確定如下圖(對於8x8塊的邊界,下圖中pij和qij是指中間四行、靠近邊界的四列,稱為four-sample part of a block boundary):


BS = 2:邊界兩邊至少有一個8x8塊屬於intra,如果滿足BS=2的條件,則不進行BS=1的判斷;BS = 1:至少一個8x8塊有非0殘差系數,且該邊界是TU的邊界;BS = 1:兩個塊的運動矢量的絕對差值大於一個整像素;BS =1:兩個幀間補償塊的參考幀不同或者運動矢量的數目不同;BS =0:其余情況;確定BS之后,對於亮度分量:只有當BS>=1時,才會進行DB(需要進一步判斷C);對於色度分量,則需要BS=2時,才會進行DB(當A和B滿足后,不需要進行C的判斷,直接進行濾波)。這表明當邊界兩遍的塊是相對比較平穩的區域時,進行DB的可能性就比較低。對於色度分量,只有邊界的兩邊存在intra塊時才會進行DB。
C、局部自適應和濾波判定:就是指當邊界兩遍的信號變化低於指定的閾值。對於亮度信號,當BS>0時,對於four-sample length boundary,還需要滿足下式(只與第1、4行有關)才能進行DB:


其中belta是與QP有關的,是QP的分段線性函數(具體關系見后面),可以通過查表實現。上式衡量了邊界兩遍信號值偏離線型的水平(how much signal on both sides of the block boundary deviates from a straight line)。
2、強濾波和普通濾波的判斷:對於亮度邊界:分為普通濾波和強濾波,其中普通濾波又分為兩種情況;而對於色度濾波,則只采用普通濾波的一種情況(只有靠近邊界的一個元素進行濾波)。
對於亮度分量,通過下式選擇普通濾波還是強濾波,其中i=0、3(表示只對第1和4行進行判斷)


當對於i=0、3時,如果(2)、(3)和(4)式都成立,則進行強濾波,否則進行普通濾波。其中tc也是與QP有關,可以通過查表得到tc的值。條件(2)保證了邊緣兩邊滿足更小的局部自適應,條件(3)保證了邊緣兩邊的信號的平穩,條件(4)保證邊緣兩遍的像素值跳變小於一個閾值。
3、普通濾波的兩種情況判定:普通濾波的兩種不同情況的區別在於,邊界兩遍進行濾波的像素的數目不同。判斷條件如下:


當條件(5)滿足時,邊界左邊塊P中最靠近邊界的兩個像素位置進行濾波(P1i和P0i,i=0,1,2,3);否則P塊中只有最靠近邊界的一個像素進行濾波(P0i,i=0,1,2,3)。對於條件(6),情況相同。
這兩個條件中,使用的閾值也是和belta有關,但是小於條件(1)中閾值,大於條件(2)、(3)中的閾值,說明對於局部自適應越低的邊界,使用越強(或者濾波元素越多)的濾波操作。
整體濾波條件判斷和濾波類型決策過程如下兩圖:關於條件(10)的說明見后面


4、普通濾波的處理過程:(假設是豎邊界)
無論條件(5)和(6)是否滿足,都需要對最靠近邊界的一列進行濾波,濾波公式如下(行坐標舍去,需要對i=0,1,2,3,共4行都要濾波):


Delta是sita進行clip操作的結果,至於clip操作后面會介紹。上述操作相當於對像素進行了(3,7,9,-3)/16的濾波器進行了濾波。另外,對於i=0,1,2,3的每一行,進行濾波前還需要單獨進行條件(10)的判斷,只有條件(10)滿足了,該行才能夠進行濾波:


條件(10)的存在,是為了避免對正常存在的塊邊界進行不必要的濾波,因為當sita絕對的大於10倍tc時,一般不太可能是由於塊效應導致的,所以對於普通濾波的處理過程如下圖:


如上圖所示:無論正常濾波的那種情況,都需要對p0和q0進行濾波,但是當條件(5)滿足時,則需要對p1進行濾波;當條件(6)滿足時,需要對q1進行濾波。對p1/q1濾波操作如下:


相當於對p1/q1進行了(8, 19, -1, 9, -3)/32的濾波操作。
5、強濾波的處理過程:(假設豎邊界)
對於強濾波,需要影響更多的像素,所以需要對邊界兩側每一行的各3個像素進行調整,調整量分別為delta0、delta1和delta2,分別是下面sita0、sita1和sita2的clip操作結果。


也就是說,對於每一行(共4行,i=0,1,2,3)的p0/q0、p1/q1和p2/q2,分別加上/減去delta0、delta1和delta2。這個濾波相當於分別進行了(1, 2, 2, 2, 1)/8、(1, 1, 1, 1)/4和(2, 3, 1, 1, 1)/8的濾波操作。
6、色度的濾波操作:
如上1、2所述,對於色度8x8塊邊界,是PU或TU邊界且BS=2時,不進行其他任何判斷,進行對變量兩側每行(i=0,1,2,3)分別一個元素(p0/q0)進行濾波,濾波大小delta是下面sita的clip操作結果,相當於進行了(1 4 4 -1)/8的濾波操作。


7、Clip操作:
Clip的操作是針對sita進行的,Clip過程如下:


如上式,Clip操作就是將sita的值限定到[-c, c]的區間,其中針對不同的sita,Clip的范圍c也不同。對於正常濾波,若delta用於調整p0/q0的值,則c=Tc(n);若delta調整p1/q1,則c=Tc(n)/2。對於強濾波,c=2Tc(n)。對於Tc(n)中的n,當邊界兩遍都是幀間預測是(BS=0或1),則n=QP;否則n=QP+2;
另外,對於色度分量濾波后的結果p0'/q0',以及亮度分量的正常濾波結果p0'/q0'、p1'/q1',需要按照下式進行Clip操作(其中N是bit depth):


8、序列和幀級的DB自適應:
濾波過程中,delta控制哪些邊界需要進行濾波,控制在強濾波和正常濾波之間的選擇,還控制哪些正常濾波2種情況中的選擇。參數Tc除了控制了強濾波和正常濾波的選擇之外,還控制濾波補償量的最大絕對值。二者都是通過QP查表得到,二者與QP的關系如下圖:




為了實現序列內不同幀或不同slice的濾波強度的自適應調整,因此在slice header和PPS(picture parameters set)中設置了tc−offset−div2 和beta−offset−div2這兩個參數對tc和belta進行調整。在進行tc和belta計算時,相應地把tc−offset−div2 和beta−offset−div2的2倍加到當前的QP上,從而調整tc和belta的值。