购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.2 方向帧内预测

4.2.1 预测方向定义

AV1把VP9标准定义的8种帧内预测方向作为基准预测方向:V_PRED、H_PRED、D45_PRED、D67_PRED、D113_PRED、D135_PRED、D157_PRED和D203_PRED。其中V_PRED和H_PRED分别表示垂直和水平预测方向,即预测方向的角度分别是90°和180°。其余名为D××_PRED的预测模式表示预测方向角度为××。这里的预测方向角度是指预测方向直线与基准方向直线所成的夹角。基准方向直线可视为以待预测像素为起点,水平向右的直线。

由于AV1支持较大尺寸的变换块,并且随着变换块尺寸的增大,变换块包含的方向性纹理特征往往会变得更加丰富和复杂。为了覆盖更多的帧内预测方向,每个基准预测方向都有一个与之关联的角度偏移量集合,该集合共包含7个角度偏移量。每个角度偏移量以整数索引来标记,索引值范围是-3~+3之间。角度偏移量索引与角度偏移量之间的对应关系如表4-1所示,索引值0对应角度偏移量0°;索引值每增加1,对应的角度偏移量将增加3°。预测方向是将角度偏移量加到对应的基准预测方向角度上得到的,AV1共有56种帧内预测方向。图4-5所示为AV1的帧内预测方向,展示了AV1中的8种基准预测方向以及每个基准预测方向与其角度偏移量相加所表示的预测方向。其中实线表示基准帧内预测方向,虚线表示基准帧内预测方向与其角度偏移量相加所表示的预测方向。

表4-1 角度偏移量索引与角度偏移量之间的对应关系

由于尺寸较小的变换块(如4×4、4×8和8×4变换块)的纹理结构方向有限,使用角度偏移量集合扩充得到的帧内预测方向的编码收益通常较小,因此,在AV1中,这些变换块只使用基准帧内预测方向。

在AV1中,亮度分量和色度分量的帧内预测方向是分开传输的。为了传输亮度分量的帧内预测方向,AV1定义了语法元素intra_frame_y_mode和angle_delta_y。intra_frame_y_mode用于指明当前亮度变换块使用的基准帧内预测方向,而angle_delta_y用于指明亮度变换块使用的帧内预测方向相对于基准帧内预测方向(intra_frame_y_mode所表示的基准帧内预测方向)的角度偏移量的索引值。angle_delta_y的取值是0~6,分别对应表4-1中的索引值-3~3。为了传输色度分量的帧内预测方向,AV1定义了语法元素uv_mode和angle_delta_uv,以指明色度变换块的基准帧内预测方向和预测方向相对于基准帧内预测方向的角度偏移量。angle_delta_uv的取值也是0~6,对应表4-1中的索引值-3~3。

图4-5 AV1的帧内预测方向

4.2.2 参考像素的滤波过程

在AV1的方向帧内预测过程中,当预测方向不是垂直和水平方向时,AV1会根据需要对参考像素进行平滑滤波处理,以提升预测块的视觉质量。这一过程旨在消除参考像素值之间的突兀变化,防止在预测块中形成本来不存在的方向性边缘。在下面的描述中,假设当前变换块的宽度和高度分别是 W H ,选定的帧内预测方向的角度用angle表示。

1.左上角参考像素滤波

对于 W + H ≥24的变换块,当180°>angle>90°时,AV1将利用左上角像素的右侧像素和下侧像素对其进行滤波,滤波器系数是[5,6,5]:

s= 5 · AboveRow[0] + 6 · AboveRow[-1] + 5 · LeftCol[0]

AboveRow[-1] = LeftCol[-1] = s+ 8) >> 4

其中,LeftCol[-1]和AboveRow[-1]均指向左上角参考像素;LeftCol[0]和AboveRow[0]分别表示左上角像素的下方和左侧像素。它们之间的相对位置关系参考图4-1。

