Matrix-Based Intra Prediction(MIP)

VVC的 MIP 模式代表了通过数据驱动方法设计的帧内预测器的新概念。整个MIP过程的概述如图6所示。W和H表示给定块的宽度和高度,MIP的输入由直接位于块上方的W个参考样本refT和直接位于块左侧的H个参考样本refL组成。从这个输入中,MIP帧内预测样本是通过应用平均化、矩阵矢量乘法和线性插值来生成的。

给定变换块上支持的MIP模式的数目nMIP对于mipSizeId=0为16,对于mipSize Id=1为8,对于mipSizeId=2为6。这里,对于4×4个块,mipSizeId设置为0,对于8×8个块和正好具有长度为4的一侧的块,mipSizeId设置为1,对于所有其他块,设置为2。每个MIP模式可以被转置,这是由标志mipTranspose确定的。

1) Averaging

在平均步骤中,上边界样本refT和左边界样本refL被减少到较小的边界redT和redL,对于4×4个块,boundarySize=2,对于所有其他块,boundarySize=4。如果W=boundarySize·2n,则redT定义为:

\(\operatorname{redT}[i]=(\sum_{j=0}^{2^n-1}\operatorname{refT}[2^n\cdot i+j]+(1\ll(n-1)))\gg n,\)

其中0≤i<boundarySize。类似地定义了左简化边界redL。两个边界redT和redL连接到单个简化边界pTemp。这里,如果模式没有转置,则先取redT,否则先取redL。为了减小其对于典型信号特征的幅度,pTemp被转换为一个向量通过

\(\text{p}[0]=2^{B-1}-\text{pTemp}[0];\quad\text{p}[i]=\text{pTemp}[i]-\text{pTemp}[0],\)

其中B表示比特深度,0<i<2·boundarySize。

2) Matrix Vector Multiplication

在第二步中,在缩减边界之外,通过矩阵向量多重叠加生成大小为predSize·predSize的缩减预测信号predMip,如果mipSizeId(W, H)∈{0,1},predSize(W, H))=4,否则predSize(W, H)=8。对于第k个MIP预测模式,0≤k<nMIP,计算(9)

\(\text{predMip}=(A_k\cdot\text{p+32}\cdot1)\gg6+\text{pTemp}[0]\cdot1.\)

在这个等式中,Ak是一个矩阵,其行数为predSize·predSize,列数等于p的大小。此外,“·”表示矩阵向量乘法,1表示大小为predSize.predSize的一个矩阵的向量,并且按元素应用右移。之后,对predMip的分量应用范围[0,2B−1)的clip。

如果水平和垂直上采样因子被设置为 upHor=W/predSize并且upVer=H/predSize,则信号predMip分别在块的每个upHor和upVer采样位置定义最终预测信号pred。更准确地说,如果 0≤x<predSize 和 0≤y<predSze,对于mipTranspose=0,pred定义为:

\(\begin{aligned}\text{pred}[(x+1)\cdot\text{upHor}-1,(y+1)\cdot\text{upVer}-1]\\=\text{predMip}[y\cdot\text{predSize }+x].\end{aligned}\)

对于mipTranspose=1,pred是通过交换最后一个方程右侧的x和y来定义的。

3) Linear Interpolation

在最后一个步骤中,在剩余的样本位置,通过线性插值导出pred的值,其中首先执行水平插值,然后执行垂直插值。这里,对于水平插值,通过参考样本将预测扩展到左侧。

4) Specification of the MIP Matrices

(9)中出现的每个矩阵Ak由 mipSizeId 和 MIP 模式 k 唯一地确定。其条目可以使用7位精度来表示。此外,对于mipSizeId=2,每个Ak的第一列是零,因为对应的MIP模式将恒定边界信号映射到相同值的恒定预测信号。因此,总的来说,为MIP指定了16个大小为16×4的矩阵,用于mipSizeId=0,8个大小为16*8的矩阵,用作mipSizeId=1,以及6个大小为64×7的矩阵,用来mipSizeId=2。

5) Computational Complexity and Memory Requirement of MIP

生成MIP预测所需的每个样本的平均乘法次数最多为四次,因此不大于VVC的传统帧内预测模式。因此,可以观察到,尽管MIP用于超过20%的帧内块,但不会产生任何解码器运行时开销。此外,根据前一节,存储所有MIP矩阵Ak的条目的总存储器需求为4144字节。

6) MIP as a Video-Coding Tool Designed by Data-Driven Methods

VVC中MIP模式的最终设计可以被视为最初提出的基于神经网络的帧内预测模式的低复杂度变体。虽然数据驱动训练算法的关键方面也被用于确定矩阵Ak的参数,但最终用于VVC的设计代表了与初始变体不同的增益复杂度权衡的操作点。复杂度降低的中心步骤是预测的输入的下采样和输出的上采样。通过这种方式,矩阵的大小可以显著减小,并且相同的矩阵可以用于不同的块形状。

Adaptive Loop Filter (ALF)

Karczewicz, Marta, et al. “VVC in-loop filters.” IEEE Transactions on Circuits and Systems for Video Technology 31.10 (2021): 3907-3925.

A. Filter Shapes, Linear Filtering and Adaptive Clipping

ALF被应用于SAO的输出样本。亮度和色度分量分别支持7×7菱形和5×5菱形两种滤波器形状,如图2所示。在图2中,每个正方形对应于亮度或色度样本,中心正方形对应于待滤波的DC样本。为了减少信令开销和乘法次数,滤波器系数使用点对称。每个整数滤波器系数\(c_i\)用7-bit分数精度表示。此外,为了保持DC中性,一个滤波器的系数之和必须等于128,这是具有7-bit分数精度的1.0的定点表示(1):

\(\begin{aligned}2\sum_{i=0}^{N-2}c_i+c_{N-1}=128. & \left({\mathbf{1}}\right)\end{aligned}\)

在等式(1)中,对于 7 × 7 和 5 × 5 滤波器形状,系数 N 的数量分别等于 13 和 7。

通过将系数 \(c_i\) 应用于重构样本值 \(R(x, y)\)来导出坐标 (x, y) 处的滤波样本值 \(\tilde{R}(x,y)\),如下所示(2):

\(\begin{aligned}\tilde{R}(x,y)=&\left[\sum_{i=0}^{N-2}c_i\left(R\left(x+x_i,y+y_i\right)+R\left(x-x_i,y-y_i\right)\right) \\
+c_{N-1}R\left(x,y\right)+64\right]>>7,& \left({\mathbf{2}}\right)\end{aligned}\)

其中 \((x + x_i, y + y_i)\) 和 \((x − x_i, y − y_i)\) 是对应于第 i 个系数 \(c_i\) 的重构样本的坐标。 由于等式(1)的约束,等式(2)可以写为(3):

\(\begin{aligned}
\tilde{R}\left(x,y\right)& =R\left(x,y\right) \\
&+\left\{\left[\sum_{i=0}^{N-2}c_i\left(R\left(x+x_i,y+y_i\right)-R\left(x,y\right)\right)\right.\right. \\
&\left.+\sum_{i=0}^{N-2}c_i\left(R\left(x-x_i,y-y_i\right)-R\left(x,y\right)\right)+64\right] \\
&\left.>>7\right\}.& \left({\mathbf{3}}\right)
\end{aligned}\)

基于等式(3),通过将待滤波样本\(R(x, y)\)与其相邻样本之间的差的加权和添加到重构样本\(R(x, y)\)来获得滤波样本 \(\tilde{R}(x,y)\)。

等式(3)中的系数对于处于与待滤波样本相同的相对几何位置的所有样本是相同的。与仅考虑图片样本的几何接近度的线性滤波器不同,诸如双边滤波器的非线性滤波器也可以基于样本值的相似性来调整其系数。因此,双边滤波器可以在保留边缘的同时有效地去除噪声。为了允许ALF滤波器考虑样本之间的空间关系和值相似性,在等式(3)中添加clip相邻样本值和当前待滤波样本之间的差的可能性。当启用非线性ALF时,方程(3)修改如下:

\(\begin{aligned}
\tilde{R}\left(x,y\right)& =R\left(x,y\right) +\left[(\sum_{i=0}^{N-2}c_if_i+64)>>7 \right] & \left({\mathbf{4}}\right)
\end{aligned}\)

其中

\(\begin{aligned}f_i&=\min\left(b_i,\max\left(-b_i,R\left(x+x_i,y+y_i\right)-R\left(x,y\right)\right)\right)\\ &+\min\left(b_i,\max\left(-b_i,R\left(x-x_i,y-y_i\right)-R\left(x,y\right)\right)\right) & \left({\mathbf{5}}\right)\end{aligned}\)

\(b_i\)是由clipping索引\(d_i\)确定的系数\(c_i\)的clipping参数。\(b_i\)推导如下:

