AVS3引入了双向光流(BI-directional Optical flow,BIO)技术,和H.266/VVC中的BDOF类似,BIO用于解决基于块的预测会存在块内某些区域仍会有偏差的现象导致需要划分更小的块。通过补偿小的像素区域的位移,BIO可以使用更大的块来编码从而节省码率,达到像素级预测的效果。如图1,左侧是双向光流补偿前的预测结果,右侧是补偿后的预测结果。
图1 补偿前后的预测
传统的双向预测对两个已重建的块进行加权平均得到当前块的预测值,其中两个已编码的块一个来自于前向参考帧,另一个来自于后向参考帧。但是经过双向预测后,仍可发现在当前块的部分区域存在运动偏差。双向光流BIO技术利用光流原理对双向预测后的运动进行运动补偿。
双向光流仅适用于双向预测的情况,且仅用于亮度分量。根据光流微分方程使前向和后向预测值差值最小从而技术修正量。其对前后向预测块的每一个像素分别计算x方向和y方向的梯度值,并依据像素值及梯度值计算每个像素的计算因子。为了降低复杂度,认为每个簇(cluster)内所有像素有相同的运动矢量,而使用比簇更大的窗(window)可以提高计算得到的运动矢量的准确度。在BIO中,簇的尺寸为4x4,窗的尺寸是6x6,即4x4的簇的运动矢量 是根据以簇为中心窗进行计算得到的。对每一个簇,利用簇所在窗内所有像素位置的计算因子算出运动矢量 ,最后对簇内的每一个像素计算预测值。
在BIO中,梯度计算使用8抽头滤波器,如表1
MV position | coefficients |
---|---|
0 | -4,11,-39,-1,41,-14,8,-2 |
1/4 | -2,6,-19,-31,53,-12,7,-2 |
1/2 | 0,-1,0,-50,50,0,1,0 |
3/4 | 2,-7,12,-53,31,19,-6,2 |
BIO在满足下列条件时开启:
-
双向预测
-
亮度分量
-
前向参考帧和后向参考帧分别在当前帧的两侧
-
小于64x64