2.左侧和上方参考像素滤波强度推导

当angle不等于90°,也不等于180°时,对于LeftCol[0: W + H -1]和AboveRow[0: W + H -1],AV1定义了3个平滑滤波器来对其进行滤波,包括2个3抽头滤波器和1个5抽头滤波器,它们的滤波器系数分别是[0,4,8,4,0],[0,5,6,5,0]和[2,4,4,4,2]。AV1根据选定的帧内预测模式和当前变换块的尺寸,为当前变换块推导出滤波器强度strength。然后,根据strength的取值来选择合适的滤波器,对参考像素LeftCol[0: W + H -1]和AboveRow[0: W + H -1]进行滤波。表4-2所示为strength的取值及其含义。

表4-2 strength的取值及其含义

根据当前变换块上方和左侧相邻变换块的预测模式是否是平滑预测模式,AV1定义了两种不同的方案来推导strength。关于平滑模式的定义,请参考4.3节。在下面的描述中,对于上侧参考像素AboveRow[],有 d =|angle-90°|;对于左侧参考像素LeftCol[],则有 d =|angle-180°|。由于angle不等于90°,也不等于180°,因此变量 d 大于或等于1。

❍如果变换块上方和左侧相邻变换块的预测模式都不是平滑预测模式,那么strength的推导过程如下:

●设置strength=0。

●如果 W + H ≤8,即当前变换块是4×4,那么如果 d ≥56,则strength=1。

●否则,如果 W + H ≤12,即当前变换块是4×8/8×4,那么如果 d ≥40,则strength=1。

●否则,如果 W + H ≤16,即当前变换块是8×8,那么如果 d ≥40,则strength=1。

●否则,如果 W + H ≤24,即当前变换块是8×16、16×8、4×16或16×4,那么:

■如果 d ≥8,则strength=1。

■如果 d ≥16,则strength=2。

■如果 d ≥32,则strength=3。

●否则,如果 W + H ≤32,即当前变换块是16×16,那么

■如果 d ≥1,则strength=1。

■如果 d ≥4,则strength=2。

■如果 d ≥32,则strength=3。

●否则,即当前变换块是8×32、32×8、16×32、32×16、32×32、32×64、64×32、16×64、64×16或64×64,那么如果 d ≥1,则strength=3。

❍如果变换块上方或左侧相邻变换块的预测模式是平滑预测模式,那么滤波器强度strength的推导过程如下:

●设置strength=0。

●如果 W + H ≤8,即当前变换块是4×4,那么:

■如果 d ≥40,则strength=1。

■如果 d ≥64,则strength=2。

●否则,如果 W + H ≤16,即当前变换块是4×8、8×4或8×8,那么:

■如果 d ≥20,则strength=1。

■如果 d ≥48,则strength=2。

●否则,如果 W + H ≤24,即当前变换块是8×16、16×8、4×16或16×4,那么如果 d ≥4,则strength=3。

●否则,即当前变换块是16×16、8×32、32×8、16×32、32×16、32×32、32×64、64×32、16×64、64×16或64×64,那么如果 d ≥1,则strength=3。

根据上面描述的滤波强度推导过程可以发现,随着变换块尺寸的增加,需要滤波的预测模式越来越多。比如,当上方和左侧相邻变换块的预测模式不是平滑预测模式时,根据上面描述的滤波强度推导过程,可以发现:

1)对于4×4块,只有预测方向D157_PRED需要对上侧参考像素进行滤波。

2)对于8×8块,对角线附近的帧内预测方向几乎都需要对上侧参考像素进行滤波。

3)对于32×32块,除了垂直预测方向以外,其余的帧内预测方向都需要对上侧参考像素进行滤波。

这种设计的原理是,对于尺寸较大的变换块,通过对更多的预测模式执行滤波过程,可以增加帧内预测的多样性,也就是说,让更多的帧内预测模式成为潜在的最优候选预测模式。