\(\left.b_i=\left\{\begin{array}{ll}2^{BD},&\text{when }d_i=0\\2^{BD-1-2d_i},&\text{otherwise}\end{array}\right.\right.\left({\mathbf{6}}\right)\)

其中BD是样本比特深度,\(d_i\)可以是0、1、2或3。

B. Luma Sub-Block Level Filter Adaptation

子块级滤波器自适应仅应用于亮度分量。每个4×4亮度块根据其方向性和2D拉普拉斯活动进行分类。首先,计算水平、垂直和两个对角线方向的样本梯度值:

\(\begin{aligned}
H_{k,l}=\left|2R\left(k,l\right)-R\left(k-1,l\right)-R\left(k+1,l\right)\right|, \\
V_{k,l}=\left|2R\left(k,l\right)-R\left(k,l-1\right)-R\left(k,l+1\right)\right|, \\
D0_{k,l}=\left|2R\left(k,l\right)-R\left(k-1,l-1\right)-R\left(k+1,l+1\right)\right|, \\
D1_{k,l}=\left|2R\left(k,l\right)-R\left(k-1,l+1\right)-R\left(k+1,l-1\right)\right|. & \left({\mathbf{7}}\right) \end{aligned} \)

基于样本梯度,子块水平梯度\(g_h\)、垂直梯度\(g_v\)和两个对角线梯度\(g_{d0}\)和\(g_{d1}\)计算如下:

\(\begin{aligned}
g_h=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}H_{k,l}, \\
g_v=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}V_{k,l}, \\
g_{d0}=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}D0_{k,l}, \\
g_{d1}=\sum_{k=i-2}^{i+5}+\sum_{l=j-2}^{i+5}D1_{k,l},
& \left({\mathbf{8}}\right)\end{aligned}\)

索引\(i\)和\(j\)是指4×4亮度块中左上角样本的坐标。从等式(8)中可以看出,覆盖目标4×4块的10×10亮度窗口内的样本梯度之和用于对该块进行分类。为了降低复杂性,只计算10×10窗口中间隔样本的梯度,如图3所示。其他采样梯度的值设置为0。

其次,分配方向性D,子块水平和垂直梯度的最大值和最小值的比值:

\(g_{h,v}^{max}=max(g_h, g_v),g_{h,v}^{min}=min(g_h,g_v) \left({\mathbf{9}}\right)\)

以及两个子块对角线梯度的最大值和最小值之比:

\(g_{d0,d1}^{max}=max(g_{d0}, g_{d1}),g_{d0,d1}^{min}=min(g_{d0},g_{d1}) \left({\mathbf{10}}\right)\)

相互比较并且与一组阈值t1和t2进行比较:

步骤1:如果\(g_{h,v}^{max} \le t1\cdot g_{h,v}^{min}\)和\(g_{d0,d1}^{max} \le t1\cdot g_{d0,d1}^{min}\),D都设置为0(块被归类为“texture”)。

步骤2:如果\(g_{h,v}^{max} / g_{h,v}^{min}>g_{d0,d1}^{max} /g_{d0,d1}^{min}\),则在步骤3中计算方向性D,否则在步骤4中计算。。

步骤3:如果\(g_{h,v}^{max}>t2\cdot g_{h,v}^{min}\),D设置为2(块被归类为“强水平/垂直”),否则D设置为1(块被分类为“弱水平/垂直“)。

步骤4:如果\(g_{d0,d1}^{max}>t2\cdot g_{d0,d1}^{min}\),D设置为4(块被归类为“强对角线”),否则D设置为3(块被分类为“弱对角线”)。

只有在前面的步骤中没有分配给D的值的情况下,才执行上述D计算中的每个后续步骤。第三,活动值A计算为:

\(A=\left(\sum_{k=i-2}^{i+5}\sum_{l=j-2}^{j+5}\left(V_{k,l}+H_{k,l}\right)\right)>>\left(BD-2\right). \left({\mathbf{11}}\right)\)

A被进一步映射到0到4的范围:\(\hat A=Q_{min(A,15)}\),其中\(Q_n=\{0, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4\}\)。最后,每个4×4亮度块被分类为25类中的一类:

\(C=5D+\hat A \left({\mathbf{12}}\right)\)

每个类都可以分配自己的滤波器。

在对每个4×4亮度块进行滤波之前,根据表I中指定的子块梯度值,对滤波器系数应用几何变换,如90度旋转、对角线或垂直翻转,如图4所示。这相当于将这些变换应用于滤波器支持区域中的样本。目标是对齐不同块的方向性,以减少ALF类的数量,进而减少滤波器系数。应用几何变换允许具有水平边的4×4块和具有垂直边的4×4块都具有相同的方向性D。

C. Coding Tree Block Level Filter Adaptation

除了亮度4×4块级滤波器自适应外,ALF还支持CTB级滤波器自适应。亮度CTB可以使用为当前slice计算的滤波器集或者为已经编码的slice计算的一个滤波器集。它还可以使用16个离线训练的过滤器集中的一个。在每个亮度CTB内,所选滤波器集中的哪个滤波器应应用于每个4×4块,由该块的等式(12)中计算的类别C确定。

Chroma仅使用CTB级滤波器自适应。一个片中的色度分量最多可以使用8个滤波器。每个CTB可以选择这些过滤器中的一个。

D. Syntax Design

滤波器系数和clipping索引被携带在ALF APS中。ALF APS可以包括多达8个色度滤波器和一个具有多达25个滤波器的亮度滤波器组。对于25个亮度类别中的每一个,还包括索引\(i_C\)。具有相同索引\(i_C\)的类共享相同的滤波器。通过合并不同的类,减少了表示滤波器系数所需的比特数。滤波器系数的绝对值使用后面跟有非零系数的符号位的0阶Exp-Golomb码来表示。当clipping被启用时,还使用两位固定长度代码来用信号通知每个滤波器系数的clipping索引。APS内的ALF系数和clipping索引所需的存储最多为3480比特。解码器可以同时使用多达8个ALF APS。

滤波器控制语法元素包括两种类型的信息。首先,ALF开/关标志在序列、图片、Slice和CTB级别用信号通知。只有在相应级别启用亮度ALF时,才能在图片和切片级别启用色度ALF。第二,如果在图片、Slice和CTB级别启用ALF,则在该级别用信号通知滤波器使用信息。如果图片内的所有Slice都使用相同的APS,则参考ALF APS ID以Slice级别或图片级别进行编码。亮度分量可以参考多达7个ALF APS,色度分量可以参考1个ALF APS。对于亮度CTB,用信号通知指示使用哪个ALF APS或离线训练的亮度滤波器集的索引。对于色度CTB,索引指示使用参考APS中的哪个滤波器。

E. Line Buffer Reduction

为了减少ALF的存储需求,VVC采用了行缓冲边界处理。在VVC中,行缓冲器边界被放置在水平CTU边界之上的4个亮度样本和2个色度样本。当将ALF应用于行缓冲区边界一侧的样本时,不能使用行缓冲区边缘另一侧的样本。

图5给出了两个例子,其中4×4亮度块与行缓冲区边界相邻。当将ALF应用于图5(a)中的行E至H中的4×4亮度块时,如果没有行缓冲区边界处理,则需要使用DBF和SAO过滤的行B至K的样本。在较低的CTU可用之前,DBF和SAO过滤器不能应用于行A到D。因此,在没有行缓冲器的情况下,ALF不能应用于行E至H中的样本,直到较低的CTU可用为止。结果,除了行A到D之外,从E到K的7个亮度行将必须存储在用于亮度ALF的行缓冲器中。类似地,4个附加色度行将必须存储在色度ALF的行缓冲器中。

图5还说明了当对与行缓冲区边界相邻的4×4亮度块进行分类时样本梯度值的计算。为了计算与行缓冲区边界相邻的样本梯度值(标记为×),应用重复填充来替换无法使用的样本。例如,在图5(a)中,用行E中的样本替换行D中的样本。行缓冲区边界另一侧的所有样本梯度值都设置为0。由于我们将一些样本梯度值设置为0,从而减少了样本梯度的总和,因此方程(11)中的A推导按如下比例缩放:

\(A=\left(\sum_{k=i-2}^{i+5}\sum_{l=j-2}^{j+5}\left(V_{k,l}+H_{k,l}\right)\cdot 3 \right)>>\left(BD-1\right). \left({\mathbf{13}}\right)\)

行缓冲区边界滤波应用如图6所示的对称样本填充,其中p12标记待滤波样本,p0至p24是SAO之后的样本值,p’0至p’24是修改后的样本值。当待滤波样本的滤波器形状不越过行缓冲区边界时,在滤波过程中使用SAO之后的样本值。否则,将在滤波过程中使用修改后的值。与重复填充相比,对称样本填充已被证明可以产生不太明显的视觉伪影。然而,当要滤波的样本位于最靠近行缓冲区边界的行中时,如图6(a)所示,2D滤波器等效于水平滤波器,它仍然会引入明显的视觉伪影。

