参考论文: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. [Selenium] Grid 介绍

    Selenium Grid 支持分布式测试,使测试人员可在分布式环境中进行测试 一般而言,在面临以下情况时可考虑使用Selenium Grid : 1.测试多个浏览器或单个浏览器多个版本,或测试不同操 ...

  2. mongoDB的复制集5----复制集安全(认证,用户,权限)

    一.什么是认证  如何开启认证    1).auth=true(在配置文件里增加)    2).keyFile(建议添加到配置文件里) #如果设置了auth=true,但第一次没有创建用户就启动实例怎 ...

  3. 传统开发有必要学Dubbo吗

    dubbo作为一个知名的分布式服务调用框架,在众多互联网公司都有广泛的应用.但其本质还是一个远程服务调用框架,最初就是为了应对SOA服务治理时才用到的,如果本身服务不多就没必要用它了.如果对技术感兴趣 ...

  4. #ifndef <标识> #define <标识> #endif

    头件的中的#ifndef,这是一个很关键的东西.比如你有两个C文件,这两个C文件都include了同一个头文件.而编译时,这两个C文件要一同编译成一个可运行文件,于是问题来了,大量的声明冲突. 还是把 ...

  5. sublime text 3中修改tab键为缩进4个空格

    1. 菜单栏里点击 Preferences-> Setting-User, 如图 2. 在弹出来的文本里,添加如下两行: { // 注意只有一个大括号,如果之前有属性,如在之前的属性后确保有 , ...

  6. 任务48:Identity MVC:Model后端验证

    任务48:Identity MVC:Model后端验证 RegisterViewModel using System; using System.Collections.Generic; using ...

  7. HDU6035:Colorful Tree(树形DP)

    传送门 题意 给出一棵最小生成树及每个节点的颜色,询问\(\frac{n(n-1)}2\)条路径的权值和,一条路径的权值为该路径的颜色种数 分析 勉强理解了ftae的做法,但是代码还是不太会,还是太弱 ...

  8. bzoj 5498: [2019省队联测]皮配【dp】

    是个神仙dp-- 参考:https://www.luogu.org/blog/xzz-233/solution-p5289 设f[i][j][k]是前i个有限制的城市,所有学校中选蓝色阵营有j人,有限 ...

  9. UVA - 10564 Paths through the Hourglass

    传送门:https://vjudge.net/problem/UVA-10564 题目大意:给你一张形如沙漏一般的图,每一个格子有一个权值,问你有多少种方案可以从第一行走到最后一行,并且输出起点最靠前 ...

  10. Item

    抓取的主要目标是从非结构化源(通常是网页)中提取结构化数据 ScrapySpider可以以python字典的形式返回提取的数据,这很方便和熟悉 但python dicts缺乏结构,很容易在字段名中输入 ...