av1编码--方向帧内预测

目录

4.2 方向帧内预测

4.2.1 预测方向定义

4.2.2 参考像素的滤波过程

1. 左上角参考像素滤波

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

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

4.2.3 参考像素上采样

标志位upsampling_above的推导过程:

标志位upsampling_left的推导过程:

4.2.4 预测像素生成

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

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

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

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

4.3 非方向帧内预测


4.2 方向帧内预测

4.2.1 预测方向定义

AV1 把 VP9 标准定义的 8 种帧内预测方向作为基准预测方向:V_PREDH_PREDD45_PREDD67_PREDD113_PREDD135_PREDD157_PREDD203_PRED。其中V_PREDH_PRED分别表示垂直和水平预测方向,即预测方向的角度分别是 90° 和 180°。其余名为Dxx_PRED的预测模式表示预测方向角度为 xx。这里的预测方向角度是指预测方向直线与基准方向直线所成的夹角。基准方向直线可视为以待预测像素为起点,水平向右的直线。

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

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

索引值

角度增量 /(°)

索引值

角度增量 /(°)

索引值

角度增量 /(°)

-3

-9

-2

-6

-1

-3

0

0

3

9

2

6

1

3

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

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

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

4.2.2 参考像素的滤波过程

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

1. 左上角参考像素滤波

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

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的取值及其含义

strength

的取值

含义

0

不对参考像素进行滤波

1

采用[0, 4, 8, 4, 0]

滤波器

2

采用[0, 5, 6, 5, 0]

滤波器

3

采用[2, 4, 4, 4, 2]

滤波器

根据当前变换块上方和左侧相邻变换块的预测模式是否是平滑预测模式,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_aboveupsampling_left分别表示是否需要对AboveRow[]LeftCol[]进行上采样操作的标志位。标志位等于 0 表示不进行上采样,等于 1 表示进行上采样。标志位upsampling_aboveupsampling_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_aboveupsampling_left确定之后,AV1 将根据它们的取值来决定是否对AboveRow[]LeftCol[]进行上采样。下面用p来表示数组AboveRowLeftColout表示存储上采样输出结果的数组,sz表示需要插值的像素个数。在进行上采样之前,p[-1:sz-1]是可用的输入像素值,其余位置均是无效的像素值。当上采样完成之后,out[-2:2sz-2]是有效的像素值,这些像素值由输入像素值和插值得到的像素值组成,out[2i]存储的是原始输入像素值p[i]out[2i-1]是通过插值得到的半像素位置处的像素值。AV1 使用 4 抽头插值滤波器[-1, 9, 9, -1]插值得得到半像素位置的像素值。滤波器利用左右 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]计算如下:

图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]可以按照下面所示的步骤来计算:

其中,dx = ⌊64 / tan(angle)⌋,并且tan(angle)angle的正切值。当upsample_above=1时,即参考像素使用上采样操作,此时参考像素的数量增加了一倍,并且参考像素位置发生了变化,计算投影位置两侧的参考像素时需要特殊处理。图 4-8 所示为预测角度小于 90° 时,p[0][1]的预测过程。其中黑色圆点表示参考像素位置,灰色圆点表示预测像素位置。A₀,₁p[0][1]的像素位置在上方参考像素中的投影位置,base₀,₁base₀,₁+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) << upsampling_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 << upsampling_above),那么使用上方参考像素AboveRow[]来预测p[col][row],即:

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

其中dx = ⌊64 / tan(180° - angle)⌋ 并且 dy = ⌊64 / tan(angle - 90°)⌋

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

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

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

图 4-10 所示为预测角度大于 180° 时,p[0][0]p[1][0]的预测过程。其中dy0dy1分别对应p[0][0]p[1][0]idxdy0 = 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]表示64/tan(angle)。

代码转载自:https://pan.quark.cn/s/8ce4326d996e 对于在 CentOS 7 系统中修改网卡配置文件后无法使设置生效的情况,经过实践验证,可以通过使用 nmcli 命令来进行调整。完成修改之后,需要重新启动虚拟机以使更改生效,这样操作流程即告完成。如果设置仍然无法生效,则表明虚拟机在启动过程中所获取的 IP 地址配置并非针对 eth0,此时可以对其它网卡的配置文件进行修改或将其移除。在 CentOS 7 系统中,网络配置的管理机制与早期版本存在差异,主要体现为采用了 Network Manager 服务来负责网络接口的管理。在某些情形下,尽管修改了 `/etc/sysconfig/network-scripts` 目录下的 `ifcfg-eth0` 文件,但网络配置却未能即时生效。此类问题的发生通常源于 CentOS 7 采用了不同于以往的配置读取方法。接下来将具体阐述如何借助 nmcli 命令来处理这一挑战。 以 root 用户身份登录系统并打开终端界面。nmcli 是 Network Manager 提供的命令行界面工具,它支持在命令行环境下执行网络连接的建立、编辑、查询及管理任务。针对修改 eth0 网卡配置的需求,可以遵循以下步骤进行操作: 1. 导航至 `/etc/sysconfig/network-scripts` 目录: ``` cd /etc/sysconfig/network-scripts ``` 2. 检查该目录内是否存在 `ifcfg-eth0.bak` 文件,该备份文件可能是先前调整配置时遗留下来的,若存在可能造成冲突。若发现该文件,可以选择将其删除: ``` [root@localhost netw...
代码转载自:https://pan.quark.cn/s/46fd08fb879c 网管教程 从入门到精通软件篇 ★一。★详尽的xp修复控制台指令及其应用!!! 放入xp(2000)的光盘,安装时选择R,执行修复! Windows XP(涵盖 Windows 2000)的控制台指令是在系统遭遇某些意外状况时的一种极具效用的诊断、检测以及恢复系统功能的工具。笔者确实一直期望能够将这方面的指令进行归纳,此次由老范辛苦整理了这份极具价值的秘籍。 Bootcfg bootcfg 命令用于启动配置与故障恢复(对大多数计算机而言,即 boot.ini 文件)。 带有特定参数的 bootcfg 命令仅在运用故障恢复控制台时方可使用。能够在命令行界面下运用带有不同参数的 bootcfg 命令。 用法: bootcfg /default 设定默认引导选项。 bootcfg /add 向引导清单中增添 Windows 安装。 bootcfg /rebuild 重复整个 Windows 安装流程并让用户选择需添加的项目。 注意:运用 bootcfg /rebuild 之前,应先借助 bootcfg /copy 命令备份 boot.ini 文件。 bootcfg /scan 探查用于 Windows 安装的全部磁盘并展示结果。 注意:这些结果被静态存储,并用于当前会话。若在当前会话期间磁盘配置发生变动,为获取更新的探查结果,必须先重启计算机,然后再次探查磁盘。 bootcfg /list 列示引导清单中已有的项目。 bootcfg /disableredirect 在启动引导程序中禁用重定向。 bootcfg /redirect [ PortBaudRrate] |[ useBio...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值