通过将滤波器强度减少8倍来最小化这些伪影,从而得出以下公式,其中等式(4)中的偏移7被偏移10代替:

\(\tilde{R}\left(x,y\right)=R\left(x,y\right)+\left[\left(\sum_{i=0}^{N-2}c_if_i+512\right)>>10\right]\)

F. ALF Encoder Design in VTM

这里描述VTM-9.0中的ALF编码器实现。编码器通过最小化率失真成本来计算ALF语法元素的值,所述率失真成本是失真的加权和,所述失真被测量为原始样本和应用ALF滤波器之后的样本之间的平方误差,以及传输ALF语法元素所需的比特数。滤波器系数是通过求解Wiener-Hopf方程来计算的。采用平方误差估计方法,允许在不执行实际滤波操作的情况下计算滤波失真。针对clipping 索引的所有可能组合收集计算滤波器系数和估计失真所需的统计信息。分别收集每个CTB的统计数据,在亮度成分的情况下,收集每个CTU的每个类别的统计数据。

1) 亮度分量:对于每个图片,基于该图片的统计信息,获得亮度分量的新滤波器集,表示为FY,D,如下所示:
(1) 编码器通过合并启用ALF的CTB的统计信息来导出滤波器集FY,D。在第一次迭代中,假设为所有CTB启用ALF。
(2) 基于使用导出的滤波器计算的速率失真成本和CTB的统计来为每个CTB确定是否应用ALF滤波器。

步骤1)和2)重复4次。

当设计在步骤1)中设置的亮度滤波器时,编码器首先为25个亮度类别中的每一个计算滤波器。然后将合并算法应用于这25个滤波器。在每次迭代中,通过合并两个滤波器,该算法将滤波器的数量减少1。为了确定应该合并哪两个滤波器,对于每对剩余的滤波器,编码器通过分别合并两个滤波器和相应的统计数据来重新设计滤波器。使用重新设计的滤波器,然后估计失真。编码器以最小的失真合并该对。获得25个滤波器组,第一组具有25个滤波器,第二组具有24个滤波器,以此类推,直到第25组包含单个滤波器。选择最小化率失真成本的集合,包括对滤波器系数进行编码所需的比特。

在设计滤波器时,迭代计算clipping 索引和N−1滤波器系数,直到平方误差不减小。在每次迭代中,clipping 索引的值都会逐一更新,从索引d0开始,一直到达到索引dN−2。更新索引时,最多测试3个选项:保持其值不变、增加1或减少1。针对这3个值计算滤波器系数和近似失真,并选择使平方误差最小化的值。在第一次迭代开始时,clipping 索引的值被初始化为2,或者当合并两个滤波器时,di的值被设置为这些滤波器的对应剪裁索引的平均值。

亮度分量还可以使用离线训练的滤波器集和可用ALF APS中携带的亮度滤波器集。通过访问APS,从最近发信号到最后一个,编码器获得多达7个亮度滤波器组,这些滤波器组表示为FiY,APS,其中i=0,。。。,NAPS−1。亮度ALF语法元素的最终值是通过选择滤波器集Fij的最佳组合来获得的,其中i=0,1和j=0,。。。,NAPS

· 16个离线训练的滤波器集,
· FY,D,如果i=1,
· F0Y,APS ,…, Fj-1Y,APS, 如果j>0

2) 色度分量:基于当前图片统计,计算色度滤波器组FC,D。导出8个色度滤波器组,表示为FiC,D,其中i=1,2,。。。,7, 8.滤波器组FiC,D包含i个滤波器。滤波器组FiC,D如下获得:

1) 当前图片被均匀地划分为i个区域。对于每个区域,通过合并该区域中所有CTB的统计信息来计算色度滤波器。
2) 对于图片中的每个色度CTB,ALF开/关标志和来自集合FiC,D的滤波器索引被确定为最小化估计的速率失真成本。
3) FiC,D中的每个滤波器通过合并色度CTB的统计来重新设计,其中在步骤2)中为其选择了当前要重新设计的滤波器。
4) 步骤2)和3)重复i+1次。

选择使速率失真成本最小化的滤波器组FiC,D作为色度滤波器组FC,D。最后,编码器从可用的APS中选择FC,D或滤波器组之一,以用于色度分量。

Bi-Directional Optical Flow (BDOF)

传统的双向预测是来自先前编码的图片的两个预测块的加权组合。 两个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}\)

Subblock-based temporal motion vector prediction (SbTMVP)

VVC 支持基于子块的时间运动矢量预测(SbTMVP)方法。 与 HEVC 中的时间运动矢量预测 (TMVP) 类似,SbTMVP 使用并置图片(collocated picture)中的运动场来改进当前图片中 CU 的运动矢量预测和Merge模式。 SbTVMP和TMVP 使用相同的并置图片 。

SbTMVP 与 TMVP 的不同主要有以下两个方面:

– TMVP 在 CU 级别预测运动,但 SbTMVP 在子 CU 级别预测运动;
– TMVP 从并置图片中的并置块获取时间运动矢量(并置块是相对于当前 CU 的右下或中心块),而 SbTMVP 在从并置图片获取时间运动信息之前应用运动移位 ,其中运动位移是从当前 CU 的空间相邻块之一的运动矢量获得的。

SbTVMP 过程如图 34 所示。SbTMVP 分两步预测当前 CU 内子 CU 的运动矢量。 第一步,检查图 34 (a) 中的块A1。 如果A1具有使用并置图片作为其参考图片的运动矢量,则选择该运动矢量作为要应用的运动移位。 如果A1未在帧间预测模式下进行编码或 MV 未指向并置图片,则将运动偏移设置为 (0, 0)。

第二步,应用步骤 1 中识别的运动移位(即添加到当前块的坐标),以从并置图片中获取子 CU 级运动信息(运动矢量和参考索引),如图 34(b)所示。 图 34 (b) 中的示例假设运动移位设置为块 A1 的运动。 然后,对于每个子CU,使用并置图片中其对应块(覆盖中心样本的最小运动网格)的运动信息来导出子CU的运动信息。 在识别出并置子CU的运动信息之后,以与HEVC的TMVP过程类似的方式将其转换为当前子CU的参考索引和运动矢量,其中应用时间运动缩放以将时间运动矢量的参考图片与当前CU的参考图片对齐。

当前CU的中心位置的运动信息,是从并置图片中包含移位的中心位置的块的运动信息导出的,在图5中标记为MV3。如果包含移位的中心位置的块没有进行帧间编码,则认为SbTMVP候选不可用。在对应的子块没有被帧间编码的情况下,当前子块的MV被设置为中心位置的MV。

在VVC中,包含SbTVMP候选者和仿射Merge候选者的组合的基于子块的Merge列表被用于基于子块的Merge模式的信令。 SbTVMP 模式由序列参数集 (SPS) 标志启用/禁用。 如果启用 SbTMVP 模式,则将 SbTMVP 预测器添加为基于子块的Merge候选者列表的第一个条目,后面是仿射合并候选者。 基于子块的Merge列表的大小在SPS中用信号通知,并且基于子块的Merge列表的最大允许大小在VVC中是5。

SbTMVP 中使用的子 CU 大小固定为 8×8,与仿射合并模式一样,SbTMVP 模式仅适用于宽度和高度都大于或等于 8 的 CU。

附加SbTMVP Merge候选的编码逻辑与其他Merge候选相同,即对于P或B切片中的每个CU,执行附加RD检查来决定是否使用SbTMVP候选。

VVC中的collocated picture

collocated picture 是参考帧列表中先前已编码的帧。 在VVC中,每一帧的picture header中通过 ph_collocated_from_l0_flagph_collocated_ref_idx 两个参数来显示地指定使用哪一帧作为collocated picture。

ph_collocated_from_l0_flag 等于 1 指定用于TMVP collocated picture是从 RPL0 导出的。 ph_col located_from_l0_flag 等于 0 指定用于TMVP collocated picture是从 RPL1 导出的。 当 ph_temporal_mvp_enabled_flag 和 pps_rpl_info_in_ph_flag 都等于 1 并且 num_ref_entries[1][RplsIdx[1]] 等于 0,则推断 ph_col located_from_l0_flag 的值等于 1。

ph_collocated_ref_idx 指定用于TMVP collocated picture的参考索引。 当ph_collocated_from_l0_flag等于1时,ph_col located_ref_idx引用RPL0中的帧,并且ph_col located_ref_idx的值应在0到num_ref_entries[0][RplsIdx[0]]-1的范围内,包括0和num_ref_entries[0][RplsIdx[0]]-1。 当ph_collocated_from_l0_flag等于0时,ph_col located_ref_idx引用RPL1中的帧,并且ph_col located_ref_idx的值应在0到num_ref_entries[1][RplsIdx[1]]-1的范围内,包括0和num_ref_entries[1][RplsIdx[1]]-1。