另外,对比相邻变换块是否是平滑预测模式的滤波器强度推导过程,可以发现,当上方或左侧相邻变换块的预测模式是平滑预测模式时,这种情况需要滤波的预测模式相对较多,并且滤波强度也相对较大。这是因为滤波强度越大,就可以越好地滤除参考像素中的高频噪声和干扰,从而使得参考像素具有平滑特性。

3.左侧和上方参考像素的滤波过程

给定滤波强度strength>0以及滤波器系数w[3][5]={{0,4,8,4,0},{0,5,6,5,0},{2,4,4,4,2}},LeftCol[0: W + H -1]和AboveRow[0: W + H -1]的滤波流程描述如下:

❍如果当前变换块有可用的上方参考像素并且选定的帧内预测角度angle<180°,那

么AV1根据angle的取值,对指定的参考像素进行滤波:

●当angle<90°时,对AboveRow[ i ]进行滤波, i =0,1,2,…, W + H -1。

●当angle>90°时,只对AboveRow[ i ]进行滤波,i=0,1,2,…, W -1。

❍如果当前变换块有可用的左侧参考像素并且选定的帧内预测角度angle>90°,那么AV1将根据angle的取值,对指定的参考像素进行滤波:

●当angle>180°时,对LeftCol[ i ]进行滤波, i =0,1,2,…, W + H -1。

●当angle<180°时,只对LeftCol[ i ]进行滤波, i =0,1,2,…, H -1。

这里需要注意的是,上述公式中的AboveRow[ i -2+ j ]和LeftCol[ i -2+ j ]都是滤波之前的参考像素值。

图4-6以滤波器系数[2,4,4,4,2]为例展示了左侧和上方参考像素的滤波过程。其中A表示AboveRow,L表示LeftCol,黑色圆点标记位置A[ i ]和L[ i ]表示待滤波的参考像素;大括号覆盖区域表示A[ i ]和L[ i ]的滤波过程所需要的相邻像素。

图4-6 参考像素AboveRow[]和LeftCol[]的滤波过程

4.2.3 参考像素上采样

在自然图像中,水平和垂直预测模式通常比其他方向性的模式出现得更频繁,所以,对于尺寸较小,并且选定的帧内预测方向位于垂直和水平预测方向附近的变换块,AV1会根据需要对参考像素AboveRow[]和LeftCol[]进行上采样操作,以提高这些变换块的预测方向精度。由于垂直预测方向和水平预测方向使用的是整像素位置参考像素来生成预测像素值,因此这两种预测方向并不需要对参考像素使用上采样操作。

假设upsampling_above和upsampling_left分别表示是否需要对AboveRow[]和LeftCol[]进行上采样操作的标志位。标志位等于0表示不进行上采样,等于1表示进行上采样。标志位upsampling_above和upsampling_left的推导方案可以描述如下:

❍标志位upsampling_above的推导过程:

d =|angle-90°|。

●如果 d ≤0|| d ≥40,则upsampling_above=0。

●否则:

■如果当前变换块的上方或左侧相邻变换块的预测模式是平滑预测模式,则upsampling_above=( W + H ≤8),即只有4×4变换块需要上采样操作。

■如果当前变换块的上方和左侧相邻变换块的预测模式不是平滑预测模式,则upsampling_above=( W + H ≤16),即变换块4×4、4×8、8×4和8×8需要上采样操作。

在upsampling_above的推导过程中, d ≤0表示选定的帧内预测方向为垂直预测方向,即预测角度等于90°;而 d ≥40表示选定的帧内预测方向角度距离垂直帧内预测方向较远。在这两种情况下,不需要对AboveRow[]进行上采样。

❍标志位upsampling_left的推导过程:

d =|angle-180°|。

●如果 d ≤0|| d ≥40,则upsampling_left=0。

●否则:

