双向光流(BIO)是采样点级别的运动优化,基于双向预测的块运动补偿,不需要传输多余信号。

H.266帧间预测:双向光流BIO

I(k)为参考点k(k=0,1)运动补偿之后的亮度值,I(k)/xI(k)/yI(k)的梯度水平分量和垂直分量。假设光流可用,运动矢量(vx,vy)可以如下得到,该式称为光流公式:
H.266帧间预测:双向光流BIO

将光流公式和Hermite插值联立得到如下多项式,在t=0时即为BIO预测值。
H.266帧间预测:双向光流BIO
其中τ0,τ1表示当前帧到参考帧的距离,如最上图所示,两者可以通过当前帧和参考帧的POC计算得到:

τ0=POC(current)POC(Ref0)
τ1=POC(Ref1)POC(current)

如果两个参考帧同向,即都来自于过去或将来,则τ0,τ1异号。这种情况下,两个参考帧不能相同,即τ0τ1,参考区域有非零运动(MVx0,MVy0,MVx1,MVy10),则运动矢量与时域距离成比例(MVx0/MVx1=MVy0/MVy1=τ0/τ1)

运动矢量(vx,vy)通过对AB两点值的最小差△最小化得到,A和B是运动轨迹与参考图像的交点,如上图。使用△的一阶泰勒展开公式:
H.266帧间预测:双向光流BIO
其中所有值都省略了采样点位置索引(i,j)。假设在周围区域内的运动是连续的,在以当前预测点(i,j)为中心的(2M+1)x(2M+1)的方形窗口Ω的△最小化公式如下:
H.266帧间预测:双向光流BIO
其中M=2。

JEM中将上式分为了水平和垂直的两次最小化,对算法进行了简化,记为式[1]:
H.266帧间预测:双向光流BIO
其中r和m为标准化参数,r=5004d8m=700d8防止除以0或很小值问题,d为bit深度。sn参数如下计算:
H.266帧间预测:双向光流BIO

为了保证BIO的内存读取和正常双向运动补偿相同,只计算当前块内部位置的方向和梯度值I(k)I(k)/xI(k)/y。对于预测块边缘的预测点,需要获取块外的位置信息,如下图a。在JEM中,块外位置使用最近的块内可用值,可以通过填充实现,如下图b。
H.266帧间预测:双向光流BIO

为了降低计算复杂度,BIO在JEM中是基于4x4块设计的。对于式[1]中的sn,一个4x4的BIO块会对块中采样点的sn进行合并,合并后得到的sn会被用于推导4x4块的BIO运动矢量偏移。基于块的sn计算公式如下:
H.266帧间预测:双向光流BIO
其中bk表示预测块的第k个4x4块的采样点集。

在一些情况下,BIO运动编组可能由于噪声或不规则运动不可靠。因此,BIO中设定了一个门限thBIO对MV运动编组数进行了限制。thBIO由当前帧的参考帧是否同向决定,如果参考帧全部同向,则thBIO被设为12x214d,否则设为12x213d

在运动补偿插值中,BIO的梯度使用HEVC运动补偿处理操作同步计算得到。

在JEM中,BIO被应用于两个预测来自不同参考帧的所有双向预测块。当LIC可用时,BIO不可用。

总结:
双向光流BIO是基于块运动补偿的运动优化,通过光流模型计算运动矢量。

相关文章: