帧间预测编码概述
基本原理
利用时间相关性,使用邻近已编码图像像素值预测当前图像的像素值,能够有效去除时域冗余。目前的视频编码标准中,帧间预测都采用了基于块的运动补偿技术。
运动估计(ME):当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块的过程。
参考图像或者参考帧:用于预测的图像
运动矢量(MV):最佳匹配块到当前块的位移
预测残差:当前块与参考块的像素差值
运动补偿:根据MV得到的参考块作为当前当前块预测值的过程
I图像:只能使用帧内预测编码技术
P图像:可以使用帧间预测编码技术
B图像:可以选择使用前向预测、后向预测或双向预测。一个宏块拥有2个MV。
MV差分:去除相邻块运动矢量之间的相关性。
半像素精度:MV不一定是像素的整数倍
MV预测(MVP)
H.264:有7种尺寸的运动补偿块、1/4像素精度MV、多参考图像预测、加权预测及空域/时域MVP技术
H.265:非对称划分、更先进的MVP技术(merge和AMVP)、多参考图像和加权预测
H.266:更加灵活的二叉树、三叉树、四叉树混合编码单元划分和非矩形几何划分、还在运动矢量预测、获取、运动补偿中引入了新的技术。
帧间预测编码关键技术
运动估计、运动矢量表示、运动补偿
运动估计
再当前已编码图像中寻找一个最佳参考块,得到最优编码性能。编码器根据率失真代码最小的参考块作为当前块的最佳匹配块。
- 运动估计的准则:MSE\MAD\MPC\SAD\SATD(使用比较广泛的是SAD\SATD)
- 运动搜索算法:根据匹配准则寻找最优匹配块获得最优MV的过程。(全局搜索、对数搜索、三步搜索、UMHexagonS\TZSearch)
- 亚像素精度运动估计:因为物体运动不一定以整像素为基本单位,因此将运动估计的精度提升到亚像素级别,可以提高运动补偿的精确度,进而提高编码效率。意味着需要对参考图像进行插值。
运动矢量表示
运动矢量信息:参考图像索引、MV水平分量、MV垂直分量
- MV空域预测:利用空域相邻块的运动信息。
- MV时域预测:利用时域临近帧的运动矢量预测当前帧的运动矢量。
记录时空域相关块的预测信息,建立候选MV列表,选取性能最优的一个运动信息作为MVP
运动补偿
目标:利用参考重建块构建当前块的预测值,使其率失真代价最小。
- 普通运动补偿
- 多参考图像运动补偿
- 加权运动补偿
VVC帧间预测编码概述
MV的预测和获取
MV预测技术继承和发展了H.265的merge和AMVP技术,拓展了MV预测选择范围,提高MV的表示精度。
(1)Merge模式
在MVP候选列表的构造上,保留了空域和时域候选,去除了组合MVP候选,增加了基于历史的MV预测(HMVP)和成对平均MVP候选,并且改变了空域候选的检查顺序。
- 联合帧内帧间预测技术CIIP
- 带有运动矢量差的Merge技术MMVD
- 几何划分帧间预测技术GPM
(2)AMVP模式
保留原AMVP列表构造方式的同时,引入了HMVP候选的构造。
在双向AMVP模式的选择上,增加对称运动矢量差分编码AMVD技术。
引入了CU级的自适应运动矢量精度(AMVR)技术,允许多种不同亚像素精度来编码MVD。
(3)基于子块的MV表示
新增了基于子块的帧间预测技术,可以一次性表示一个编码块中多个子块不同MV的信息。
- 基于子块的时域MV预测(SbTMVP),每个子块使用同位图像中对应位置块的运动信息来预测MV。
- 放射运动补偿预测(AMCP)技术,针对缩放、旋转等运动场景。
(4)解码端MV细化
为提升双向MV预测的准确性,VVC采用了一种双向MV修正技术,解码端运动会矢量细化(DMVR),在解码端通过基于双边匹配的局部小区域运动搜索,将MV微调后再用于运动补偿。
运动补偿
- GPM模式需要你对划分边缘进行加权渐变处理
- 与多种帧间预测模式同时应用的光流场修正、片级运动补偿(WP)、CU级权重的加权预测(BCW)等预测块处理技术
- 双向光流技术
- 光流预测细化(PROF)
帧间编码信息的存储
需要存储除了参考帧、MV水平分量、MV垂直分量,还有半像素插值滤波器索引、CU级权重双向加权预测的权重索引、用于放射模式的局部多控制点MV信息、参考图像的MV信息。
亚像素插值
VVC采用双线性插值方法,插值滤波器为一维滤波器,按照先水平方向后垂直方向的顺序完成二维亚像素插值。
用于提升运动矢量精度也用来防止当前帧与参考帧分辨率不同的情况。
插值滤波器选择
(1)亮度分量:最高支持1/16像素精度插值,统一为8抽头滤波器。
(2)色度分量:最高支持1/32像素精度插值,统一使用4抽头滤波器。
水平、垂直滤波器的系数分别由水平、垂直方向的缩放因子决定,最后通过查表的方式获得插值滤波器的系数。
亚像素插值方法
采用双线性插值方法,,按照先水平后垂直方向的顺序进行。
1、对整像素所在行的亚像素进行插值
2、对列亚像素进行插值
Merge模式
merge模式直接利用一个或者一组MVP,推断得到当前编码块的MV信息。进行运动补偿获取帧间预测块,然后对预测残差进行编码。Merge模式不需要传输MVD和参考帧索引,是一种高效的MV编码方法。
常规Merge模式
直接将MVP运动矢量信息(参考图像索引、运动矢量)作为当前CU运动矢量信息的帧间模式编码。需要建立一个MVP候选列表(MergeMVP),选择一个MVP作为当前CU的MV,就可以得到当前CU的像素预测值,进一步编码预测残差。
MergeMVP列表构造较为复杂,是Merge模式最关键的环节,候选最多为6个。依次包含
- 空域候选MVP:使用当前CU的左侧和上侧已编码CU的MV作为空域候选,列表最多选择4个空域候选。按照B1-A1-B0-A0-B2的顺序进行选择。
- 时域候选MVP:利用当前CU在时域邻近已编码图像中对应位置CU来确定,叫做同位图像(ColPic),但是需要按照位置关系进行比例伸缩调整。参考时域距离(图片顺序技术POC)。最多提供一个时域MVP。
- 基于历史的候选MVP:将先前已编码块的运动信息存储在一个最大长度为5的HMVP列表中,随着编码过程不断更新,按照先进先出的原则保持列表控制冗余,每个CTU行重新置0。如果MergeMVP列表还有空域位置,就按照HMVP列表顺序添加不同的选项。
- 成对平均候选MVP:如果还有位置,就使用平均候选AvgCnd来补充列表,
- 零值MVP:还剩下就将单向、双向、值为(0,0)的MV补充道MergeMVP列表的末端
SKIP模式
是merge模式的特例,直接使用MVP信息作为当前CU的运动矢量,除了不编码MVD信息,也不编码预测残差信息。只需要MVP信息索引,编码比特数很少。skip模式也可以是MMVD\GPM\SbTMVP和仿射Merge等的拓展模式。由cu_skip_flag标记。
带有运动矢量差的Merge模式(MMVD)
因为视频相邻区域CU往往有不同的运动特性,常规merge降低了MV编码比特数,但也因为不准确的MV产生大的预测误差。AMVP技术编码运动矢量的预测残差MVD,与MVP一起表示运动矢量。
但是AMVP模式下的MVD通常需要较多的比特表达,所以VVC引入了一种带有运动矢量差的merge技术MMVD,设定了包含多个固定值的M_MVd集合,选取集合中的一个值作为当前CU的MVD。MVD和MVP都是通过索引获得,MVP必须为mergeMVD列表前2项候选项。M_MVd对应4种方向上8种偏移步长,共2*8*4=64个新的运动矢量候选项。具体单项预测和双向预测,需要根据时间信息进行缩放。
联合帧内帧间预测模式(CIIP)
利用帧内预测值和帧间预测值的加权平均得到当前CU预测值的技术。限定帧内预测只采用planar模式,帧间预测只采用常规merge模式,CU的尺寸和形状有限定。
几何划分预测模式(GPM)
VVC中,CTU可以经过二叉、三叉、四叉树划分,但是实际视频内容和多样,当物体运动具有非水平或垂直边缘的时候,不能有效匹配,所以引入几何帧间预测模式,允许使用非水平或垂直直线对矩形CU进行划分,每个子区域可以使用不同的运动信息进行运动补偿。从而提升预测准确度。为merge拓展模式。
原理
为了区分不同的物体,可能在物体边缘产生大量小块,消耗过多头信息,且划分边缘与实际边缘不符合,无法有效表示非垂直边缘。
GPM使用直线将矩形CU划分成2个不规则子区域,拥有自己的运动矢量信息,并进行相应的单向运动补偿。划分线可以用角度和偏移量表示,使用法线和点到直线的距离来表示。VVC中角度和偏移量只允许选择部分预定义的离散数值。各区域分别利用不同运动信息获得补偿,并对划分线附近区域以软混合的方式进行加权融合,以模拟自然场景中柔和的边缘过度。
- 几何划分:共支持64种划分方式。
- 子区域运动矢量:两个子区域都只使用单项预测,并以merge模式编码,运动矢量由GPM模式专用的单向MVP候选列表、列表索引获得。
- 运动补偿加权融合:为了避免划分线附近像素值的突变,距离话分享较近像素的权重渐变,融合了两个方向的预测值,模拟柔和过渡。
- 运动信息存储:1、当子块中心位置到划分线距离大于等于2时,存储运动矢量为中心所在子区域的运动矢量2、当划分线小于等于2的时候,如果两个子区域运动矢量所在参考列表不同,则作为双向预测分别存储两个运动矢量信息,如果两个子区域运动矢量所在参考列表相同,则取第二个预测分区的运动矢量作为单项预测存储。
高级运动矢量预测技术(AMVP)
通过高效表达运动矢量插值MVDF进行运动信息编码。
常规AMVP模式
是针对运动矢量信息的差分编码技术。利用空域、时域上运动矢量的相关性,为当前CU建立MVP候选列表,和Merge不同,AMVP在构建候选MVP候选列表的时候,针对不同参考图像得到的MVP列表可能不同,需要编码参考帧索引,还需要编码选中MVD列表缩影和MVD(MV-MVP)。AMVP列表针对每个参考图像建立,每个列表各项只包含单项运动信息,且列表长度仅为2。
- 空域候选MVP:最多选2个候选,左侧顺序A0-A1,上方顺序B0-B1-B2
- 时域候选MVP:与merge类似
- 基于历史的候选MVP:从HMVP中最近4项进行选择
- 零值MVP
对称运动矢量差分编码技术(SMVD)
对于双向预测,并且参考位于当前帧两侧的情形,前后向运动矢量具有对称一致性,可以采用对称运动矢量差分编码。
采用SMVD的时候,前后向参考图像直接选择两个参考图像列表中距离当前图像最近的,并且时间上处于当前图像两侧的短期参考图像。这样可以有效节省前向MV的参考图像索引、后向图像索引、后向MVD编码消耗的比特数。只需要编码双向AMVP候选列表索引、前向运动矢量差MVD。过程如下:
- 分别获取两个参考图像列表中距离当前帧最近的短期参考图像,得到当前CU的前后向参考图像
- 根据前后向参考图像索引RefIdxSymL0和RefIdxSymL1分别建立前向AMVP候选列表和后向AMVP候选列表
- 根据MVP列表缩影,得到双向MVP
- 根据码流得到前向MVD,推断得到后向MVD
- 计算得到MV
自适应运动矢量精度(AMVR)
允许每个CU自适应选择一种精度表示MVD,最高精度为1/16,最低精度为4亮度像素。适用于传输非0MVD的情况吗,如常规AMVP、SMVD、仿射AMVP。使用率失真优化的方法噶判断是否使用AMVR以及采用何种精度。VTM使用快速算法跳过部分MVD精度。
基于子块的帧间预测技术
视频内容包括平移、旋转、缩放、拉伸运动,利用基于子块的帧间预测模式将CU划分为多个子块,利用CU的运动信息按一定规则得到每个子块不同的运动信息,可以节省此类运动信息所包含的比特数。
基于子块的时域MV预测技术(SbTMVP)
使用同位图像ColPic中参考块的运动信息直接得到当前CU子块的MV信息,在当前片是P片时为每个子块构造一个单项预测TMVP,在当前片为B片时为每个子块构造一个双向预测TMVP。当前CU各子块的运动信息由相应同位子块推导得到,当同位子块的运动信息不同时,子块运动信息也不同。
- 获取同位运动偏移
- 获取中心运动信息
- 获取子块运动信息:针对内部子块推导得到对应的TMVP
基于子块的仿射运动补偿
运动具有一定的规律性,可以统一通过仿射变换的思想。即块内任意像素的运动矢量可以由已知固定像素的运动矢量确定。
有4、6参数仿射模型,只需要编码CU控制点的运动矢量,根据模型公式就可以推导出CU内所有秀昂宿的运动矢量。VVC为每个4x4亮度子块推导一个共用的与i你懂矢量,以中心位置推导得到的运动矢量。并给出了内存访问带宽限制机制和回退模式。
仿射Merge模式
在基于子块的仿射运动补偿的基础上,各控制点的运动矢量(CPMV)由SubBlkMergeMVP列表直接得到,是merge的扩展模式。列表中每项候选项包含多个运动矢量,由空间、时间相邻CU的运动信息生成。
SubBlkMergeMVP列表包含
- 空间相邻仿射模式CU继承候选:最多包含2个,左侧相邻块扫描顺序A0-A1,上册相邻块为B0-B2,每侧采用一个使用仿射模式编码的CU来推导CPMVP候选。
- 空域和时域相邻CU的平移MV构造:设置4个控制点备选。查表组合得到候选CPMVP
- 零值MV填充
仿射AMVP模式
当仿射merge无法得到有效的控制点运动矢量的时候使用。针对指定的参考图像,利用仿射AMVP列表得到CPMV的预测值CPMVP,结合对应控制点MVD(MvdCp)表示CPMV。需要将单双向运动信息,包括参考索引、CPMVP列表索引、对应的Mvdcp,和预测残差一起送入码流。
仿射AMVP模式列表
- 空域相邻仿射模式CU继承:根据采用仿射模式的空域相邻CU的CPMV推导得到CPMVP候选。
- 空域相邻CU的平移MVP构造:根据MV平移得到
- 空域相邻CU的平移MV填充
- 时域平移MV填充
- 零值MV填充
解码端运动矢量细化(DMVR)
merge模式可以高效表示运动矢量信息,但可能会导致其运动矢量并非使参考块与编码块最匹配。所以VVC采用了一种双边匹配的解码端运动矢量细化技术。
正对采用双向预测merge模式的CU,可以直接得到前后向运动矢量MVL0\MVL1。以对称的方式,给这两个运动矢量加一个小的偏移量MV_diff。基本过程:
- 参考块获取,根据前后向运动矢量,对每个子块实施运动补偿得到前后向参考块,并对前后向参考子块进行扩充。
- 整像素搜索:通过计算前后向参考子块的SAD衡量其匹配程度,找到最小的对应MV_diff作为整像素搜索的最优MV整像素精度偏移量。
- 亚像素计算:亚像素精度MV_diff并不搜索MV_diff周围的亚像素位置,而是基于二次误差曲面函数计算得到。
基于光流场的预测值修正
基于光流的预测值修正
光流指视频帧内容在时域上的瞬时运动速度,即像素在时间域上的运动速度。时间较短的两帧,光流也表现为统一目标点在两帧之间位移,即像素的运动矢量。所以可以利用图像帧中像素亮度在时间域上的变化及像素空域相关性,计算视频帧之间的像素运动信息。因此可以根据参考像素值、光流值、空域梯度得到。当运动补偿中运动矢量存在较小误差时,可以计算运动矢量误差,利用预测值进行修正。
双向光流预测值修正(BDOF)
采用参考帧对称的帧间双向预测的编码块,前、后向预测参考块和当前编码块间的光流对称。可以根据光流公式推到i计算解决一个优化问题:对齐后前后向预测参考块应一致。可以求出双向预测得到的预测值,和双向光流补偿值,得到当前块的补偿光流。为4x4的子块估计一个光流。
- 子块获取:包括padding预处理
- 子块亮度空域梯度和时域梯度的计算:根据公式计算
- 光流计算:VVC采用了简化的光流计算方式
- 补偿值计算:进一步得到每个像素的光流修正值
基于光流的仿射预测修正
针对采用仿射运动补偿的编码块,光流预测细化技术为4x4子块的每个像素计算光流补偿值,即像素运动矢量和子块运动矢量的插值,然后计算每个像素的亮度补偿值。
- 子块光流计算
- 子块亮度空域梯度计算
- 亮度补偿值计算:利用空间梯度和光流补偿值,计算每个像素的亮度补偿值
帧间加权预测
Slice级加权预测
由于光强造成全局或者局部的亮度变化,但是这类相邻图像内容依旧相似,但在像素值上无法反应,所以对于亮度整体渐变的场景,slice级加权预测可以有效应对,对参考图像的重建像素值做一个线性变换得到预测值。
可以用于单项预测也可以用于双向预测,slice内所有CU采用其中一组或者两组加权参数。
CU级双向加权预测(BCW)
仅对双向预测CU开启,使用少量预定义的权值,且不同配置下权集不同,编码索引。
帧间预测模式组织结构
VVC中使用了大量的帧间编码啊技术,但是编码选取帧间预测模式也需要消耗很多比特。所以设计了树形结构来编码该模式的使用。