在VTM中,首先会在Lo和L1中寻找可以使用的参考帧,如果L0和L1的参考帧都可用,则选择其中QP比较大的帧,如果某个列表不可用,则选择另外一个列表,如果都不可用,则关闭TMVP。

Adaptive motion vector resolution (AMVR)

在 HEVC 中,当slice header中的 use_integer_mv_flag 等于 0 时,运动矢量差(MVD)(CU 的运动矢量和预测运动矢量之间)以四分之一亮度样本为单位用信号表示。 在VVC中,引入了CU级自适应运动矢量分辨率(AMVR)方案。 AMVR允许CU的MVD以不同的精度进行编码。 根据当前CU的模式(正常AMVP模式或仿射AVMP模式),可以如下自适应地选择当前CU的MVD:

– 正常 AMVP 模式:四分之一亮度样本、半亮度样本、整数亮度样本或四亮度样本。
– 仿射 AMVP 模式:四分之一亮度样本、整数亮度样本或 1/16 亮度样本。

如果当前CU具有至少一个非零MVD分量,则有条件地用信号发送CU级MVD分辨率指示。 如果所有 MVD 分量(即,参考列表 L0 和参考列表 L1 的水平和垂直 MVD)均为零,则推断四分之一亮度样本 MVD 分辨率。

对于具有至少一个非零MVD分量的CU,用信号发送第一标志以指示是否将四分之一亮度样本MVD精度用于CU。 如果第一标志为0,则不需要进一步的信令并且四分之一亮度样本MVD精度用于当前CU。 否则,用信号发送第二标志以指示将半亮度样本或其他MVD精度(整数或四亮度样本)用于正常AMVP CU。 在半亮度样本的情况下,半亮度样本位置使用 6 抽头插值滤波器而不是默认的 8 抽头插值滤波器。 否则,用信号发送第三标志以指示对于正常AMVP CU使用整数亮度样本还是四亮度样本MVD精度。 在仿射 AMVP CU 的情况下,第二个标志用于指示是使用整数亮度样本还是 1/16 亮度样本 MVD 精度。 为了确保重建的 MV 具有预期的精度(四分之一亮度样本、半亮度样本、整数亮度样本或四亮度样本),CU 的运动矢量预测器将四舍五入为相同的精度。 与 MVD 相加之前的精度与 MVD 的精度相同。 运动矢量预测值向零舍入(即,负运动矢量预测值向正无穷大舍入,正运动矢量预测值向负无穷大舍入)。

编码器使用 RD 检查确定当前 CU 的运动矢量分辨率。 为了避免总是对每个 MVD 分辨率执行四次 CU 级 RD 检查,在 VTM 中,仅有条件地调用除四分之一亮度样本之外的 MVD 精度的 RD 检查。 对于普通 AVMP 模式,首先计算四分之一亮度样本 MVD 精度和整数亮度样本 MV 精度的 RD 成本。 然后,将整数亮度样本MVD精度的RD成本与四分之一亮度样本MVD精度的RD成本进行比较,以决定是否有必要进一步检查四亮度样本MVD精度的RD成本。 当四分之一亮度样本MVD精度的RD成本远小于整数亮度样本MVD精度的RD成本时,跳过四亮度样本MVD精度的RD检查。 然后,如果整数亮度样本 MVD 精度的 RD 成本显着大于先前测试的 MVD 精度的最佳 RD 成本,则跳过半亮度样本 MVD 精度的检查。 对于仿射 AMVP 模式,如果在检查仿射合并/跳过模式、合并/跳过模式、四分之一亮度样本 MVD 精度正常 AMVP 模式和四分之一亮度样本 MVD 精度仿射 AMVP 的速率失真成本后未选择仿射帧间模式,则不检查 1/16 亮度样本 MV 精度和 1-pel MV 精度仿射帧间模式。 此外,在四分之一亮度样本MV精度仿射帧间模式中获得的仿射参数被用作1/16亮度样本和四分之一亮度样本MV精度仿射帧间模式中的起始搜索点。

ISP (Intra Subpartition Mode)

内部子分区(ISP)模式是VVC中新引入的工具之一。 它是一种分区机制,旨在对帧内预测块的非平稳特征进行建模。 具体来说,ISP将一个块的亮度分量垂直或水平地分割成K个大小相等的子分区,这些子分区以顺序的方式一一处理。

Layout

帧内子分区 (ISP) 根据块大小将亮度帧内预测块垂直或水平划分为 2 或 4 个子分区。 例如,ISP 的最小块大小为 4×8(或 8×4)。 如果块大小大于 4×8(或 8×4),则相应的块将被划分为 4 个子分区。 值得注意的是,M × 128(M ≤ 64)和 128 × N(N ≤ 64)ISP 块可能会对 64 × 64 VDPU 产生潜在问题。 例如,single-tree 情况下的M×128 CU具有M×128亮度TB和两个相应的M/2×64色度TB。 如果CU使用ISP,则亮度TB将被分为4个M×32TB(只能水平分割),每个TB小于64×64块。 然而,在当前的ISP设计中,色度块没有被划分。 因此,两个色度分量的大小都将大于 32 × 32 块。 类似地,使用 ISP 的 128 × N CU 也可以有类似的情况。 因此,这两种情况对于 64 × 64 解码器管道来说是一个问题。 因此,可以使用 ISP 的 CU 大小限制为最大 64 × 64。图 19 显示了两种可能性的示例。 所有子分区都满足至少有16个样本的条件。

Processing

如果是水平分割,则从上到下逐一处理子分区;如果是垂直分割,则从左到右处理。每个子分区的编码方式与任何其他帧内预测块相同:首先,使用子分区的相邻样本生成预测,并获得相应的残差信号。 后者被变换和量化,变换系数被熵编码并发送到解码器。 最后,得到的重建样本可以用来生成下一个子分区的预测。 此过程一直持续到所有子分区都已编码为止。

然而,对于宽度小于4的子分区,在上述过程中有一个例外。这是因为典型的硬件架构使用光栅扫描模式分配样本,然后以4×1组的方式访问它们。对于这样的设计,1×H和2×H的子分区可能构成一个问题。因此,ISP的最小预测宽度为4个样本,如下所示:不是在TB级别执行每个预测,而是将TB分组在4×H区域中,这些区域仅使用相邻样本作为参考进行一次预测。这保证了可以同时处理每个4×H区域内的TB。例如,一次预测一个垂直分割的4×16 CU,然后并行处理相应的四个1×16 TB。

Prediction

在使用ISP的CU内,所有子部分都应用相同的帧内预测模式,因此只需要对其进行一次编码。ISP帧内预测模式可以从任何传统的帧内预测方式中选择,即Planar、DC和角度方式,其中对于后一种方式,根据CU宽高比执行角度方式向广角方式的转换。PDPC以与非ISP情况相同的方式应用于所有ISP子分区,前提是它们的宽度和高度至少为4。此外,参考样本滤波过程和帧内插值滤波器选择的条件不再存在,并且在ISP模式下,DCT-IF 滤波器总是用于分数位置插值。如果一个块的MRL索引不是0,则ISP编码模式将被推断为0,因此ISP模式信息将不会发送到解码器。

Transforms

为了降低信令成本,ISP总是使用隐式多变换选择(MTS)。因此,编码器不会对每个结果子分区的不同可用变换执行RD测试。ISP模式的变换选择将改为固定的,并根据所使用的帧内模式、处理顺序和块大小进行选择。因此,不需要任何信号。例如,设th和tv是分别为w×h子分区,其中w是宽度h是高度。然后根据以下规则选择变换:

  • 如果w=1或h=1,则分别不存在水平变换或垂直变换。
  • 如果w≥4且h≤16,则th=DST-VII,否则,th=DCT-II
  • 如果h≥4且h≤16,则tw=DST-VII,否则,tw=DCT-II

其次,低频不可分离变换(LFNST)是针对整个ISP块全局用信号发送的,因此,相同的LFNST矩阵用于具有非零编码块标志(CBF)的所有子分区。只有当所有子分区都满足zero-out条件时,LFNST才能用于ISP-CU。非ISP情况下的LFNST转换内核也用于ISP。因此,如果子分区的宽度或高度小于4,则不能将LFNST用于ISP。

Coefficient coding and signalization