■如果当前变换块的上方和左侧相邻变换块的预测模式是平滑预测模式,则upsampling_left=( W + H ≤8),即只有4×4变换块需要上采样操作。

■如果当前变换块的上方和左侧相邻变换块的预测模式不是平滑预测模式,则upsampling_left=( W + H ≤16),即变换块4×4、4×8、8×4和8×8需要上采样操作。

在upsampling_left的推导过程中, d ≤0表示选定的帧内预测方向为水平预测方向;而 d ≥40表示选定的帧内预测方向角度距离水平帧内预测方向较远。在这两种情况下,不需要对LeftCol[]进行上采样。

当upsampling_above和upsampling_left确定之后,AV1将根据它们的取值来决定是否对AboveRow[]和LeftCol[]进行上采样。下面用p来表示数组AboveRow或LeftCol,out表示存储上采样输出结果的数组, sz 表示需要插值的像素个数。在进行上采样之前,p[-1: sz -1]是可用的输入像素值,其余位置均是无效的像素值。当上采样完成之后,out[-2:2 sz -2]是有效的像素值,这些像素值由输入像素值和插值得到的像素值组成,out[2 i ]存储的是原始输入像素值p[ i ],out[2 i -1]是通过插值得到的半像素位置处的像素值。AV1使用4抽头插值滤波器[-1,9,9,-1]插值得到半像素位置的像素值。滤波器利用左右2个相邻整像素位置像素,根据下面的公式来插值得到对应半像素位置像素值:

out[2 i -1] = -p[ i -2] + 9 · p[ i -1] + 9 · p[ i ]-p[ i+ 1]

= -out[2 i -4] + 9 · out[2 i -2] + 9 · out[2 i ]-out[2 i+ 2]

图4-7以 sz =8为例展示了上采样前后数组p[]中像素的对应关系,其中输出像素数组中的黑色圆点标记位置存储的是原始输入像素值。灰色三角形标记位置是待插值的半像素位置,该位置上的像素值是使用原始输入像素值p[1]、p[2]、p[3]和p[4]插值得到的。

正如4.2.4节所述,在方向帧内预测中,预测像素是利用AboveRow[]或LeftCol[]中相邻两个参考像素的加权平均来生成的。假设预测方向的角度为 α ,在这个预测角度下,p[ x ][ y ]使用的参考像素是AboveRow[],那么p[ x ][ y ]计算如下:

