帧间预测编码简述
-
帧间预测
利用视频时间域的相关性,使用邻近已编码图像像素值预测当前图像的像素值,能有效去除视频时域冗余。 -
目前主要的视频编码标准中,帧间预测都采用
基于块的运动补偿技术
,不同的编码标准有不同的分块方式。 -
为当前图像的每个像素块在之前已编码图像找到一个最佳匹配块,这个寻找过程就称为
运动估计(Motion Estimation,ME)
。 -
用于预测的图像被称为
参考图像或参考帧(Reference Picture)
, -
最佳匹配块到当前块的位移被称为
运动矢量(Motion Vector,MV)
, -
当前块与参考块的像素差值被称为
预测残差(Prediction Residual)
, -
MV
和预测残差信息
会编入码流并传递到解码端。 -
为当前块在参考图像中寻找一个最佳匹配块,需要一个准则来判定两个块的匹配程度,这个准则就称为
运动估计准则
;常见有最小均方误差MSE
、最小平均绝对误差MAD
、最大匹配像素数MPC
、绝对误差和SAD
等。 -
运动估计搜索
是根据匹配准则寻找最优匹配块,并获得最优MV的过程;常见搜索算法有全搜法
、对数搜索法
、三步搜索法
、UMHexagonS算法
、TZSearch算法
等等。 -
在解码端,从码流中解析出运动信息后,将根据MV得到的参考块作为当前块预测值的过程称为
运动补偿(Motion Compensation,MC)
,MC得到的预测值加上传输到解码端的预测残差,就得到了最终的重建值
。 -
编解码端需要确保参考信息的一致,即使用
重建后的已编码图像作为参考图像
,因此MC和重建图像过程是编解码端都会实施的步骤。 -
相邻图像间物体的运动不一定是以整像素为基本单位的,因此将运动估计的精度提升到亚像素级别,可以提高运动估计的精确度,因此
亚像素精度运动估计
需要对参考像素进行插值操作。
H266/VVC帧间预测编码关键技术
概述
MV的预测及获取新增加的技术
基于历史MV预测(History-based MV Mrediction,HMVP
)的候选、联合帧内帧间预测技术(Combined Inter and Intra Prediction,CIIP
)、带有运动矢量差的Merge技术(Merge-Mode with MVD,MMVD
)、几何划分帧间预测技术(Geometric Partitioning Mode,GPM
)、对称运动矢量差分编码(Symmetric MVD Coding,SMVD
)、CU级的自适应运动矢量精度(Adaptive Motion Vector Resolution,AMVR
)、基于子块的时域MV预测(Sub-block Temporal Motion Vector Prediction,SuTMVP
) 、仿射运动补偿预测(Affine Motion Compensated Prediction,AMCP
)、解码端运动矢量细化(Decoder Side Motion Vector Refinement,DMVR
)等等。
运动补偿新增加的技术
片级加权运动补偿(WP
)、CU级权重的加权补偿(Bi-Prediction with CU-Level Weight,BCW
)、双向光流(Bi-Directional optical Flow, BDOF
)、光流预测细化(Prediction Refinement with Optical Flow,PROF
)等等。
帧间编码信息的存储
参考像素MV存储以8x8的尺寸粒度实施,通过类似科学技术法的方式对MV进行压缩存储(18比特降低到10比特表示)。
亚像素插值
H266/VVC采用双线性插值方法
,插值滤波器为一维滤波器,按照先水平方向后垂直方向的顺序完成二维亚像素插值。
亮度分量最高支持1/16像素精度
插值,统一为8抽头
滤波器,由基于离散余弦变换的滤波器生成。
色度分量最高支持1/32像素
精度插值,统一使用4抽头
滤波器,水平、垂直滤波器系数分别由水平、垂直方向的缩放因子决定。
Merge模式
Merge模式不需要传输MVD和参考帧索引,是一种高效的MV编码方法。H266保留了常规Merge模式的同时,还引入了CIIP
、MMVD
、GPM
、SbTMVP
、仿射Merge
等技术。
常规Merge模式
常规Merge模式:
直接将MVP运动矢量信息(参考图像索引、运动矢量)作为当前CU运动矢量信息的帧间编码方式。
Skip模式
Skip模式:
是Merge模式的特例,直接使用MVP信息作为当前CU的运动矢量,不编码MVD信息和预测残差信息。
CIIP
CIIP:
联合帧内帧间预测模式(Combined Inter and Intra Prediction, CIIP
)是联合帧内预测和帧间预测,利用帧内预测值和帧间预测值的加权平均值得到当前CU预测值的技术。
MMVD
MMVD:
Merge模式直接利用MVP作为当前CU的运动矢量信息,是运动矢量的高效编码方式。然而,视频相邻(空域、时域)区域CU也会有不同的运动特性,常规Merge模式降低了MV的编码比特数,但也可能因为不准确的MV造成更大的预测残差。为了权衡运动矢量的准确性和编码比特数,H266引入了一种带有运动矢量差的Merge技术MMVD
。
GPM
GPM:
实际视频内容多种多样,当运动物体具有非水平或垂直边缘时,常规矩形CU并不能有效匹配,预测表达不够高效。针对此问题,H266引入几何划分帧间预测模式(Gemetric Partitioning Mode,GPM
),允许使用非水平或垂直直线对矩形CU进行划分,每个子区域可以使用不同的运动信息进行运动补偿,从而提高了预测准确度。
在H266中,GPM的运动信息采用Merge方式编码,因此也归类为Merge扩展模式。
AMVP
常规AMVP
常规AMVP:
是针对运动矢量信息的差分编码技术;该模式利用空域、时域上运动矢量的相关性,为当前CU建立MVP候选列表。与Merge不同,编码端为当前CU建立MVP候选列表,针对不同的参考图像构建得到的MVP列表可能不同,常规AMVP需要编码参考帧索引、MVP列表索引、MVD。
SMVD
SMVD:
在实际场景中,物体的运动在短时间内时匀速的;对于双向预测,并且参考帧位于当前帧两侧的情形,前后向运动矢量可能具有对称一致性。因此,H266采用对称运动矢量差分编码(Symmetric MVD Coding,SMVD
)模式,只编码前向MVD,后向MVD则根据对称一致性推导得到。
AMVR
AMVR:
提高运动矢量精度有利于提高运动补偿效果,而运动剧烈场景则需要更大的运动矢量范围,同时,在提高运动矢量范围和精度时,编码运动矢量需要更多的比特数。H266兼顾运动矢量和精度,引入CU级的自适应运动矢量精度(Adaptive Motion Vector Resolution,AMVR
)技术,该技术允许每个CU自适应选择一种精度表示MVD,最高精度为1/16亮度像素,最低精度为4亮度像素。
基于子块的帧间预测模式
除了平移运动,视频内容还包括旋转、缩放、拉伸等运动。
为了有效表示此类运动,传统编码须采用较小的 CU,以便使用不同的运动信息对不同小CU进行运动补偿。虽然不同小区域(甚至像素)具有不同的运动,但它们却具有相同的运动模式。因此利用基于子块的帧间预测模式
将CU划分成多个子块,利用CU的运动信息按照一定规则得到每个子块不同的运动信息,可以节省表示此类运动信息所需的比特殊。基于子块的帧间预测模式包括基于子块的时域运动矢量预测技术(SbTMVP)
和仿射运动补偿技术
。
SbTMVP:
基于子块的时域运动矢量预测技术使用同位图像ColPic中参考块的运动信息直接得到当前CU子块的MV信息。
仿射运动补偿技术:
包括仿射Merge模式和仿射AMVP模式。
解码端运动矢量细化
DMVR:
Merge模式可以高效表示运动矢量信息,但可能会导致其运动矢量并非使参考块与编码块最匹配。为了改进Merge模式下MV的精确性,进一步减少预测残差,H266采用了一种基于双边匹配的解码端运动矢量细化技术(Decoder-Side Motion Vector Refinement, DMVR
)。
基于光流场的预测值修正
光流:
是指视频帧内容在时域上的瞬时运动速度,即像素在时间域上的运动速度。视频中的时间间隔较短的两帧,光流也表现为同一目标点在两帧之间的位移,即像素的运动矢量
。
计算光流:
对于时域邻近的视频帧,同一目标在不同帧上的亮度通常不会发生变化,而且运动距离很小;因此可以利用图像帧中像素亮度在时间域上的变化及像素空域相关性,计算视频帧之间的像素运动信息,即光流。
基于光流的预测值修正:
当前像素值可以根据参考像素值(对应位置)、光流值、空域梯度得到。当运动补偿中运动矢量存在较小误差时,可以计算运动矢量误差(光流值),对预测值进行补偿。称为基于光流的预测值修正。
BDOF:
采用双向运动补偿的帧间编码块,可以利用前向预测参考块和后向预测参考块得到一致性,估计前向预测参考块和后向预测参考块间的光流,作为运动矢量的修正值,这技术称为双向光流(Bi-Directional Optical Flow, BDOF
)。
基于光流的仿射预测修正:
在H266中,仿射运动补偿技术(仿射Merge模式
、仿射AMVP模式
)以4x4子块为处理单位,每个4x4子块拥有一个共同的运动矢量,而仿射运动区域,每个像素的运动矢量都不同,导致每个像素点的亮度补偿值可能有少许偏差。针对采用仿射运动补偿的编码块,光流预测细化(Prediciton Refinement with Optical Flow, PROF
)技术为4x4子块的每个像素计算光流补偿值,即像素运动矢量与子块运动矢量的差值,然后根据光流计算公式计算每个像素的亮度补偿值。
帧间加权预测
H266/VVC采用Slice级加权预测和CU级加权预测(Bi-Prediction with CU-Level Weight, BCW
)。Slice级加权预测所有CU共用同一组参数,归为显性(Explicit)预测
,BCW每个CU利用索引确定加权值,归为默认加权
,当不使用加权与测试时,归为默认加权
。
光照强弱
出现变化时,视频中同场景会出现全局或局部的亮度变化,如拍摄的光圈变化,人为剪辑的淡入淡出等;传统的运动补偿得到的残差较大,Slice级加权预测可以有效应对此种场景。Slice级加权预测通过对参考图像的重建像素值做一个线性变换
得到预测值。
针对采用双向预测的CU,H266引入了CU级双向加权预测BCW技术,仅仅使用少量预定义的权值,并编码器索引。
帧间预测模式组织结构
参考
JVET输出文档:
https://www.itu.int/wftp3/av-arch/jvet-site/
书籍:
新一代通用视频编码H266/VVC:原理、标准与实现[万帅 霍俊彦 马彦卓 杨付正/著]
备注
本系列博客主要是对《新一代通用视频编码H266/VVC:原理、标准与实现》
的学习笔记。