基于块的视频编码的一个典型特点就是在图像中会出现偶发的可察觉的块结构,这是由于重构块的边缘像素与块内部像素相比恢复精度要低,块效应是目前压缩编码最明显的视觉失真之一。在H.264/ AVC视频编码标准中,块效应有两种来源。最显著的一个是在Intra和Inter帧预测残差编码中的整数4×4变换,对变换系数的粗量化会导致可见的块边缘不连续。第二个是来自运动补偿预测。预测从可能的不同参考帧中把内插像素数据拷贝出来形成运动补偿块,由于几乎没有正好合适的数据,被拷贝块的数据引起的边缘不连续性会上升;另外,在拷贝过程中参考帧中存在的不连续性又被搬到将要被补偿块的内部。虽然H.264/AVC使用的4×4变换尺寸多少使这种效应变得不很明显,但为了增强编码性能,一个去块效应滤波器仍旧是很有用的工具。

  滤波器被应用到每个解码模块以减少由块效应所引起的失真.在编码端,进行反变换之后,再应用去块效应滤波器(在重建和存储宏块用于将来预测之前);在解码端,在重建和显示之前,应用去块效应滤波器.滤波器平滑了块的边界,改善了解码帧的质量.滤波后的宏块被用于将来帧的运动补偿预测,这能够提高压缩性能,因为滤过的图像比一个有块效应的未滤波的图像更接近原始图像.滤波器的默认操作如下,编码端可以选择滤波器的强度或者禁止使用滤波器.(JM18.6中的字段Macroblock结构体中的DFDisableIdc用来控制滤波器的使用或禁止,0表示使用滤波器,1表示禁止)

滤波器被应用到每个宏块的4x4块的垂直和水平的边界(除了条带边界),顺序如下:
1)滤波亮度分量的4个垂直边界(顺序从左向右abcd)
2)滤波亮度分量的4个水平边界(顺序从上向下efgh)
3)滤波每个色度分量的两个垂直边界(顺序从左向右ij)
4)滤波每个色度分量的两个水平边界(顺序从上向下kl)
 
  每个滤波操作影响边界两边的三个象素,下图显示了相邻块p和q的垂直边界的两边的四个象素(p0,p1,p2,p3和q0,q1,q2,q3).滤波强度(滤波量)依赖于当前的量化器,相邻块的编码方式以及边界上图像象素的梯度.
 
边界强度
滤波输出的选择依赖与边界强度和边界上图像象素的梯度.边界强度参数BS依据一下原则进行选择(编码是逐行帧时) :
1) p或q是帧内编码的,同时边界是宏块边界,则BS=4(最强的滤波强度)
2) p或q是帧内编码的,同时边界不是宏块边界,则BS=3
3) p和q都不是帧内编码的,同时p或q包含编码系数,则BS=2
4) p和q都不是帧内编码的,同时p和q都不包含编码系数,p和q使用不同的参考帧或者使用不同数目的参考帧或者两者运动矢量差值大于一个亮度象素,则BS=1,否则BS=0
应用这些原则的结果是在可能有明显块效应出现的地方滤波强度很大,例如帧间编码宏块的边界以及包含编码系数的块之间的边界.
滤波器判决
集合(p2,p1,p0,q0,q1,q2)的一组象素值在下列情况下才进行滤波:
1) BS>0
2) |p0−q0| < α and |p1−p0| < β and |q1−q0| < β.
α和β是标准中定义的阈值,它们随着两个块p和q量化参数QP的增长而增长.滤波器选择的效果就是当在原始图像块边界有明显变化时,关掉滤波器.当QP很小的时候,除了边界上的很小梯度,其他都应该是图像本身的特征(而不是块效应),所以应该保留,因此阈值α和β很小.当QP很大的时候,块效应可能更明显,所以α和β很大,更需要滤波更多的边界象素点.
滤波器的实现
1)BS属于{1,2,3}
输入是p1,p0,q0,q1,使用一个四阶滤波器,产生输出结果p'0和q'0.如果|p2-p0|小于阈值β,则使用另一个四阶滤波器,即输入是p2,p1,p0和q0,则输出结果是p'1(仅仅亮度分量);如果|q2-q0|小于阈值β,则使用另一个四阶滤波器,即输入是q2,q1,q0和p0,则输出结果是q'1(仅仅亮度分量);
2)BS=4
如果|p2-p0|小于阈值β并且|p0-q0|小于round(α/4),并且是亮度块,则:
p'0是对p2,p1,p0,q0,q1进行五阶滤波得到的;p'1是对p2,p1,p0,q0进行四阶滤波得到;p'2是对p3,p2,p1p0和q0进行五阶滤波得到的.否则,p'0是对p1,p0,q1进行三阶滤波得到的.
如果|q2-q0|小于阈值β并且|p0-q0|小于round(α/4),并且是亮度块,则:
q'0是对q2,q1,q0,p0,p1进行五阶滤波得到的;q'1是对q2,q1,q0,p0进行四阶滤波得到;q'2是对q3,q2,q1,q0和p0进行五阶滤波得到的.否则,q'0是对q1,q0,p1进行三阶滤波得到的.

