1.简介
1.1何为宏块效应
视频图像有些小方块边界呈现不连续的情况;如下图所示:
1.2宏块效应出现的原因
- 宏块残差值的变换系数经过量化后丢失图像细节,特别是低码率情况下会更加明显;
- 帧间预测的运动估计:相邻块选取的参考帧或者参考块不是连续的,所以在运动补偿后,可能会引入边界效应;
1.3边界的定义
1)H264标准中,宏块的定义为16x16像素块;而变换的基本单位为4x4;故宏块内部边界如下图中的2、3、4(垂直边界);6、7、8(水平边界)所示;对于YUV420来说,Cb、Cr同理;
另外上图中还存在 最上边1(Top MB Edge) 以及 最左边5(Left MB Edge);区别是这两条边界消除时依赖相邻宏块;但原理一致。
2)消除顺序:
按照先垂直后水平,先左后右,先上后下的原则;故图中Y分量的消除顺序为:1、2、3、4、5、6、7、8
1.4 真假边界
- 真边界:实际图像中确实存在的边界;
- 假边界:因为变换或者运动估计引入的边界;
真假边界消除的原理:
- 真边界的两边像素的差值通常较大;
- 即使真边界的两边像素差值不大,被误判断为假边界进行消除;那么对其主观影响不大
2.宏块消除
2.1 宏块消除思想
使用相邻像素进行“均值”运算来替换边界值
2.2 边界强度
区分边界强度的原因是:根据不同的边界强度,会采用不同的边界像素值计算方法。
判断条件 | 边界强度BS |
---|---|
边界为宏块边缘,且边界两边块有一个块为帧内预测 | 4 |
边界两边块有一个块为帧内预测 | 3 |
边界两边块有一个块的变换系数包含非零系数 | 2 |
边界两边块有一个块的变换系数不包含非零系数;并且边界两边块的参考帧或运动向量数目(前后向)不同 | 1 |
边界两边块有一个块的变换系数不包含非零系数;并且边界两边块的参考帧或运动向量数目(前后向)相同 | 0 |
2.3 真假边界的区分
根据真假边界的两个假设,H264标准设定两个阈值α和β用来判定真假边界。为了便于说明,我们假设判定的边界如下图红线所示。
H264 Spec规定如下三个条件都满足时,才判定为虚假边界,才需要Deblocking;任一条件不满足,则认为为真实边界,无需Deblocking。
/*判断真假边界公式*/
|p0 - q0| < α[IndexA]
|p1 - p0| < β[IndexB]
|q1 - q0| < β[IndexB]
/*
*其中p0、p1、q0、q1为上图中的像素点值;
*IndexA = Clip3( 0, 51, QPave + FilterOffsetA )
*IndexB = Clip3( 0, 51, QPave + FilterOffsetB)
*QPave = (qPp + qPq +1) >> 1;qPp,qPq为q0、p0的量化值;
*FilterOffsetA = slice_alpha_c0_offset_div2 << 1
*FilterOffsetB = slice_beta_c0_offset_div2 << 1
*- slice_alpha_c0_offset_div2, slice_beta_c0_offset_div2为Slice
Header中语法;取值应[-6, +6],默认为0;
*- α、β值通过IndexA以及IndexB查表得到,如下表所示。
*- clip3(a, b, c): a,c为上下限,若a < b < c,则返回b, 否则取上下限的值
*/
2.4滤波运算
首先声明t’c0,t’c0也是查表得到,如下表所示: