VP9支持10种帧内预测模式,包括8种角度模式和非角度模式DC、TM(True Motion)模式,AV1在其基础上进一步扩展,AV1帧内预测角度模式更细化,同时新增了部分非角度模式。
扩展的角度模式
AV1在VP9角度模式的基础上进一步扩展,VP9的8种角度模式作为基础角度,对于尺寸大于8x8的块在每种基础角度上还有6个扩展角度,
图1 AV1角度模式
扩展角度在基础角度两侧以3°为步长分布,如图1。对于8x8的块只有8个基础角度,对于大于8x8的块共有56个帧内角度模式。对于有些预测角度若指向的参考像素不在整像素位置则通过一个2抽头双线性滤波器生成参考像素,
非角度Smooth模式
AV1新增了3个smooth模式,SMOOTH_V、SMOOTH_H和SMOOTH模式。它们通过距离加权计算预测值,
图2 Smooth距离加权
图2中深绿色块代表参考像素,浅蓝色块代表需要计算的预测像素。x和y分别表示当前待预测值距左侧参考列和上方参考行的距离,三种Smooth的预测值计算方法如下:
其中w表示权值,不同尺寸块的权值定义如下:
AV1还使用PAETH_PRED模式取代TM模式,PAETH_PRED模式的预测值计算方法如下:
Recursive Intra Prediction
RIP是AV1中新提出的帧内预测模式,它的预测不仅利用了当前块相邻行/列的信息,还利用了块内部的像素信息。
(a)
(b)
图3 RIP
对于RIP模式,如图3(a)它首先将块划分为互不重叠的4x2块,然后依次计算每个4x2块的预测值,当前4x2块的预测值可用作其他4x2块做参考。
对于第一个4x2预测值的计算如图3(b),它需要用到上一行和左侧列的7个参考像素p0~p6,对于8个预测像素x0~x7计算方法如下:
其中alpha、beta、gamma是预定义参数,一共5组。可以看见每个预测值都是由7个参考像素加权得到,可以看作每个预测值都是由参考像素被7抽头滤波器处理得到,预定义的5组参数如下:
对于其他4x2块预测值计算按同样方式进行,它们的参考像素可能是块内其他4x2块的预测值,这样便充分利用了同一块内相邻像素的相关性。
Chroma Predicted from Luma
CfL是利用亮度重建像素预测色度像素,CfL类似有VVC中的CCLM和AVS3中的TSCMP,它在亮度和色度间构建一个线性关系,如下式,通过这个线性关系利用亮度重建像素预测色度。
Pred_uv = alpha * AC + DC
图4 CfL过程
CfL过程如图4,首先对于420或422视频格式需要将重建的亮度分量下采样到和色度同样的大小,然后需要去除亮度中的DC信息只保留AC信息,其中DC信息即亮度像素的均值,将亮度重建值减去它们的均值即可得到对应的AC信息。然后将亮度AC乘以缩放因子alpha最后加上色度的DC信息便得到色度的预测值。这里alpha需要在码流中传输到解码端,色度的DC值由intra DC模式计算得到。
相关语法元素:
cfl_alpha_signs :包含U和V的alpha的符号信息。具体值的含义如下表。
cfl_alpha_signs | Name of signU | Name of signV |
0 | CFL_SIGN_ZERO | CFL_SIGN_NEG |
1 | CFL_SIGN_ZERO | CFL_SIGN_POS |
2 | CFL_SIGN_NEG | CFL_SIGN_ZERO |
3 | CFL_SIGN_NEG | CFL_SIGN_NEG |
4 | CFL_SIGN_NEG | CFL_SIGN_ZERO |
5 | CFL_SIGN_POS | CFL_SIGN_POS |
6 | CFL_SIGN_POS | CFL_SIGN_NEG |
7 | CFL_SIGN_POS | CFL_SIGN_POS |
cfl_alpha_u :U分量alpha的绝对值。
cfl_alpha_v:V分量alpha的绝对值。