参考论文: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的值。

【HEVC简介】DB-DeBlock Filter的更多相关文章

  1. 【HEVC简介】ALF-Adative Loop Filter

    由于HEVC在HM4.0之后,就把ALF去掉,所以ALF的介绍是基于AVS2. <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com ...

  2. 【HEVC简介】SAO-Sample Adaptive Offset, 样本自适应偏移量

    paper: Sample Adaptive Offset for HEVC <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/ ...

  3. 【HEVC简介】Inter Prediction Tools

    参考文献:见<High Efficiency Video Coding (HEVC)>Inter-Picture Prediction in HEVC章节 <HEVC标准介绍.HEV ...

  4. 【HEVC简介】High Level Syntax

    参考文献:见<High Efficiency Video Coding (HEVC)>High Level Syntax章节 <HEVC标准介绍.HEVC帧间预测论文笔记>系列 ...

  5. 【HEVC简介】CTU、CU、PU、TU结构

     参考文献:见<High Efficiency Video Coding (HEVC)>Block Structures and Parallelism Features in HEVC章 ...

  6. HEVC简介】CTU、CU、PU、TU结构

    https://www.cnblogs.com/DwyaneTalk/p/5711342.html

  7. HEVC标准介绍+论文阅读笔记

    脱离视频编解码.投入计算机视觉一年,这个博客也歇业一年,最近偷些时间回顾一下编解码,毕竟花费了整个研一的时间(虽然这一年基本上在上课). 之前写过几篇H.264标准的几篇介绍文章,详见:http:// ...

  8. 简介 - MongoDB

    1- NoSQL简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL": NoSQL是指非关系型的数据库,有时也称作Not Only SQL的缩写, ...

  9. Sequel简介

    Sequel: Ruby数据库工具包 简介 Sequel是Ruby中用于访问SQL数据库的一个简单.灵活.强大的工具包. Sequel能够保证线程安全,提供了连接池功能以及简洁的SDL用于创建SQL查 ...

随机推荐

  1. jqGrid Bootstrap

    <!DOCTYPE html> <html lang="en"> <head> <!-- The jQuery library is a ...

  2. Spring中AOP的两种代理方式(Java动态代理和CGLIB代理)

    第一种代理即Java的动态代理方式上一篇已经分析,在这里不再介绍,现在我们先来了解下GCLIB代理是什么?它又是怎样实现的?和Java动态代理有什么区别? cglib(Code Generation ...

  3. 【204】显示3D大球球

    1. 光滑球  From Jan 28, 2016    2. 大球球 https://www.revolvermaps.com/?target=enlarge&i=0xoqkxnu52c&a ...

  4. Hadoop 三大调度器源码分析及编写自己的调度器

    如要转载,请注上作者和出处.  由于能力有限,如有错误,请大家指正. 须知: 我们下载的是hadoop-2.7.3-src 源码. 这个版本默认调度器是Capacity调度器. 在2.0.2-alph ...

  5. 输出文章段落首行空格缩进在IE和chrome显示不一致的问题

    一般的编辑文章时,首行都缩进两格,而执行的操作则是一个tab键或者四个空格键,在html代码中体现的往往都是4个 然而我在输出时却发现了同样的html代码,在IE上显示的是缩进了一个字符,在chrom ...

  6. k8s-创建自定义chart及部署efk-二十五

    一.chart的结构 (1)更改helm为阿里云仓库源 [root@master helm]# helm repo remove stable "stable" has been ...

  7. Codeforces Round #422 (Div. 2)D. My pretty girl Noora(递推+数论)

    传送门 题意 对于n个女孩,每次分成x人/组,每组比较次数为\(\frac{x(x+1)}{2}\),直到剩余1人 计算\[\sum_{i=l}^{r}t^{i-l}f(i)\],其中f(i)代表i个 ...

  8. CodeForces 13A【暴力】

    题意: 给你的一个十进制数n,计算对于2~n-1进制下的每个位相加和与数n-2的比值. 思路: n是1000,所以直接暴力一发? #include<cstdio> #include< ...

  9. bzoj 4407: 于神之怒加强版【莫比乌斯反演+线性筛】

    看着就像反演,所以先推式子(默认n<m): \[ \sum_{d=1}^{n}d^k\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d] \] \[ =\sum_{d=1} ...

  10. jQuery笔记之工具方法

    jQuery 工具方法 $.type()判断数据类型 $.isArray() $.isFunction() $.isWindow()... $.trim()消除空格 $.proxy()改变this指向 ...