版权声明:本文为博主
[email protected](阿King)原创文章,不得以任何理由任何形式进行转载 https://blog.csdn.net/lj501886285/article/details/84702809
前言
由于FDCT变换后的量化(Quant)过程是一个有损(lossy)过程,会照成信息损失。再经过反量化(Rescale)和IDCT后恢复的矩阵与原矩阵存在一定的误差,特别宏块的边界,会照常恢复的图像呈现方块化,而方块化的图片对于后面的图片预测存在极大的影响,所以我们需要通过环路滤波进行去方块化
真假边界
真边界
即原图像所存在的纹理细节。例如上图foreman的脸部边界
假边界
即原图像平坦区域由于量化操作而导致块边界失真,相邻块之间过度不平滑,呈现出来的边界。例如上图白色块之间的边界
判定
当且仅当以下三个条件满足时才进行滤波
-
∣p0−q0∣<α(indexA)
-
∣p1−p0∣<β(indexB)
-
∣q1−q0∣<β(indexB)
其中
QP为量化中的参数,范围[0,51],offset给编码器提供一个控制滤波器性能的偏移量,然后我们针对
α(indexA)和
β(indexB)查表:
滤波过程
滤波强度Bs
Bs=4时,强度最大;Bs=0时,无需进行滤波。色度块的滤波强度同亮度块
我们所希望的是:
针对平坦区域(高频),使用较强的滤波强度
针对细节区域(低频),使用较弱的滤波强度
滤波顺序
依照从左至右,依上而下的顺序,即
- 16x16的亮度块:a b c d e f g h
- 8x8色度块:i j k l
当Bs = {1,2,3}时
- 更新
p0和
q0
Δ0=((q0−p0)<<2+(p1−q1)+4)>>3p0′=p0+Δ0q0′=q0−Δ0
- 对
p0和
q0进行限幅
即将
p0和
q0限制在范围
[−c0,c0]内。
c0取值为
c1,若同时满足
∣p2−p0∣<β(indexB)和
∣q2−q0∣<β(indexB),则
c0=c1+1
若满足
∣p2−p0∣<β(indexB),则
- 更新
p1
Δp1=(p2+(p0+q0+1)>>1−2p1)>>1p1′=p1+Δp1
- 对
p1限幅
将
p1限定在范围
[−c1,c1],其中
c1的值查表所得
同样的,若满足
∣q2−q0∣<β(indexB),则
- 更新
q1
Δq1=(q2+(q0+p0+1)>>1−2q1)>>1q1′=q1+Δq1
- 对
q1限幅
限幅规则同
p1
当Bs = 4时
- 更新
p0和
q0
· 若
∣p0−q0∣<α>>2+2时
p0′=(p2+2p1+2p0+2q0+q1+4)>>3q0′=(q2+2q1+2q0+2p0+p1+4)>>3
· 否则
p0′=(2p1+p0+q1+2)>>2q0′=(2q1+q0+p1+2)>>2
- 若满足
∣p2−p0∣<β(indexB),则更新
p1和
p2
p1′=(p2+p1+p0+q0+2)>>2p2′=(2p3+3p2+p1+p0+q0+4)>>3
- 若满足
∣q2−q0∣<β(indexB),则更新
q1和
q2
q1′=(q2+q1+q0+q0+2)>>2q2′=(2q3+3q2+q1+q0+p0+4)>>3