HEVC视频编码技术
HEVC视频编码框架
HEVC编码框架与H.26X标准的编码框架类似,均采用基于块的混合模型。
图1 HEVC编码框架
如上图所示,HEVC编码器的工作过程为:
1.首先,视频编码器将输入视频图像划分为互不重叠的编码单元。
2.再进行预测编码,主要利用视频的空间相关性和时间相关性,分别采用帧内预测和帧间预测去除时空域冗余信息,从而得到预测图像块。
3.然后将预测图像块与原始图像块作差得到预测残差块,再对预测残差进行离散余弦变换(DCT)和量化,获得量化的DCT系数。
4.最后对量化后的DCT系数进行熵编码,得到压缩码流。
HEVC融入了许多关键技术以提高性能,例如基于四叉树划分编码单元,预测方向更精细的帧内预测技术,采用运动合并技术和先进运动矢量预测模式的帧间预测技术,高精度运动补偿技术,用于改善重构图像质量的去方块滤波和像素自适应补偿技术等。
HEVC编码单元
HEVC编码单元的概念和作用与H.264中的宏块相同,只是HEVC种编码快的分割更加灵活。编码单元CU采用四叉树结构,首先将一帧图像分成若干个一定大小互不重叠的矩形块,每一个块即为最大编码单元(LCU)。每个LCU又可以分为从64*64到8*8不同大小的CU,且对CU的最大/最小值在配置文件中还可以修改。
CU采用四叉树的分割方式,具体的分割过程用两个变量进行标记:分割深度(Depth)和分割标记符(Split_flag)。
图2 LCU四叉树分割过程
如上图所示,LCU的大小为64*64,深度为0,用CU0表示,CU0可以分成四个大小为32*32的深度为1的编码单元CU1,以此类推,直到可以分为深度为3的CU3则不可再分。因此,对于编码单元CUd的大小为2N*2N,深度为d,此时若它的split_flag值为0,则CUd不再被划分;否则被分为四个大小为N*N的深度d+1的编码单元CUd+1。
PU是预测的基本单元,规定了编码单元的所有预测模式,其最大单元与当前的CU大小相同。HEVC中对于skip模式,帧内模式和帧间模式,PU分割大小是不同的。
图3 预测单元PU划分方式
如上图所示,对于skip模式,PU的大小是2N*2N。而帧内预测模式PU的大小可以为2N*2N和N*N,其中,当且仅当CU的大小为8*8时,帧内PU才可以取N*N。
帧间预测PU分割模式共有8种,主要分为两类:对称分割和非对称分割。其中,2N*2N,2N*N,N*2N和N*N为4种对称模式,2N*nU,2N*nD,nL*2N和nR*2N为4种非对称模式,U、D、L和R分别表示上下左右,且非对称划分形式只用于大小为32*32和16*16的CU中,对称划分形式的N*N只用于大小为8*8的CU中。例如,2N*nU和2N*nD分别以上下1:3和3:1划分,nL*2N和nR*2N分别以左右1:3和3:1划分。
TU是变换和量化的基本单元,变换树是由变换单元组成的四叉树。从CU大小开始,变换单元以迭代方式四等分,是否划分成四个子块根据语法元素split_transform_flag标定。根据迭代划分的深度不同,其大小可以是32*32,16*16,8*8和4*4中的一个。在序列参数集中可以设定变换单元的最大/最小值。
图4 变换单元TU划分方式
如上图所示,TU的最大划分深度为3,其大小可以大于PU但不能超过CU。当PU为正方形时,TU采用正方形变换,且当PU为长方形时,TU采用长方形变换,其大小可以是32*8,8*32,16*4和4*16中的一个。
预测编码
HEVC预测编码相对于H.264有较大改进,使其更适用于高效编码。预测编码是基于前后两帧或同一图像的相邻像素存在的相关性,利用当前帧和一组预测系数,推测出下一帧图像,也可以利用周围像素推测出当前像素。然后将实际值和预测值作差,对差值进行编码,从而去除冗余。预测编码分为帧内预测和帧间预测,下面分别进行介绍。
帧内编码
帧内预测从H.264开始使用,4*4亮度块的帧内预测有9种预测模式,16*16亮度块的帧内预测有4种预测模式(H.264的宏块大小?)。HEVC沿用H.264帧内预测的思路,但对其进行扩展。
图5 帧内预测33种方向
如上图所示,HEVC采用35种帧内预测模式,其中包括DC模式、33种角度模式和Planar模式。HEVC对帧内预测模式的选择过程更细致,不同大小的PU对应不同的预测模式。这使得帧内预测更加精确,且能减少空间冗余。帧内预测具体过程如下:
1.首先遍历所有的预测模式,计算各个模式下预测的SAD(定义?)并由小到大排序。
2.SAD最小的一组预测模式作为该预测模式的子集。
3.确定预测子集后,判断该PU左和上已经编码像素块的方向是否在子集内,若不在则将该模式加入子集。
4.最后对子集中的所有预测模式进行率失真优化(RDO)。
表1 不同大小块对应的不同模式个数
如上表所示,HEVC中预测单元大小不同,则预测模式数也不同,最终的预测子集个数也不同。
帧间编码
HEVC帧间预测提出了运动合并技术、先进运动矢量预测等新工具来提高编码效率。帧间预测模式分为skip模式、运动合并技术(merge模式)、先进运动矢量预测技术(AMVP)。其中,skip模式是merge中的一种特殊模式,其区别在于传输时不需要传残差信息和MV信息。下面对帧间预测模式分别进行介绍。
merge模式
merge模式采用相邻PU块的运动信息估计当前PU块的运动信息,编码器从时空域相邻PU块构成的参考列表中选择出最优的运动信息,并将其传到解码端。
图6 merge模式运动参数候选列表构建过程
如上图所示,候选列表主要包括两个子集,空域候选列表和时域候选列表,总个数为MaxNumMergeCand(在片头?中显示输出,且默认值为5)。
图7 运动合并空域候选位置
如上图所示,空域候选列表从5个空间相邻块位置进行选取,选取的顺序为A1->B1->B0->A0->(B2)。其中,B2只有在A1,B1,B0和A0中有一个不存在或帧内预测(35种模式?)的情况下才可以使用。
图8 N*2N和2N*N第二个PU的相邻候选位置
为了防止虚化(指什么),对于N*2N,nL*2N和nR*2N模式的第二个PU的候选位置A1是不可用的,这种情况下的选取顺序为B1->B0->A0->B2。同理,对于2N*N,2N*nU和2N*nD模式第二个PU的候选位置B1是不可用的,这种情况下的选取顺序是A1->B0->A0->B2。例如上图所示。
图9 用于时域运动合并的缩放式预测运动矢量
如上图所示,对于时域候选子集的推导过程为:
1.首先当前预测单元(curr_PU)从参考队列中找出和它所处图像(curr_pic)的POC序列差值最小的参考图像(col_pic),以及curr_pic的参考图像(curr_ref)。
2.其次从参考图像col_pic中找出两个预测位置作为候选位置,并从两个位置中选择一个作为参考预测单元(col_PU)。
3.最后根据当前预测单元和参考图像的POC距离tb,以及col_pic和col_ref的POC距离td,对时域预测单元col_PU的运动矢量进行缩放,从而得到当前预测单元的预测矢量。
图10 时域运动合并候选位置C3和H
如上图所示,col_PU的位置从C3和H中进行选择。一般情况下首先考虑H位置,当H位置不存在或编码模式使用的是帧内预测(35种?),或者超出了CTU(全称,与CU关系?)的边界时,选择C3位置。
AMVP技术
AMVP技术和merge模式预测过程部分相似,也是利用空域和时域相邻块的运动信息预测当前PU块的运动信息。AMVP技术利用周围信息估计当前编码块运动信息的过程和merge模式相同,包括候选列表的构建过程和最优运动矢量的选择过程,只是候选数目不同,
图11 AMVP候选列表构建流程
如上图所示,AMVP候选列表构建流程中空域的5个位置和merge模式下空域的5个位置完全相同,但最终选择的是两个最优位置,其中一个来自上边块,另一个来自左边块。而时域运动矢量的选取是利用两个不同预测方向的时域相邻预测单元的运动矢量作为测量值,并选取最优的一个作为时域运动矢量。当时域和空域候选子集选取完成后,首先去除重复的运动矢量,其次检查运动矢量的总数是否为2,若大于2则保留前两个即去除索引值大于1的,若小于2则添加零运动矢量。
空域运动矢量最多有2个预测运动矢量,是从图7中5个位置中选取的。预测运动矢量选取顺序为:
1.左相邻块:A0->A1->缩放的A0->缩放的A1。
2.上相邻块:B0->B1->B2->缩放的B0->缩放的B1->缩放的B2。
左候选子集和上候选子集均有四种处理预测运动矢量的方式,且可以划分为两类:运动矢量不缩放情形和运动矢量缩放情形。而且总是先处理不缩放情形,再处理缩放情形。对于两种情形的规定如下:
1.不需要缩放的情形:
(1)使用同一个参考列表,同一个参考图像索引。
(2)使用不同参考列表,同一个参考图像索引。
2.需要缩放的情形:
(1)同一个参考列表,不同参考图像索引。
(2)不同参考列表,不同参考图像索引。
因此,具有相同图像参考索引的不需要进行缩放操作,其他情况要进行缩放操作。时域运动矢量候选的选取方式与merge模式的时域候选方式相同,且对于空域缩放过程和时域缩放过程相同。
变换编码
变换编码是将空间的图像变换到频域,产生相关性很小的变换系数,并对其进行编码压缩。HEVC采用自适应的变换编码技术,其沿用了H.264的自适应块大小变换技术(ABT),并在此基础上进行扩展和改进。
HEVC变换大小更灵活,采用更大的块和非正方形变换。例如,在H.264的4*4和8*8变换基础上,增加了16*16,32*32,16*4,4*16,32*8和8*32的变换大小。同时,HEVC又增加了基于模式方向的扫描技术(MDCS),该技术主要针对帧内编码块,根据帧内编码块预测模式的水平或垂直相关性决定当前变换系数的扫描顺序。
图12 8*8变换块扫描方式
如上图所示,对于帧内4*4和8*8变换块的扫描方式主要分为对角扫描,水平扫描和垂直扫描。
熵编码
HEVC视频编码标准中只采用一种熵编码器,即基于上下文的自适应二进制算数编码器(CABAC),且去除了基于上下文的自适应可变长编码(CAVLC)。
图13 熵编码流程
如上图所示,HEVC的CABAC熵编码流程与H.264基本类似。主要包括:二进制化,文本模型选择,概率估计和二进制算术编码,但HEVC在概率估计精确度和自适应速度加快等方面进行了改进。
重构图像后处理技术
为降低重建图像和原始图像之间的失真程度,HEVC对重构图像进行后处理,包括去方块滤波和像素自适应补偿技术。其中,SAO是HEVC新增技术,主要对重构图像基于像素进行补偿以减小重建图像和原始图像之间的差异。
去方块滤波
HEVC的去方块滤波与H.264类似,但由于HEVC中TU的大小可以大于PU,因此不能像H.264选择块边界,而是从TU和PU中选择较小的边界进行滤波。而且为了降低负责读,其不对4*4块边界进行滤波。
图14 去方块滤波流程
如上图所示,边界滤波分为三种情况:不进行滤波,弱滤波和强滤波。且滤波类型由边界强度BS,阈值β和tc决定。
像素自适应补偿
SAO在去方块滤波后执行,是HEVC新增的编码技术。SAO是以LCU为单元,对每个LCU经过去方块滤波后的重建像素进行自适应补偿,从而减小重建图像的失真。SAO分为两类:边带补偿(BO)和边界补偿(EO)。
图15 BO补偿
如上图所示,BO首先将亮度等级(0-255)分成32个条带,然后统计一个LCU内的像素分别落入每个条带的数目。对32个条带,每四个为一组,其左边界标记为起始位置。计算出连续4个条带应该补偿的值,对LCU中的像素进行补偿,最后进行RDO,选择RDO最小的4连续条带进行补偿。
图16 EO补偿的四类方向
如上图所示,EO主要是对图像的轮廓进行补偿,其补偿方向主要分为四类,其中每一类又可以分成图17中的四种情况。统计出每种情况下的补偿值,按照像素所属类型以LCU为单位基于像素进行补偿。
图17 EO补偿每一类方向的四种情况
总结:HEVC对H.264关键技术进行了改进,并引入了新技术,提高了视频编码效率,同时适用于高清视频序列的编码压缩。