在一般的视频编码标准中帧间预测有两种方式:单向预测和双向预测。一般是将图像划分为矩形(正方形)块然后到参考帧中去搜索和它最接近的块作为预测块,单向预测只有一个预测块,而双向搜索会有2个预测块,将2个预测块按固定权重(一般是平均)加权后即得到最终预测块。但是很多视频内容比较复杂,物体边界未必是水平或垂直,此时需要在物体边界附近划分出更多更小的块来提升编码效果。为了解决这个问题,在最近的编码标准中引入了非矩形划分,它用于双向预测,通过对2个预测块的每个预测值使用不同权重来拟合不同物体形状。
AV1中引入CWP(Compound Wedge Prediction),它通过3个预定义的表生成权重mask,共有16种mask,如图1。
图1 AV1对正方形和矩形的mask
VVC在2019年引入了三角划分(TPM,Triangular Partition Mode),划分边界是两条对角线,需要对每个预测值计算它到划分边界的距离,根据距离确定权重。后来VVC引入了几何划分(GPM,Geometric),它有64种划分模式,每个预测值需要根据每种划分模式的角度计算它到划分边界的距离从而得到权重。
图2 GPM模式权重计算
AWP
AVS3引入了角度加权预测(AWP,Angular Weighted Prediction),
角度加权模式支持的最小块尺寸为8,最大块尺寸为64,共支持8种角度,这8种角度的斜率绝对值共五种,分别是{水平,垂直,1,2,1/2},每个角度支持7种参考权重配置,因此对于每个块而言,角度加权模式的模式数共有56种模式。
图3 参考权重位置计算
AWP生成权重的方式借鉴了intra角度模式生成参考值的方式。AWP算法分为三步:
- 计算有效参考位置的数量;
- 生成有效的参考权重值;
- 根据有效的参考权重值计算每个预测像素的权重;
计算有效参考位置的数量
和帧内预测类似,AWP需要根据选择的角度和块尺寸确定参考权重数量,计算方法如下式,L是有效参考权重的数量,w和h是块的宽和高,m是角度斜率的绝对值,
AWP共支持8种角度,如图4,这8种角度的斜率绝对值共五种,
图4 AWP角度
AWP的计算精度是1/2像素精度,所以最终有效参考像素数量的计算如下,
L=(w<<1)+((h<<1)>>m)
生成参考权重值
确定参考权重数量后需要生成参考权重值,AWP对每个角度支持7种参考权重集,如图5
图5 参考权重计算
具体如下式,
Rx[x]=Clip3(0,8,x-d)
d=(L>>1)+(set_idx-3)*((L>>3)-1)
其中Rw[x]是位置x处的参考权重值,set_idx是7种参考集的索引。
生成预测像素权重
计算完参考权重后就可以根据参考权重计算每个预测像素的权重,如图6,这个过程类似intra模式根据参考像素计算预测值,
图6 像素权重计算
对不同角度计算方式如下:
其中Pw(i,j)是(i,j)位置处的权重。
AWP预测块生成
AWP用于双向预测,它需要两个单向mv分别生成两个预测块,然后按照上面计算的权重将两个预测块加权得到最终的预测块。为了获得2个单向mv需要构建有个mv列表,从列表中选择两个mv,列表的候选mv由时域和空域相邻块获得,如图7
图7 时空相邻块
- MV候选项生成
按照T,A,B,C,D,E,F的顺序将相邻块mv加入列表,其中T是时域块,对于T时域块L0的运动信息可用,则采用L0的运动信息进行缩放获取运动信息,若时域块L0的运动信息不可用,则采用时域块L1的运动信息进行缩放获取运动信息。对于空域块,若当前块运动信息为单向,直接取出单向运动信息并查重, 若当前块运动信息为双向,根据编号奇偶性裁剪为单向运动信息并查重(偶数选L0,奇数选L1),其中T的编号是0,A的编号是1,以此类推。
- MV修正
构建完mv列表后,从中选择2个mv最终用于AWP。这两个mv会被进一步修正,即加一个MVD。MVD由步长和方向决定,共有5种步长{1/4,1/2,1,2,4},4种方向{上,下,左,右}。最终MVD如下,其中offset是5种步长之一。
- 最终预测块生成
最终预测块由2个预测块加权得到,其中Fp(i,j)是坐标(i,j)处的最终预测值,M(i,j)第一个预测块在坐标(i,j)处的预测值,N(i,j)第二个预测块在坐标(i,j)处的预测值,Pw(i,j)是坐标(i,j)处的权重值。