AV1的CDEF过程介绍
作者:互联网
AV1的CDEF过程介绍
CDEF即Constrained Directional Enhanced Filter(约束方向增强滤波器),是非线性空间滤波器,该滤波器以8x8 为基本单位,通过沿着物体的方向进行滤波。CDEF目的是为了消除变换、量化带来的振铃效应,同时还能保留物体边缘的清晰度,提升重建图像的质量。
1 CDEF在编解码器中的位置
CDEF位于Loop Filter(去块滤波)之后,Up Scaler(超分辨率重建)/Loop Restoration(环路恢复滤波器)之前。
2 CDEF的滤波过程
滤波过程分为三步:CDEF DIRECTION SEARCH、CDEF BLOCK 和CDEF FILTER 。
2.1 CDEF DIRECTION SEARCH-寻找最佳方向
CDEF Direction是以8x8为基本单位,在8个方向上进行比较和寻找(方向如下图所示),找到物体边缘的最优方向。到底何为最优方向?就是沿着物体边缘某个方向上的pixel值,非常的相似。如果某个方向是物体的边缘,那么该方向pixel的SSD一定比其他方向计算出来的SSD小,因为该方向的像素值更接近,通过寻找最小SSD,我们就能找到物体边缘的形状。
Direction 处理过程主要分为4 个步骤:
1. 计算每个方向上所有像素与平均像素的差值partial[yDir][i];
2. 计算每个yDir方向分支的平方和,然后进行加权求和,得到cost[yDir];
3. 对8 个方向对应的cost[yDir]进行比较,取值最大者即为最优方向best_yDir;
4. 计算directional_contrast value,用于CDEF Block中的luma strength Sp计算。
2.1.1 计算每个方向上所有像素与平均像素的差值
计算公式为:
式中yDir表示方向,取值范围[0,7],i表示在该方向存在多个分支,n表示在方向分支i上存在多少个pixel,pixeln表示分支i上的第n个pixel的值。特别的,在AV1协议中,若pixel的位宽大于8bits,则需要先把pixel缩放到8bits,且像素值要减去128,这么做的目的是为了使计算的整数只需要采用一个32位的有符号整数就可以了(原因请参考文献:THE AV1 CONSTRAINED DIRECTIONAL ENHANCEMENT FILTER (CDEF))。下图是方向分支的示意图,以yDir=0为例,i取值范围为[0,14],表示在该方向存在15个分支。
2.1.2 计算每个yDir方向分支的平方和,然后进行加权求和;
计算公式为:
公式权重的存在是因为在每个yDir的i分支上,i的大小是不同的,pixel的数量是不同的,有的i有1个pixel,有的i有2个,最多的i有8个pixel。CDEF将分数weight放大840倍,把除法计算变成了乘法计算,840的来源是求1,2,3,4,5,6,7,8的最小公倍数。
2.1.3 判断最佳方向best_direction
8个cost中最大的cost即为最优方向best_direction。为什么cost最大就是最优方向?我们明明需要找到SSD最小的yDir。这是SSD公式用方差-均值公式化简得到的,把求SSD最小转化成求cost最大,减少了计算量。(具体计算过程参见《THE AV1 CONSTRAINED DIRECTIONAL ENHANCEMENT FILTER (CDEF)》)
2.1.4 计算directional_contrast value
计算公式为:
2.2 CDEF BLOCK-计算滤波器所需系数
CDEF的二维滤波器公式如下:
式中,y(i,j)是cdef后的值;x(i,j)是待滤波的值;x(m,n)-x(i,j)为临近采样pixel值-正在滤波pixel值(d,也称pixel difference);Sp(primary strength,priStr)和Ss(secondary strength,secStr)为滤波强度,控制滤波结果的大小;D(damping)控制滤波范围,同样的pixel difference,使用不同的D,有的可以滤波,有的则无需滤波。
基于上述CDEF的滤波公式,在得到best_direction和directional_contrast前提下,CDEF BLOCK过程主要计算三个参数:Sp,Ss和D,另外我们还需要确定两个权重系数Wp和Ws。
滤波器f(d,S,D)的结果受上式控制。关于S和D对滤波器的影响参考下面的函数图,即S控制滤波强度,D控制滤波范围。
2.2.1 权重系数Wp和Ws的确定
Wp和Ws仅由最佳的方向best_direction决定,具体系数见下图。
2.2.2 Sp、Ss和D
对于encoder来说,确定Sp和Ss需要进行RDO,过程繁琐,下面仅就取值范围做一些说明。
8bit depth:Sp取值范围为[0-15],Ss为[0,1,2,4],D_luma为[3-6],D_chroma为[2-5]。
12bit depth:Sp为[0-240],Ss为[0,16,32,64],D_luma为[7-10],D_chroma为[6-9]。
Sp、Ss跟bit depth是scaled关系,D跟bit depth是offset关系。
对于Sp需要经过下式进行调整,式中的v即是directional_contrast。
另外,CDEF要求D和S满足下式:
2.3 CDEF FILTER
对每一个样点进行滤波,需要4个采用Sp的主direction样点,及8个采用Ss的样点,共计12个,代入上边提及的公式计算即可。
为了防止滤波后的结果过大或过小,CDEF对y(i,j)还有如下限制:
上式将y(i,j)限制在了抽头的12个pixel值的范围内。
此外还有些filter语法元素相关的概念及一些边角位置的pixel处理,请参考下边我提及的参考文献。算法公式原理请详细阅读参考文献1.
3 CDEF Parameter汇总
4 参考文献
- THE AV1 CONSTRAINED DIRECTIONAL ENHANCEMENT FILTER (CDEF)
- AV1视频标准中的CDEF滤波器研究-罗瑜
- An Overview of Core Coding Tools in the AV1 Video Codec - Yue Chen
- A Technical Overview of AV1 - Jingning Han
- https://github.com/AOMediaCodec/SVT-AV1/blob/master/Docs/Appendix-CDEF.md
标签:CDEF,Sp,滤波,AV1,介绍,方向,pixel 来源: https://blog.csdn.net/weixin_44696799/article/details/109284068