子分区的残差信号的系数以与 VVC 中的常规块相同的方式进行熵编码,并进行以下修改:

  • 每个子分区的编码块标志(CBF)的上下文是先前编码的子分区的CBF的值(在第一个子分区的情况下,默认值为0)。
  • 使用ISP的块的至少一个CBF被假定为非零。 因此,如果一个块包含 n 个子分区,并且前 n-1 个子分区的 CBF 为零,则第 n 个 CBF 被推断为1,因此不会显式地用信号通知它。
  • 如果子分区是一行,则最后位置语法元素仅需要发送一个坐标。
  • 令 w 和 h 分别为每个子分区的宽度和高度。 然后,如果 w ≥ 8 且 h ≤ 2,系数子块将具有 16/h × h 的形状。 类似地,如果 w ≤ 2 并且 h ≥ 8,系数子块将具有 w × 16/w 形状。 在所有其他情况下,它们将具有与常规帧内预测块中使用的相同的 4 × 4 形状。 结果,所有系数子块将具有 16 个样本。

关于信令,为每个块添加了两个新的语法元素:第一个是指示当前块是否使用 ISP 的标志(仅适用于不使用 MRL 的非 4×4 亮度块)。 当使用 ISP 时,会发送第二个标志,指定使用哪种类型的分割(水平或垂直)。 此外,这两个新标志使用一个上下文自适应二进制算术编码(CABAC)。 请注意,如果只能进行一次分割(例如,128 × 64 块只能垂直分割),则在解码器侧推断出该标志,因此不会传输该标志。

二值化过程(Binarization process)

VVC标准中使用了4种二值化方案:截断莱斯码(truncated Rice (TR)), 截断二进制码(truncated binary (TB)), k阶指数哥伦布码(k-th order Exp-Golomb (EGk)), 定长码(fixed-length (FL))。

TR码

TR码由前缀和后缀组成,后缀可能不存在。TR码有3个输入,分别是:语法元素值 symbolVal、门限值 cMax 和莱斯参数 cRiceParam。语法元素值 symbolVal 的前缀值 prefixVal 定义如下:

prefixVal = symbolVal >> cRiceParam

如果 prefixVal 小于 cMax >> cRiceParam,则前缀码由 prefixVal 个1和0组成。下表给出了这种一元二值化的码表:

如果 prefixVal 大于等于 cMax >> cRiceParam,则前缀码由 cMax >> cRiceParam 个1组成。

cMax 大于 symbolVal cRiceParam 大于0时,TR码的后缀存在,后缀值推导如下:

suffixVal = symbolVal − ( prefixVal << cRiceParam )

TR 码的后缀通过定长码(FL)为 suffixVal 进行二值化,cMax 值等于 ( 1 << cRiceParam ) − 1。

TB码

TB码的输入有两个,分别为语法元素值 synVal 和门限值 cMax。TB码的推导过程如下:

n = cMax + 1
k = Floor( Log2( n ) )
u = ( 1 << ( k + 1 ) ) − n

如果 synVal 小于 u,则通过定长码(FL)为 synVal 进行二值化,其中 cMax 值等于 ( 1 << k ) − 1。否则,通过定长码(FL)为 (synVal+u) 进行二值化来导出TB码,其中 cMax 值等于(1<<(k+1))−1。

k阶指数哥伦布码

k阶指数哥伦布码包括前缀码和后缀码,输入为语法元素值 symbolVal 和阶数 k,输出的二进制串定义如下,其中函数put(X)是将X放在二进制串的末尾。

absV = Abs( symbolVal )
stopLoop = 0
do
if( absV >= ( 1 << k ) ) {
put( 0 )
absV = absV − ( 1 << k )
k++
} else {
put( 1 )
while( k−− )
put( ( absV >> k ) & 1 )
stopLoop = 1
}
while( !stopLoop )

下表给出了0阶指数哥伦布码的前缀码和后缀码

下表给出了无符号0阶指数哥伦布码,对应语法元素表中的ue(v)

对于有符号的0阶指数哥伦布码,对应语法元素表中的se(v),VVC标准中采用了映射的方法,映射表为:

FL码

FL 码是通过使用符号值 symbolVal 的固定长度位无符号整数二进制串来构造的,其中fixedLength = Ceil( Log2( cMax + 1 ) )。 FL 码的 bin 索引使得 binIdx = 0 与最高有效位相关,并且 binIdx 的值向最低有效位递增。

Geometric Partitioning Mode in Versatile VideoCoding

H. Gao, S. Esenlik, E. Alshina, and E. Steinbach, “Geometric partitioning mode in versatile video coding: Algorithm review and analysis,” IEEE Trans. Circuits Syst. Video Technol., early access, Nov. 24, 2020

对于自然视频内容,矩形块划分对于 MCP (motion compensated prediction)来说不是最佳选择。 视频序列中图片的运动场通常由运动物体的边界来分割,如图2(a)和图2(b)所示。 这是因为对象通常表现出相对于静态背景或其他移动对象的移动,并且自然序列中的对象边界很少遵循矩形块图案。 如图2(c)所示,当使用矩形块来近似移动对象边界时,需要更精细的块划分,这增加了用于用信号通知这些块的划分和预测语法元素的速率开销。 此外,近似的分割边界很少遵循实际的运动场边界。 因此,预测误差更高,这增加了残差信令的比特率。

为了提高划分精度,基于分割的划分方法被集成到现有的视频编码标准结构中。 在基于分割的划分方法中,划分图是通过在编码器处对参考图片中的参考块应用分割算法来获得的。 在解码器处应用相同的分割算法以避免分割图的变换。 当前块被划分图分成多个分区,每个分区或者单独地与其关联的MV执行MCP或者从其他分区导出样本值。 可以向解码器发送额外的MV或者在解码器侧导出额外的MV以指示应用分割算法的参考块的位置。 尽管基于分割的分割方法很好地近似了对象的实际轮廓,但像素精确的分割算法显着增加了计算复杂性并导致硬件实现困难,特别是在解码器处。 此外,基于分割的分割方法无法有效地处理大块或包含由复杂纹理引起的多个边缘的块,例如图2(b)的左侧。

在 HEVC 和 VVC 的开发过程中,几何划分方案及其变体已在文献中提出并在核心实验 (CE) 中进行了研究。 几何划分方案旨在提高划分精度并最小化解码器端的计算复杂度和实现难度。 代替分割算法,使用一组预定义的直线将矩形块几何分割成两个分区,如图2(d)中的示例所示。 每个分区与其运动信息相关联并单独执行MCP。 运动信息和划分信息被发送到解码器。 该块由解码器侧解析的运动和划分信息直接重建。 因此,几何划分方案的解码器复杂度增加较小。

A. Core Algorithm of GPM in VVC

由于VVC中的帧内预测CU可以使用角度和非线性预测模式,非水平和非垂直边缘得到了很好的处理。 因此, GPM 重点关注帧间预测的 CU。 当GPM应用于CU时,该CU被直线划分边界分成两部分。 划分边界的位置在数学上由角度参数 \(\varphi\)和偏移参数 \(\rho\) 定义。 这些参数被量化并组合成GPM划分索引查找表。 当前CU的GPM划分索引被编码到比特流中。 总的来说,VVC 中的 GPM 支持 64 种划分模式,对于尺寸为 \(w\times h={2^k}\times2^l\)的亮度 CU,其中 \(k,l~\in~{3\ldots6}\)。 此外,GPM 在宽高比大于 4:1 或小于 1:4 的 CU 上被禁用,因为窄 CU 很少包含几何划分的图案。

两个 GPM 分区包含用于预测当前 CU 中相应部分的单独运动信息。 GPM 的每个部分只允许使用单向 MCP,因此 GPM 中 MCP 所需的内存大小等于常规双向 MCP 的大小带宽。 为了简化运动信息编码并减少GPM可能的组合,运动信息采用Merge模式进行编码。 GPM Merge候选列表源自传统的Merge候选列表,以确保仅包含单向运动信息。

图4说明了GPM的预测过程。 当前CU的右侧预测部分(大小为w×h)由MV0从P0预测,而左侧部分由MV1从P1预测。 最终的 GPM 预测 PG 是通过使用整数混合矩阵 W0 和 W1 执行混合过程生成的,包含的权重范围为 0 到 8。这可以表示为(1):

\(P_{\mathrm{G}}=(W_0\circ P_0+W_1\circ P_1+4)\gg3\)

其中(2):

\(W_0+W_1=8J_{w,h},\)

其中 Jw,h 是大小为 w × h 的矩阵。 混合矩阵的权重取决于样本位置和分区边界之间的位移。 图 5 显示了一组示例混合矩阵。 混合矩阵推导的计算复杂度极低,因此这些矩阵可以在解码器侧即时生成。

然后从原始信号中减去GPM预测的PG以生成残差。 使用常规 VVC 变换、量化和熵编码引擎将残差变换、量化并编码到比特流中。 在解码器侧,通过将残差添加到 GPM 预测 PG 来重建信号。 当残差可以忽略不计时,GPM 还支持Skip模式。

