传统的双向预测是来自先前编码的图片的两个预测块的加权组合。 两个MV用于分别从List0参考图片和List1参考图片获得两个预测块。 然而,由于基于块的MC的限制,两个预测块内的样本之间通常存在剩余位移。 BDOF 的目的是在原始块级 MV 之上补偿每个预测样本的精细位移。
与基于块的运动补偿相反,MV 的细化值不在 BDOF 中用信号表示。 BDOF应用于常规Merge模式中或非SMVD的帧间模式中的CU的亮度CB。 BDOF 仅限于宽度和高度大于或等于 8 个亮度样本且亮度样本数量大于或等于 128 的 CU。
BDOF 建立在光流概念的基础上。 令 I(i, j,t) 为样本在位置 (i, j) 和时间 t 处的亮度值。 假设物体运动过程中每个样本的亮度恒定,此时的光流微分方程可以表示为(1):
\(\begin{aligned}&0=\frac{\partial I}{\partial t}+v_x\frac{\partial I}{\partial x}+v_y\frac{\partial I}{\partial y}.\end{aligned}\)
如图 8 所示,在每个样本位置,描述从 Ic 到 I0 的剩余小位移的运动 (vx , vy ) 与其从 Ic 到 I1 的运动对称。 这里,Ic、I0 和 I1 分别是当前块以及来自列表 0 和列表 1 参考图片的两个预测块中的亮度值数组。 为了简单起见,假设相对于两个参考图片的剩余运动幅度相同且方向相反。 这一假设反映在只有当两个不同的参考图片在 POC 中与当前图片具有相等距离时才应用 BDOF 的约束。
基于对称运动模型,式(1)可用于从两个方向估计Ic中每个样本的值,一个来自I0中的对应A,另一个来自I1中的对应B。 (vx , vy ) 的值是通过最小化具有精细运动的两个预测之间的差异来计算的(2)(3):
\((v_x,v_y):\min\sum_{(i,j)\in\Omega}\Delta^2(i,j);\)
\(\begin{aligned}
\Delta\left(i,j\right)=& I_0(i,j)-I_1(i,j) \\
&+v_x(\frac{\partial I_0(i,j)}{\partial x}+\frac{\partial I_1(i,j)}{\partial x}) \\
&+v_y(\frac{\partial I_0(i,j)}{\partial y}+\frac{\partial I_1(i,j)}{\partial y}).
\end{aligned}\)
这里(i,j)是预测块内样本的空间坐标,Ω是该样本的区域。 对离散样本数组 I0(i, j) 和 I1(i, j) 进行空间导数的近似(4)(5):
\(\begin{aligned}\frac{\partial I_{0,1}(i,j)}{\partial x}&=(I_{0,1}(i+1,j)-I_{0,1}(i-1,j))\gg1\end{aligned}\)
\(\begin{aligned}\frac{\partial I_{0,1}(i,j)}{\partial y}&=(I_{0,1}(i,j+1)-I_{0,1}(i,j-1))\gg1\end{aligned}\)
为了降低推导局部剩余运动的计算复杂度,假设每个 4 × 4 子块内的向量 (vx , vy ) 恒定。 它计算一次并由子块中的所有样本共享。 此外,为了使导出的运动场更加稳定,每个 4 × 4 子块的 (vx , vy ) 是根据中心包含 4 × 4 子块的扩展 6 × 6 区域(在(2)中记为 Ω )计算的。
(2) 中的优化问题可以通过将两个偏导数设置为零来解决,所得线性方程组近似求解为(4)-(9):
\(\begin{aligned}v_x=-\frac{S_4}{S_1},\quad v_y=-\frac{S_5+v_xS_3}{S_2}\end{aligned}\)
\(\begin{aligned}S_1&=\sum_{(i,j)\in\Omega}\vartheta_x(i,j)\cdot\vartheta_x(i,j),\end{aligned}\)
\(\begin{aligned}S_2&=\sum_{(i,j)\in\Omega}\vartheta_y(i,j)\cdot\vartheta_y(i,j),\end{aligned}\)
\(\begin{aligned}S_3&=\sum_{(i,j)\in\Omega}\vartheta_x(i,j)\cdot\vartheta_y(i,j),\end{aligned}\)
\(\begin{aligned}S_4&=\sum_{(i,j)\in\Omega}\vartheta_t(i,j)\cdot\vartheta_x(i,j),\end{aligned}\)
\(\begin{aligned}S_5&=\sum_{(i,j)\in\Omega}\vartheta_t(i,j)\cdot\vartheta_y(i,j),\end{aligned}\)
全部是自相关和互相关参数,ϑx (i, j) 和 ϑy(i, j) 是水平和垂直梯度,ϑt(i, j) 是位置 (i, j) 处样本的时间梯度 j,计算公式为(10)-(12):
\(\vartheta_x(i,j)=\frac{\partial I_0(i,j)}{\partial x}+\frac{\partial I_1(i,j)}{\partial x}\)
\(\begin{aligned}\vartheta_y(i,j)&=\frac{\partial I_0(i,j)}{\partial y}+\frac{\partial I_1(i,j)}{\partial y}\end{aligned}\)
\(\vartheta_t(i,j)=I_0(i,j)-I_1(i,j).\)
导出 (vx , vy) 后,通过沿着运动轨迹对列表 0 和列表 1 预测样本进行插值来计算块当前位置 (i, j) 处的最终双向预测信号 Ic(i, j)(如图8所示)基于Hermite插值,即
\(\begin{aligned}I’c(i,j)&=\frac{1}{2}(I_0(i,j)+I_1(i,j)+\sigma_{\mathrm{BDOF}}),\end{aligned}\)
\(\begin{aligned}\sigma_{\mathrm{BDOF}}&=v_{x}(\frac{\partial I_{0}(i,j)}{\partial x}-\frac{\partial I_{1}(i,j)}{\partial x})\\&+v_{\mathrm{y}}(\frac{\partial I_{0}(i,j)}{\partial y}-\frac{\partial I_{1}(i,j)}{\partial y}).\end{aligned}\)