去块率波 Deblocking filter的更多相关文章

  1. h.264 去块滤波

    块效应及其产生原因 我们在观看视频的时候,在运动剧烈的场景常能观察到图像出现小方块,小方块在边界处呈现不连续的效果(如下图),这种现象被称为块效应(blocking artifact). 首先我们需要 ...

  2. InnoDB缓存读命中率、使用率、脏块率(%) 缓冲池的读命中率(%) 缓冲池的利用率(%) 缓冲池脏块的百分率(%)

    InnoDB缓存读命中率.使用率.脏块率(%) 缓冲池的读命中率(%) 缓冲池的利用率(%) 缓冲池脏块的百分率(%)

  3. h264和h265多维度区别

    h264和h265多维度区别 1.  概述 h265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频,很多朋友不知道h264和h265如何区别,下面让我们一起来了解一下 ...

  4. h.264并行解码算法分析

    并行算法类型可以分为两类 Function-level Decomposition,按照功能模块进行并行 Data-level Decomposition,按照数据划分进行并行 Function-le ...

  5. FFmpeg的HEVC解码器源代码简单分析:环路滤波(Loop Filter)

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

  6. x264源代码简单分析:滤波(Filter)部分

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. Atitit   图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)

    Atitit   图像处理 平滑 也称 模糊, 归一化块滤波.高斯滤波.中值滤波.双边滤波) 是一项简单且使用频率很高的图像处理方法 用途 去噪 去雾 各种线性滤波器对图像进行平滑处理,相关OpenC ...

  8. 【HEVC简介】DB-DeBlock Filter

    参考论文:HEVC Deblocking Filter <HEVC标准介绍.HEVC帧间预测论文笔记>系列博客,目录见:http://www.cnblogs.com/DwyaneTalk/ ...

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

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

随机推荐

  1. python leetcode 日记 --Contains Duplicate --217

    题目 Given an array of integers, find if the array contains any duplicates. Your function should retur ...

  2. 2、android Service 详细用法

    定义一个服务 在项目中定义一个服务,新建一个ServiceTest项目,然后在这个项目中新增一个名为MyService的类,并让它继承自Service,完成后的代码如下所示: ? 1 2 3 4 5 ...

  3. [深入Python]__new__和__init__

    class A(object): def __init__(self): print "init" def __new__(cls,*args, **kwargs): print ...

  4. 2-legged oauth & 3-legged oauth

    3-legged oauth resource owner, client, server. resource owner 给client访问权限去访问resource owner在server上的r ...

  5. IOS第三方字体

    项目中想使用第三方的字体,在stackoverflow上查询解决办法,也折腾一会,添加成功,示例如下: 1.将xx.ttf字体库加入工程里面 2.在工程的xx-Info.plist文件中新添加一行Fo ...

  6. 推荐!国外程序员整理的 C++ 资源大全

    http://blog.jobbole.com/78901/ 关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz 发起和维护. 内容包括:标准库.Web应用框架.人工智能.数据库.图片处理 ...

  7. ACE - Reactor模式源码剖析及具体实现(大量源码慎入)

    原文出自http://www.cnblogs.com/binchen-china,禁止转载. 在之前的文章中提到过Reactor模式和Preactor模式,现在利用ACE的Reactor来实现一个基于 ...

  8. Devexpress datagrid动态添加显示指定列的gridView

    代码如下: public class DXGridControlHelper { /// <summary> /// 获取显示指定列的GridView /// </summary&g ...

  9. LInux内核分析——计算机是如何工作的进行

    万子惠 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 " 实 ...

  10. 简单介绍Javascript匿名函数和面向对象编程

    忙里偷闲,简单介绍一下Javascript中匿名函数和闭包函数以及面向对象编程.首先简单介绍一下Javascript中的密名函数. 在Javascript中函数有以下3中定义方式: 1.最常用的定义方 ...