B. Partitioning Boundary Definition and Quantization

1)划分边界的定义:划分边界定义为几何上位于CU内部的直线。 这条直线的方程用 Hessian 范式表示为(3):

\(x_\mathrm{c}~\cos(\varphi)-y_\mathrm{c}~\sin(\varphi)+\rho=0\)

其中(xc,yc)定义与CU的中心位置相关的连续位置。 在图6(a)所示的示例中,(3)中的角度参数\(\varphi\)描述了从x轴到分割边界法向量的逆时针角度,而(3)中的偏移参数 \(\rho\) 是划分边界从CU中心定义的原点的位移。请注意,y轴被反转以简化分区边界的离散化。

任意位置(xc,yc)相对于分割边界的位移d用于导出混合矩阵W0W1。 根据(3),d的值给出为(4):

\(d(x_\mathrm{c},y_\mathrm{c})=x_\mathrm{c}\mathrm{~}\cos(\varphi)-y_\mathrm{c}\mathrm{~}\sin(\varphi)+\rho.\)

由于位移是有方向的,因此 d 的值可以是正值或负值。 d 的符号表示位置 (xc, yc) 属于哪个分区,而 d 的大小等于 (xc, yc) 到分区边界的距离。

2)角度参数\(\varphi\)的量化:为了实现合理数量的定义的划分边界,必须对角度参数\(\varphi\)和偏移参数\(\rho\) 进行量化。 如图 6(b)所示,角度参数\(\varphi\)被量化为 20 个离散角度 \(\varphi_i\),范围 [0, 2π) 对称划分。 由于对角线或反对角线分割边界在 GPM 中最常用,因此量化的\(\varphi_i\)被设计为固定\(\tan(\varphi_i)\) 值,该值等于应用 GPM 的 CU 的可能长宽比。 例如,如果将 GPM 应用于宽高比 w/h = 1/2 的 CU,则对角线分区边界与由 \(\varphi_i~=~\arctan(1/2)\) 和 \(\rho=0\) 定义的 (3) 线对齐。 在所提出的 GPM 算法中,\(\tan(\varphi_i)\) 被限制为 {0, ±1/4, ±1/2, ±1, ±2, ∞} 中的值。 请注意,不包括产生接近水平划分边界的±4的正切值,因为运动场的接近水平划分不太频繁地用于自然视频内容。

根据基于正切值的角度参数量化,(4) 中的 \(\cos(\varphi_i)\) 被离散化为表 1 所示的 3 位精度查找表。 cosLut[·] 的输入 i 是量化 \(\varphi_i\)的角度索引。 请注意,表 I 中的一些未使用的角度索引 i 值被跳过。 基于三角恒等式,\(sin\varphi_i\)的离散化查找表可以很容易地导出(5):

\(\operatorname{sinLut}[i]=-\operatorname{cosLut}[(i+8)\%32]\)

因此,(4)被重写为(6):

\(d(x_c,y_c)=(x_c\cdot cosLut[i])\gg3+(y_c\cdot cosLut[(i+8)\%32])\gg3+\rho\)

3)偏移参数\(\rho\)的量化:图6(c)示出了偏移参数\(\rho\)量化的示例。 根据CU宽度w和高度h,偏移参数\(\rho\)被量化为\(\rho_j\)。 偏移索引 j = {0 … 3}。 为了避免不同块大小之间分布不均匀的分区边界偏移,首先将 \(\rho_j\)分解为(7):

\(\rho_j=\rho_{x,j}\cos(\varphi_i)-\rho_{y,j}\sin(\varphi_i)\)

或(8):

\(\begin{aligned}\rho_j&=(\rho_{x,j}\cdot\cos\text{Lut}[i])\gg3\\&+(\rho_{y,j}\cdot\cos\text{Lut}[(i+8)\%32])\gg3.\end{aligned}\)

然后使用 ρx,j 和 ρy,j 与 w 和 h 耦合(9):

\(\rho_{x,j}=\begin{cases}0&i\%16=8\text{ or }(i\%16\neq0\text{ and }h\geqslant w)\\\pm j\cdot w/8&\text{otherwise}\end{cases}\)

和(10):

\(\rho_{y,j}=\begin{cases}\pm j\cdot h/8&i\%16=8\text{ or }(i\%16\neq0\text{ and }h\geqslant w)\\0&\mathrm{otherwise},\end{cases}\)

其中 j 是量化偏移 ρj 的偏移索引。 (9)和(10)中的ρx,j和ρy,j的符号表示偏移方向,如果角度索引i < 16,则将其设置为正,否则设置为负。 偏移参数量化后,式(6)改写为(11):

\(\begin{aligned}d(x_{\mathrm{c}},y_{\mathrm{c}})&=((x_{\mathrm{c}}+\rho_{x,j})\cdot cosLut[i])\gg3+((y_{\mathrm{c}}+\rho_{y,j})\cdot cosLut[(i+8)\%32])\gg3.\end{aligned}\)

表 II 中列出的几个冗余量化偏移在所提出的 GPM 算法中被删除。 因此,GPM 划分模式的总数为 \(N_\mathrm{GPM}~=~N_{\varphi}N_{\rho}~-~N_{\varphi}/2~-~2~-~4~=~64\) ,其中 Nψ = 20,Nρ = 4。GPM 划分模式如图 7 所示,按相同的角度索引 i 分组。 图 7 中的虚线划分线展示了未包含在所提出的 GPM 设计中的冗余模式。 支持的 64 种 GPM 分区模式由语法元素 merge_gpm_partition_idx 进行索引。

4)样本位置的离散化:为了避免GPM预测过程中的额外插值,P0和P1的整数位置在(1)中加权。 因此,混合矩阵 W0 和 W1 需要从基于整数位置的 d(m, n) 导出,其中 m, n ∈ Z ≥0,而不是从 d(xc, yc) 导出,其中 xc, yc ∈ R。 原点转移到图6(d)中的左上角,因为样本位置通常指的是VVC中CU的左上角样本。 因此,(11) 的完全离散形式由下式给出(12):

\(d(m,n)=((m+\rho_{x,j})\ll1-w+1)\cdot cosLut[i] +((n+\rho_{y,j})\ll1-h+1)\cdot cosLut[(i+8)\%32]\)

它用于生成混合矩阵 W0 和 W1 。 由于 cosLut[·] 为 3 位精度,且 m 和 n 左移一位,因此 d(m, n) 和 d(xc, yc) 的关系满足(13):

\(d(m,n)=\lfloor16d(x_\mathrm{c},y_\mathrm{c})+0.5\rfloor\)

请注意,在 (12) 中,d(m, n) 无需任何乘法即可实现,因为 cosLut[·] 中的值、ρx,j 中的 w/8 以及 ρy,j 中的 h/8 都是基于移位的值。 (12) 的无乘法设计的结果是 GPM 的编码器和解码器复杂度极低。

C. Blending Matrices of GPM

在提出的GPM算法中,应用了软的混合过程。 也就是说,如图8所示,当样品位于软混合区域内(即在虚线之间)时,使用(0,8)范围内的加权值倾斜; 否则,选择了0或8的完整加权值。 一个混合矩阵中单个样品位置的加权值由坡道函数给出(14):

\(\gamma_{x_c,y_c}=\begin{cases}0&d(x_c,y_c)\leqslant-\tau\\\frac{8}{2\tau}(d(x_c,y_c)+\tau)&-\tau<d(x_c,y_c)<\tau\\8&d(x_c,y_c)\geqslant\tau,&\end{cases}\)

τ定义混合区域的宽度。 在呈现的GPM算法中,选择τ作为两个样品。 基于(13)的τ= 2,(14)被离散为(15):

\(\gamma_{m,n}=\text{Clip}3(0,8,(d(m,n)+32+4)\gg3)\)

其中d(m, n)是根据(12)计算的。 然后,可以通过(2)轻松地计算其他混合矩阵的权重。 图5可视化一组混合矩阵的示例。 请注意,(2)和(15)用于生成Luma分量的混合矩阵,并且基于视频序列的颜色格式,简单地从Luma混合矩阵中进行了色度混合矩阵。

混合矩阵分配基于以下规则:如果角度索引i不在[12,26]的范围内,则将(15)的输出γm,n分配给与m∈{0…w – 1}和n∈{0…h – 1}的混合矩阵W0,而W1由(2)计算。 否则,如果角度索引i属于[12,26],则将γm,n分配给W1,而w0将推到出。 图9显示了解释这些规则的示例。 从常规Merge列表中得出的GPM Merge列表是通过在B1,A1,A1,B0,A0和B2的顺序上确定空间相邻CUS的运动信息来构建的。 熵编码期间,B1索引的code word通常最短。 当预测P0的运动信息由B1预测(即用最短的code word编码)时,GPM中运动信息的信号传输成本被最小化,因为P0的Merge索引在P1 Merge索引之前发出信号。 因此,在图9(a)的情况下,\(i\notin[12,26]\),(15)的γm,n分配给W0,而在图9(b)的情况下,γm,n分配给W1。

