HEVC去方块滤波原理以及代码流程
代码版本:HM-16.2+SCM-3.0rc1
时间: 2015/5/17
作者: LB
环路滤波以及SAO在代码中的大概流程如下图所示:
下面分别对去方块滤波和SAO的原理和相关代码作分析。
去方块滤波:
去方块滤波的主要步骤流程图如下:
滤波顺序:
以参考代码版本为例,去方块滤波的滤波顺序是以CTU为基本单位,按照光栅扫描进行滤波;在CTU内部以CU为基本单位,按照Z扫描方式进行处理。
将相关边界分为垂直边界和水平边界;分别进行垂直滤波与水平滤波。
确定滤波边界:
1、滤波边界必须为Pu或者Tu的边界;
2、无论亮度分量还是色度分量,去方块滤波均对8x8的块边界滤波;
3、将8x8块分为独立的两部分进行去方块滤波处理,垂直边界以8x4为基本单位,水平边界以4x8为基本单位;
以大小为32x32的CU 亮度块的垂直滤波为例:
计算边界强度:
1、边界强度共有三个等级,分别为0,1,2;
2、根据边界块的编码参数,初步判断边界是否需要滤波,以及边界强度;
3、亮度块边界强度非零时,需要后续判断是否需要滤波(滤波开关&滤波强弱 选择);
4、色度块边界强度为2时(直接复试相应亮度块的边界强度),直接判断需要滤 波,其他情况不需要。
具体流程图如下:
滤波开关决策与滤波强弱选择:
滤波开关决策与滤波强弱选择只适用于边界强度非零的亮度块边界。其中滤波开关决策是进一步分析边界两边像素值的变化程度(平缓,剧烈),进而判断该区域的内容特点,再根据区域的内容特点来决定是否需要滤波。
若判定滤波开关打开,则边界一定要进行滤波处理,需要进一步决定采用强滤波还是弱滤波。
采用强滤波还是弱滤波,从以下三个方面考虑:
1、边界两边像素值的变化率;
2、边界两侧像素值是否平坦;
3、边界两边像素的跨度是否控制在一定范围之内;
以上三个条件均满足,则采用强滤波,否则采用弱滤波。
流程如下:
强滤波:对两侧像素大范围,大幅度修正,一般为两侧各三个像素修正。
弱滤波:对像素小范围,小幅度修正,对边界两边一到两个像素修正。
色度块滤波:对边界两边各一个像素修正。
去方块滤波的函数流程如下图所示:
<link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/markdown_views-ea0013b516.css">
</div>
下一篇: HEVC算法和体系结构:编码框架
推荐阅读