p[ x ][ y ] =ω· AboveRow[base] + (1 · AboveRow[base + 1]

图4-7 上采样过程的输入和输出像素之间的位置对应关系

其中base是根据预测角度 α 计算得到的参考像素位置,其计算方式如4.2.4节所述。所以,这种上采样过程有助于在AboveRow[]或LeftCol[]中的相邻参考像素之间实现更平滑的过渡,从而提高预测的准确性和视频质量。

与参考像素滤波过程一样,上采样过程也可以通过序列级语法元素enable_intra_edge_filter来选择性地开启或关闭。

4.2.4 预测像素生成

给定上方参考像素AboveRow[-1: W + H -1]和左侧参考像素LeftCol[-1: W + H -1],位置( x y )处的预测像素值p[ x ][ y ]是通过将p[ x ][ y ]的样本位置按照选定的预测方向投影到参考像素数组上。如果投影位置位于两个参考像素之间,那么就利用投影位置两侧的参考像素,通过线性插值来计算投影位置的像素值。假设预测方向的角度用angle来表示,根据预测方向角度的大小,AV1定义了3种帧内预测像素生成方案。

1.预测方向角度小于 90°

当angle小于90°时,AV1只用上方参考像素AboveRow[]即可生成预测像素p[col][row]。此时,预测像素值p[col][row]可以按照下面所示的步骤来计算:

其中, ,并且tan(angle)是angle的正切值。当upsample_above=1时,即参考像素使用上采样操作,此时参考像素的数量增加了一倍,并且参考像素位置发生了变化,计算投影位置两侧的参考像素时需要特殊处理。图4-8所示为预测角度小于90°时,p[0][1]的预测过程。其中黑色圆点表示参考像素位置,灰色圆点表示预测像素位置。 A 0,1 是p[0][1]的像素位置在上方参考像素中的投影位置,base 0,1 和base 0,1 +1是该投影位置附近的两个参考像素位置。根据正切函数定义,图4-8中的idx1计算如下:idx1=(row+1)/tan(α)=2/tan(α)。当用64对1/tan(α)进行缩放之后,即可得到idx1=(row+1)·dx=2·dx。

图4-8 预测角度小于90°时p[0][1]的预测过程

由于上方参考像素总数maxBaseX=( W + H -1)<<upsample_above,因此当根据上面的步骤计算得到的base≥maxBaseX时,p[col][row]=AboveRow[maxBaseX]。

2.预测方向角度大于90°,小于180°

当180°>angle>90°时,有些像素需要利用上方参考像素AboveRow[]来预测,而另外一些像素则需要利用左侧参考像素LeftCol[]来预测。图4-9所示为预测角度大于90°,小于180°时,p[0][0]和p[0][1]的预测过程,p[0][0]通过上方参考像素AboveRow[]来预测,而p[0][1]通过左侧参考像素来预测。这是因为p[0][1]在上方参考像素中的投影位置在左上角像素AboveRow[-1]的左侧,该投影位置左侧没有可用的上方参考像素,但是p[0][1]在左侧参考像素上的投影位置正好位于两个可用参考像素之间。

图4-9 预测角度大于90°,小于180°时,p[0][0]和p[0][1]的预测过程

为了判断是否使用上方参考像素AboveRow[],AV1首先计算p[col][row]上方参考像素的投影点位置idx和投影点位置左侧参考像素位置base:

如果base≥-(1<<upsample_above),那么使用上方参考像素AboveRow[]来预测p[col][row],即

否则,即base<-(1<<upsample_above),则使用左侧参考像素LeftCol[]来预测p[col][row],即

其中 并且

3.预测方向角度大于 180°

当angle大于180°时,预测值p[col][row]只需要左侧参考像素LeftCol[]即可生成。此时,预测像素值p[col][row]可以按照下述公式所示步骤来计算:

其中 。由于左侧参考像素总数maxBaseY=( W + H -1)<<upsample_left,因此当上述公式计算得到的base大于或等于maxBaseY时,p[col][row]=AboveRow [maxBaseY]。

图4-10所示为预测角度大于180°时,p[0][0]和p[1][0]的预测过程。其中dy0和dy1分别对应p[0][0]和p[1][0]的idx:dy0=1/tan(270°-α)并且dy1=2/tan(270°-α)。

图4-10 预测角度大于180°时p[0][0]和p[1][0]的预测过程

4.预测方向角度等于90°或180°

预测方向角度等于90°的预测模式又称为垂直预测模式,等于180°的预测模式称为水平预测模式。在垂直预测中,p[col][row]=AboveRow[col],col=0,1,2,…, W -1。在水平预测中,p[col][row]=LeftCol[row],row=0,1,…, H -1。图4-11以p[0][0]和p[0][1]为例展示了垂直和水平预测模式的预测过程。在垂直预测模式中,p[0][0]=p[0][1]=AboveRow[0];在水平预测模式中,p[0][0]=LeftCol[0],p[0][1]=LeftCol[1]。

图4-11 垂直和水平预测模式的预测过程

为了避免在预测过程中计算角度的正切值,AV1定义了数组Dr_Intra_Derivative [90]预先存储给定角度的正切值。具体来讲,元素Dr_Intra_Derivative[angle]表示 9OsZlSBihaNGh31M3y1mXcD6kMzw3mu5c7a46byFd/YuRRGEFwxWSDIspwvEaWXU

点击中间区域
呼出菜单
上一章
目录
下一章
×