D. Motion Information Storage

在VVC中,使用MCP后使用4×4样品粒度将CU的运动信息存储在缓存中。 存储的运动信息用于MV预测和合并列表的构建,或用于推导Deblocking滤波器的边界强度。 在VVC的常规MCP中,实际用于预测当前CU的运动信息被跨越并存储到4×4单元中。 但是,GPM涉及三种类型的运动信息。 也就是说,P0和P1包含其自己的单向MV,而混合区域则通过两者的运动信息进行物理预测。 因此,GPM的运动信息存储是基于分区的自适应设计的。

与混合矩阵派生类似,4×4单元的运动存储类型\(T\)由从本机的中心到划分边界的位移d确定。 在这里,使用(12)中的4×4单元的整数中心位置计算d,即(4M+2,4n+2)用m∈{0…w – 1}和n∈{0…h – 1}。 然后,该4×4单元的运动存储类型\(T\)为(16):

\(T_{4m,4n}=\begin{cases}1-A&d(4m+2,4n+2)\leqslant-32\\2&-32<d(4m+2,4n+2)<32\\A&d(4m+2,4n+2)\geqslant32,&\end{cases}\)

A 表示与混合矩阵对齐对齐的分区分配,由(17):

\(A=\begin{cases}1&i\in[12,26]\\0&otherwise.&\end{cases}\)

图10显示了具有角度索引\(i\notin[12,26]\)和\(i\in[12,26]\)的GPM运动存储图的示例。 t = 0或t = 1表示相应的4×4单元存储了用于预测P0或P1的单向运动信息,而带有t = 2的单元用于对两个单向运动组合的双向运动信息进行排序。 如果P0和P1的运动信息来自同一参考图片列表,则将双向运动信息设置为P1的运动信息。 请注意,GPM的运动存储过程通常与硬件实现中的混合过程并行执行,因此,通常在运动存储过程中重新计算d(4M+2, 4n+2),而不是重复使用d(m, n)来自混合矩阵推导。

E. GPM Merge List Derivation

GPM的运动信息通过Merge模式进行编码。 如前所述,GPM的每个部分仅使用单向运动信息,以避免GPM的MCP的其他内存占用。 但是,常规Merge列表可能包含直接从相邻CUS复制的单向或双向Merge候选。 由于双向Merge候选,常规Merge列表不能直接用作GPM Merge列表。

GPM Merge列表是通过GPM Merge索引的奇偶性从常规Merge列表中派生出来的。也就是说,对于具有GPM Merge索引的偶数值的候选者,使用来自具有对应的常规Merge索引的参考图片列表L0的MV0作为GPM Merge候选者。如果MV0不可用,则使用来自参考图片列表L1的MV1。相反,选择MV1作为GPM Merge索引的奇数值的默认GPM Merge候选,并且如果MV1不可用,则使用MV0。基于索引奇偶校验的方法直接从常规Merge列表中提取GPM Merge候选,而无需修剪,这将实现复杂性降至最低。

表III显示了GPM Merge列表推导的示例。 在表III(a)中所示的常规Merge列表的示例中,索引2和3的Merge候选中包含仅可用MV1的单向MVS,而其他Merge候选可以使用的是双向MVS。 相应的GPM Merge列表如表III(b)所示,MV1用于索引2的候选,因为默认MV0不可用。 GPM Merge候选者的其余部分是根据GPM Merge索引的奇偶校验从常规Merge列表中提取的。

F. Entropy Coding

GPM的几个语法元素使用熵编码被编码到位流中。 在高级语法HLS中,启用标志的GPM和GPM Merge候选者的最大数量在序列参数集SPS中编码。 GPM启用标志用固定长度代码进行编码,而GPM Merge候选者的最大数量相对于常规Merge候选者的最大数量,并用0-阶指数指数Golomb代码进行编码。

图11示出了Merge数据的语法树。 因为 GPM 模式是在Merge数据语法树的底部用信号通知的,所以在 CU 级别不需要 GPM 启用标志。 当获取的 ciip 标志为 0 并且满足 GPM 的应用条件时,GPM 隐式启用。

表IV是GPM的部分语法元素表。使用VVC的基于上下文的自适应二进制算术编码(CABAC)引擎对三个语法元素进行编码,包括GPM分区索引(merge_gpm_partition_idx)、P0的Merge索引(merge_gpm_idx0)和P1的Merge索引(merge_gpm_idx1)。由于merge_gpm_partition_idx是大致均匀分布的,因此使用固定长度代码对其进行二进制化,并使用CABAC的旁路模式(无上下文模型)对其进行编码,以简化编码过程,而merge_gpm_idx0merge_gpm_idx1用0阶截断Rice码进行二进制化,并使用用相同的常规Merge索引初始值初始化的一个单个上下文模型进行编码。注意,所使用的GPM Merge索引GPM_idx0,1通过以下方式从用信号发送的语法元素导出(18):

\(\mathrm{GPM\_idx}_0=merge\_gpm\_idx0\)

和(19):

\(\begin{aligned}\text{GPM_idx}_1&=merge\_gpm\_idx1\\&+(merge\_gpm\_idx1\geqslant\text{GPM_idx}_0)?1:0,\end{aligned}\)

因为两个Merge索引不允许相同。

G. Encoder Search

所提出的 GPM 算法中应用了基于率失真优化 (RDO) 的编码器搜索。 与基于纹理的搜索方法相比,基于RDO的搜索更容易捕获包含相似纹理的几何分离的运动场。 此外,对于不同的视频内容,基于 RDO 的搜索比基于统计的方法更通用。

假设用信号发送的GPM Merge候选的最大数量是六,则每个划分模式总共具有6×5=30个运动信息组合,因为GPM_idx0和GPM_idx1不相同。 由于在 GPM 中设计了 NGPM = 64 划分模式,因此编码器将从 6 × 5 × 64 = 1920 个划分和运动信息的组合 GPM 候选中选择一个。 作为比较,在 VTM 7.0 中使用基于完全搜索的 RDO 对多达 6 × 5 × 2 = 60 个组合的 TPM 候选进行了详尽的测试。 组合的 GPM 候选者的数量对于 RDO 在编码器侧执行完整的混合和变换编码过程来说非常大。 为了降低 GPM 编码器搜索的计算复杂度,使用以下四个阶段确定最佳匹配 GPM 候选者:

Stage1:对于GPM Merge列表的每个单向运动信息候选,执行六个GPM Merge候选上的全CU MCP以获得与当前CU大小相同的六个矩形预测器。 预测变量和原始信号之间的亮度分量的绝对差之和 (SAD) 计算为 SADCU,k,其中索引 k ∈ {0 … 5}。 此阶段排除 GPM Merge候选列表中的相同条目。 如果Merge候选列表中的所有运动信息相同,则中止整个GPM编码器搜索。

Stage2:对于每个 GPM 划分模式,使用硬混合矩阵屏蔽掉由六个矩形预测器的 GPM_idx0 预测的部分(即,仅选择 0 或 8 作为权重值,具体取决于位移 d(m, n)的符号.)。 计算这些部分的亮度 SAD 并表示为 SADP0,k,l,其中 k = 0… 5 且 l = 0…63. 由于使用了硬混合矩阵(无混合区域),因此通过 GPM_idx1 预测的部分的 SAD 可以通过以下方式获得(20):

\(\mathrm{SAD}_{\text{P}1,k,l}=\mathrm{SAD}_{\text{CU},k}-\mathrm{SAD}_{\text{P}0,k,l}.\)

对于索引为 l 的划分模式,组合率失真 (RD) 成本 Jα,β,l 由下式给出(21):

\(J_{\alpha,\beta,l}=\text{SAD}_{\text{P}0,\alpha,l}+\text{SAD}_{\text{P}1,\beta,l}+\lambda(R_\alpha+R_\beta)\)

其中α和β表示预测指标GPM_idx0和GPM_idx1,Rα和Rβ表示相应的估计码率。 α 和 β 都属于 {0…5},但 α = β 的情况被排除在编码器搜索中。 GPM 候选按 Jα,β,l 排序。 此外,排除具有 Jα,β,l > SADCU,k +λRk 的 GPM 候选,其中 Rk 是第 k 个 GPM Merge候选的估计码率。

Stage3:第 2 阶段中最好的 60 个(或更少)组合 GPM 候选者用于进行软混合过程,以在亮度分量中生成 PG。 每个组合候选的 GPM 预测器 PG 和原始信号之间的亮度绝对变换差 (SATD) 之和计算为 SATDPG,l。 RD 成本更新为(22):

\(\begin{aligned}J’_{\alpha,\beta,l}&=\text{SATD}_{\text{PG},l}+\lambda(R_\alpha+R_\beta+R_l)\end{aligned}\)

其中Rl表示划分索引的估计码率。 GPM 候选者再次按 J’α,β,l 排序。 在此阶段,使用先前测试的编码工具(例如常规Merge或Affine)的最低 SATD 成本来提前终止。

Stage4:第 3 阶段中最好的八个(或更少)候选者的相应色度分量是通过软混合过程生成的。 对这些候选应用残差变换编码(如果存在残差)和基于 CABAC 的码率估计,以获得准确的码率成本 RGPM,其中包括运动码率、划分模式和残差编码。 这些候选信号与原始信号之间的三个分量的失真通过平方差之和 (SSD) 来测量,即 SSDPG,l。 最后,总体 RD 成本最低的 GPM 候选者(23):

\(J_{\alpha,\beta,l}^{\prime\prime}=\mathrm{SSD}_{\mathrm{PG},l}+\lambda R_{\mathrm{GPM}}\)

被选为最终的GPM模式。

图 12 显示了全搜索中最常用的 16 种 GPM 模式以及这些模式在所提出的四阶段基搜索中的出现率。 可以看出,基于四阶段的搜索的发生率趋势与全搜索的发生率趋势相似,这表明基于四阶段的搜索可以以相对较低的编码器复杂度有效地保持编码性能。 注意,GPM的编码器搜索算法不限于所提出的基于四阶段的方法。 图 12 中呈现的统计数据可以用作其他编码器实现的指南。

VVC中的 Affine motion compensated prediction

在HEVC中,仅应用平移运动模型来进行运动补偿预测(MCP)。 在现实世界中,运动有很多种,例如放大/缩小、旋转、透视运动和其他不规则运动。 在VVC中,应用基于块的仿射变换运动补偿预测。 如图27所示,块的仿射运动场由两个控制点(4参数)或三个控制点运动矢量(6参数)的运动信息来描述。

对于 4 参数仿射运动模型,块中样本位置 (x, y) 处的运动矢量导出为:

对于 6 参数仿射运动模型,块中样本位置 (x, y) 处的运动矢量导出为:

其中,(mv0x,mv0y)是左上角控制点的运动矢量,(mv1x,mv1y)是右上角控制点运动矢量,以及(mv2x,mv2y)是左下角控制点运动矢量。

为了简化运动补偿预测,应用基于块的仿射变换预测。 为了导出每个 4×4 亮度子块的运动矢量,根据上述方程计算每个子块的中心样本的运动矢量(如图 28 所示),并四舍五入到 1/16 分数精度。 然后应用运动补偿插值滤波器来生成具有导出的运动矢量的每个子块的预测。 色度分量的子块大小也设置为4×4。 4×4 色度子块的 MV 计算为对应 8×8 亮度区域中左上和右下亮度子块 MV 的平均值。

与平移运动帧间预测一样,也有两种仿射运动帧间预测模式:仿射Merge模式和仿射 AMVP 模式。

Affine merge prediction

AF_MERGE模式可以应用于宽度和高度都大于或等于8的CU。在该模式下,当前CU的CPMV是基于空间相邻CU的运动信息生成的。 最多可以有五个 CPMVP 候选者,并且用信号发送索引来指示要用于当前 CU 的候选者。 以下三种类型的 CPMV 候选用于形成仿射合并候选列表:

  • 从相邻 CU 的 CPMV 推断的继承仿射merge候选
  • 使用相邻 CU 的平移 MV 导出的构造仿射merge候选 CPMVP
  • 零 MV

在VVC中,最多有两个继承仿射候选,它们是从相邻块的仿射运动模型导出的,一个来自左相邻CU,一个来自上相邻CU。 候选块如图29所示。对于左侧预测器,扫描顺序为A0->A1,对于上面的预测器,扫描顺序为B0->B1->B2。 仅选择双方的第一个继承候选人。 在两个继承的候选者之间不执行修剪检查。 当识别出相邻仿射CU时,其控制点运动矢量用于导出当前CU的仿射merge列表中的CPMVP候选者。 如图30所示,若将相邻左下块A采用仿射方式编码,则得到包含块A的CU的左上角、右上角和左下角的运动矢量v2、v3和v4。 当块A采用4参数仿射模型编码时,根据v2、v3计算当前CU的两个CPMV。 如果块A采用6参数仿射模型编码,则根据v2、v3和v4计算当前CU的三个CPMV。

构造仿射候选是指通过组合每个控制点的邻近平移运动信息来构造候选。 控制点的运动信息是从图 31 中所示的指定空间邻居和时间邻居导出的。CPMVk (k=1,2,3,4) 表示第 k 个控制点。 对于 CPMV1,检查 B2->B3->A2 块并使用第一个可用块的 MV。 对于 CPMV2,检查 B1->B0 块,对于 CPMV3,检查 A1->A0 块。 对于 TMVP,如果可用,则用作 CPMV4。

获得四个控制点的 MV 后,基于这些运动信息构建仿射merge候选者。 使用以下控制点 MV 组合按顺序构建:

{CPMV1, CPMV2, CPMV3}, {CPMV1, CPMV2, CPMV4}, {CPMV1, CPMV3, CPMV4},
{CPMV2, CPMV3, CPMV4}, { CPMV1, CPMV2}, { CPMV1, CPMV3}

3 个 CPMV 的组合构造了 6 参数仿射合并候选,2 个 CPMV 的组合构造了 4 参数仿射合并候选。 为了避免运动缩放过程,如果控制点的参考索引不同,则丢弃控制点MV的相关组合。

在检查继承的仿射合并候选者和构造的仿射合并候选者之后,如果列表仍然未满,则将零个MV插入到列表的末尾。

Affine AMVP prediction

仿射 AMVP 模式可应用于宽度和高度都大于或等于 16 的 CU。在比特流中用信号发送 CU 级别中的仿射标志以指示是否使用仿射 AMVP 模式,然后用信号发送另一个标志以指示是否使用 4 参数仿射或 6 参数仿射。 在此模式下,当前 CU 的 CPMV 与其预测器 CPMVP 的差异在比特流中用信号表示。 仿射AVMP候选列表大小为2,它是按顺序使用以下四种类型的CPVM候选生成的:

  • 从相邻 CU 的 CPMV 推断的继承仿射 AMVP 候选者
  • 使用相邻 CU 的平移 MV 导出的仿射 AMVP 候选 CPMVP
  • 来自邻近 CU 的平移 MV
  • 零 MV

继承的仿射 AMVP 候选的检查顺序与继承的仿射merge候选的检查顺序相同。 唯一的区别在于,对于 AVMP 候选者,仅考虑与当前块中具有相同参考图片的仿射 CU。 将继承的仿射运动预测器插入候选列表时,不应用修剪过程。

构造的 AMVP 候选是从图 31 中所示的指定空间邻居导出的。使用与仿射merge候选构造中相同的检查顺序。 另外,还检查相邻块的参考图片索引。 使用检查顺序中经过帧间编码且具有与当前 CU 中相同的参考图片的第一个块。 只有一个当当前CU采用4参数仿射模式编码,并且mv0和mv1都可用时,将它们作为一个候选添加到仿射AMVP列表中。 当当前CU采用6参数仿射模式编码并且所有三个CPMV都可用时,它们被添加为仿射AMVP列表中的一个候选者。 否则,构建的 AMVP 候选者将被设置为不可用。

如果插入有效的继承仿射 AMVP 候选和构造 AMVP 候选后,仿射 AMVP 列表候选仍然小于 2,则将依次添加 mv0 、 mv1 和 mv2 作为平移 MV 来预测当前 CU 的所有控制点 MV, 有空的时候。 最后,如果仿射AMVP列表仍未满,则使用零MV来填充该列表。

Affine motion information storage

在 VVC 中,仿射 CU 的 CPMV 存储在单独的缓冲区中。 存储的CPMV仅用于为最近编码的CU以仿射Merge模式和仿射AMVP模式生成继承的CPMVP。 从 CPMV 导出的子块 MV 用于运动补偿、平移 MV 的Merge/AMVP 列表的 MV 导出以及去块。

为了避免附加 CPMV 的图像行缓冲区,来自上面 CTU 的 CU 的仿射运动数据继承与来自正常相邻 CU 的继承的处理方式不同。 如果用于仿射运动数据继承的候选CU位于上述CTU行中,则使用行缓冲器中的左下和右下子块MV而不是CPMV来进行仿射MVP推导。 这样,CPMV仅存储在本地缓冲区中。 如果候选CU是6参数仿射编码,则仿射模型退化为4参数模型。 如图 32 所示,沿着顶部 CTU 边界,CU 的左下和右下子块运动向量用于底部 CTU 中 CU 的仿射继承。