当前位置: 代码迷 >> 综合 >> 【笔记】H.265/HEVC 视频编码(四)——预测编码
  详细解决方案

【笔记】H.265/HEVC 视频编码(四)——预测编码

热度:52   发布时间:2024-02-20 00:51:09.0

预测编码时视频编码中的核心技术之一。对于视频信号来说,一幅图像内邻近像素之间有较强的空间相关性,相邻图像之间有较强的时间相关性。因此采用帧内预测和帧间预测的方式,去除视频的空域和时域的相关性。视频编码器对预测后的残差进行变换、量化、熵编码,而不是对原始像素,大幅提高了编码效率

一、视频预测编码技术

1、预测编码原理

预测编码是指利用已编码的一个或几个样本值,根据某种模型或方法,对当前样本值进行预测,并对样本真实值和预测值之间的差值进行编码。视频是一种有记忆信源,有记忆信源的两种有效编码方式是联合编码和条件编码。联合编码充分利用一个块内像素间的相关性,但未能利用相邻块之间的相关性。条件编码中各像素以滑动窗口的形式进行编码,改善了联合编码的缺陷。预测编码技术通过预测模型消除像素间的相关性,使得差值信号可以认为不相关或者相关性很小,可作为无记忆信源进行编码。因此,预测编码可以认为是一种条件编码。预测编码的基本过程如图1,当前输入值x(n)与利用已编码像素得到的当前像素的预测值p(n)的差值为e(n),对e(n)进行量化、熵编码,并利用量化后的残差e’(n)与预测值得到当前像素的重建值x’(n)。在解码端,经过熵解码得到当前像素的预测误差的重建值e’(n),将其与预测值p(n)相加即可得到当前像素的重建值x’(n)。
在这里插入图片描述

图1 预测编解码过程
根据参考像素的位置不同,视频预测编码技术主要分为两类:帧内预测和帧间预测。

2、帧内预测

帧内预测编码是使用当前图像已编码的像素预测当前像素,以达到去除空间冗余。
H.264/AVC使用的是基于块的空域帧内预测方法,规定了若干种预测模式,每种模式对应一种纹理方向,能够自适应的选择预测模式。
H.264/AVC用拉格朗日率失真优化进行模式选择,每一种模式的拉格朗日代价为J=D+λR,D为当前预测模式下的失真,R表示编码当前预测模式所有信息所需的比特数,λ为拉格朗日因子。最优的预测模式不是指残差最小,而是残差经过变化、量化、编码后的编码性能最优。H.264/AVC规定了3种大小的亮度帧内预测模块:44、88、1616。前两种包含9种预测模式,16*16仅包含四种预测模式。

(1)亮度分量帧内16*16模式

包括四种:垂直模式、水平模式、DC模式和Plane模式。
垂直模式:f ?(x,y)=f^’ (x,-1)
水平模式:f ?(x,y)=f^’ (-1,y)
DC模式:
在这里插入图片描述
Plane模式:在这里插入图片描述
在这里插入图片描述

(2)亮度分量帧内4*4模式

帧内44预测模板如图2所示,
在这里插入图片描述
图2 亮度分量帧内4
4模式
垂直模式:f ?=B
水平模式:f ?=J
DC模式:f ?=(A+B+C+D+I+J+K+L+4)?3
左下对角线模式:f ?=(C+2D+E+2)?2
右下对角线模式:f ?=(I+2M+A+2)?2
垂直向右模式:f ?=(M+2A+B+2)?2
垂直向左模式:f ?=(B+2C+D+2)?2
水平向上模式:f ?=(L+2K+J+2)?2
水平向下模式:f ?=(M+2I+J+2)?2
帧内8*8与之类似。

(3)色度8*8帧内预测模式

色度帧内预测包含四种模式:DC模式、水平模式、垂直模式和Plane模式。

3、帧间预测

帧间预测是使用邻近已编码的图像像素预测当前图像的像素,以达到去除时域冗余的目的。
运动估计是为当前图像的每个像素块在之前已编码图像中寻找一个最佳匹配块,用于预测的图像称为参考图像,参考块到当前像素块的位移称为运动向量,当前像素块与参考块的差值称为预测残差。帧间预测的关键技术有运动估计(ME)、MV预测、多参考图像及加权预测等。

(1)运动估计

在大多数视频序列中,相邻内容非常相似,背景画面变化小,因此不需要对每幅图像的全部信息进行编码,只需要将当前图像中运动物体的运动信息传给解码器即可。这样可以减少视频传输所需的带宽,运动估计(ME)就是提取当前图像运动信息的过程。
常用的是基于块的表示方法,基于块的运动表示法是将图像分为不同大小的像素块,只要块大小选择合适,则各个块的运动形式可以看成统一的,并且每个块的运动参数可以独立地估计。有以下几个核心问题。

①运动估计准则

运动估计的目的是为当前块在参考图像中寻找一个最佳匹配块,因此需要准则来判定两块的匹配程度。常用的匹配准则有最小均方误差(MSE)、最小平均绝对误差(MAD)(用绝对误差和SAD代替)和最大匹配像素数(MPC)等
MSE准则: 在这里插入图片描述
SAD准则: 在这里插入图片描述
MPC准则: 在这里插入图片描述
在这里插入图片描述

②搜索算法

常见的搜索算法有:全搜索算法、二维对数搜索算法、三步搜索算法等。除全搜索算法外,其余都统称快速搜索算法。

③亚像素精度运动估计

相邻两图像之间物体的运动不一定以正像素为基本单位,可能是半像素、1/4像素甚至1/8像素为单位,因此将运动估计的精度提升到亚像素级别,可通过对参考图像的像素点进行插值来实现。

<1>半像素精度插值

在H.264/AVC中半像素精度插值使用了六抽头滤波器,抽头系数为(1/32、-5/32、20/32、20/32、-5/32、1/32),如下图所示,A-T为整像素,a-e、aa-hh为半像素。
在这里插入图片描述图3 H.264/AVC半像素精度插值

<2>1/4像素精度插值

在H.264/AVC中,1/4像素可由邻近的两个像素平均得到。如图4所示,A-D为整像素,aa-ee为半像素,a-e为1/4像素位置。
在这里插入图片描述
图4 1/4像素精度差值

(2)MV预测

H.264/AVC使用了时域和空域两种MV预测方法。

①MV空域预测

如图5所示,E为当前运动补偿块,运动补偿块E的预测MV(用MVP表示)分为以下几种情况:
<1>若E不是168和816,则MVP为A、B和C三者MV的中值。
<2>若E被划分为两个168的块,则上方的MVP为B的MV,下方的MVP为A的MV。
<3>若E被划分为两个8
16的块,则左侧的MVP为A的MV,右侧的MVP为C的MV。
<4>若E为Skip宏块,则其MVP与16*16情形一样,为A、B和C三者MV的中值。
在这里插入图片描述
图5 空域MV预测块位置示意图

②MV时域预测

MV时域预测主要是针对B片,有两种形式:
<1>当B的图像两个MV都来自一个方向时,其中一个MV可用另一个MV来预测。设参考图像ref0和ref1与当前图像的距离分别为l0和l1,二者MV分别为MV0和MV1,则MVP1=l1/l0*MV0,MVD1=MV1-MVP1 。
<2>直接模式MV预测
H.264/AVC为B片提供了一种直接模式,在该模式下运动向量可直接预测得出,无需传送运动向量差值。预测的方法有时域和空域,空域同上,时域如下:
在这里插入图片描述
<3>多参考图像及加权预测
多参考图像可以大幅提高预测精度,H.264/AVC最多支持15个参考图像,还是用了加权预测技术。

二、帧内预测

1、帧内预测模式

(1)亮度帧内预测模式

H.265/HEVC亮度分量帧内预测支持5种大小的PU:44、88、1616、3232和64*64。每一种PU都对应35种预测模式,包括Planar模式、DC模式以及33种角度模式,帧内预测模板图6。
在这里插入图片描述
图6 H.265/HEVC帧内预测模板
H.265/HEVC增加使用左下方的边界元素作为当前块的参考。35种预测模式中,模式0为Planar模式,模式1为DC模式,模式2-34为角度模式,其中2-17称为水平类模式,模式18~34称为垂直类模式,如图7所示。
在这里插入图片描述
图7 33种角度模式的预测方向

①Planar模式

Planar模式是由H.264/AVC中Plane模式发展而来,如图8,Planar模式使用水平和垂直方向的两个线性滤波器,并将两者的平均值作为当前块像素的预测值。
在这里插入图片描述
图8 Planar模式

②DC模式

DC模式适用于大面积平坦区域,做法同H.264/AVC。

③角度模式

模式26和模式10分别表示垂直和水平方向,其余方向可以看做是在垂直活水平方向上做了偏移,偏移角的大小可由模式下方的数字计算。设某垂直类模式偏移值为V+x,则当前模式偏移角度为 , 为正,表示向左(上)偏移, 为负表示向右(下)偏移。

(2)亮度模式的编码

H.265/HEVC标准建立了一个帧内预测候选列表candModeList,表中有3个候选预测模式,用于存储相邻PU的预测模式。相邻PU的位置如图9,若ModeA与ModeB相同,若二者都为Planar或DC,则candModeList[0]为Planar模式,candModeList[1]为DC模式,candModeList[2]为模式26(垂直);若二者都为角度模式,则candModeList[0]为ModeA,candModeList[1]和candModeList[2]为与ModeA相邻的两个模式。若ModeA和ModeB不同,则candModeList[0]为ModeA,candModeList[1]为ModeB,candModeList[2]分类:若ModeA和ModeB都不是Planar,则candModeList[2]为Planar模式,若都不是DC模式,则candModeList[2]为DC模式,否则candModeList[2]为模式26.

(3)色度模式的编码

H.265/HEVC色度分量帧内预测有五种模式:Planar模式、垂直模式、水平模式、DC模式以及对应亮度分量的预测模式,若亮度预测模式为前四种的一种,则将其替换为角度预测中的模式34。

2、帧内预测过程

H.265/HEVC标准规定PU可以以四叉树的形式划分TU,且一个PU内的所有TU共享相同的预测模式。H.265/HEVC帧内预测的三个步骤是:①判断当前TU相邻参考像素是否可用并作相应处理;②对参考像素进行滤波;③计算当前TU的预测值。

(1)相邻参考像素的获取

如图9所示,参考像素分为五个部分A~E,若当前TU位于图像边界,或Slice、Tile的边界,则相邻参考像素可能会不存在或不可用。当参考像素不存在或不可用时,H.265/HEVC标准会使用最邻近的像素进行填充,若所有区域的参考像素都不可用,则参考像素用固定值(R=1<<(BitDepth-1))填充。
在这里插入图片描述
图9 参考像素获取示意图

(2)参考像素的滤波

H.265/HEVC针对不同大小的TU选择不同数量的模式进行滤波,且增加了一种强滤波的方法。DC模式及44大小的TU不需要滤波;3232的TU除模式10和模式26外的所有角度模式和Planar模式都需要滤波;1616的TU除模式9、10、11、25、26、27外的角度模式和Planar模式都需要滤波;88的TU仅对模式2、18、34和Planar模式进行滤波。常规滤波的方法与H.264/AVC相同,抽头系数为[0.25,0.5,0.25]。强滤波对应SPS中的语法元素strong_intra_smoothing_enabled_flag,且强滤波仅对32*32TU进行,需要满足abs(A+C-2B)<Threshold,abs(C+E-2D)<Threshold,其中Threshold=1<<(BitDepth-5)。强滤波分两个方向进行:C-E方向和C-A方向。

(3)预测像素的计算

①Planar模式

预测像素Px,y可以看做水平和垂直方向预测值的平均值:在这里插入图片描述

②DC模式

DC模式需先计算出当前TU左侧及上方参考像素的平均值,记为dcValue,
在这里插入图片描述
对于色度分量以及大于16*16的亮度分量,所有像素预测值都为dcValue,其他情况计算如下:
左上角元素:在这里插入图片描述
第一行元素(除左上角外)和第一列像素(除左上角外):在这里插入图片描述
其他像素:在这里插入图片描述

③角度模式

表1为角度模式编号(M)与偏移值(offset[M])的对应关系。
在这里插入图片描述
对于给定垂直类模式M,需将需要用到的参考像素映射为一维,记为Ref。当x大于等于0时,Ref[x]=Rx,0,当x小于0时,Ref[x]=R0,y(x),y=Round((32?x)/offset[M] )。Round(?)表示四舍五入。然后计算当前像素对应参考像素在Ref中的位置,记为pos:pos=(y?offset[M])?5和当前像素对应参考像素的加权因子ω:ω=(y?offset[M])&31,最后计算当前像素的预测值P_(x,y)=((32-ω)?Res[pos]+ω?Res[pos+1]+16)?5。对于模式26,P_(x,y)=R_(x,0)+((R_(0,y)-R_0,0 )?1)。

三、帧间预测

(一)运动估计

1、搜索算法

在基于块运动补偿的视频编码框架中,运动搜索是最重要的环节之一,也是编码耗时最多的模块。H.265/HEVC给出了两种搜索算法:全搜索算法和TZSearch算法。后者是H.265/HEVC的新技术,步骤如下:
①确定起始搜索点。H.265/HEVC采用AMVP技术确定起始搜索点。
②以步长1开始,按照菱形模板或正方形模板在搜索范围内进行搜索,且步长以2的整数次幂递增,选出率失真代价最小的点作为搜索结果。
③若步骤②中最优点的步长为1,则在该点周围做两点搜索,补充搜索最优点周围尚未搜索的点。
④若步骤②中得到的最优点的步长大于某个阈值,则以该最优点为中心,在一定范围内全搜索,选出率失真代价最小的点作为该步骤的最优点。
⑤以步骤④得到的最优点为起始点,重复以上各步,直到相邻两次搜索得到的最优点一致停止搜索,此时的MV为最终MV。
TZSearch性能上略低于全搜索,但搜索时间仅为全搜索的20%。

2、亚像素精度运动估计

H.265/HEVC较H.264/AVC使用了更多的邻近像素点进行亚像素精度插值。

(1)亮度分量插值

亮度分量半像素的值由基于离散余弦变换的8抽头滤波器生成,1/4和3/4像素位置的值由7抽头滤波器生成,抽头系数见表2。
表2 亮度插值滤波器抽头系数
在这里插入图片描述
亚像素插值的过程可以分为两步:先对整像素的行或列进行插值;再对剩余的亚像素图像进行插值。经过亚像素插值以后,所有的像素值都放大为原来的64倍,在后续加权预测环节,放大的像素值会被还原。

(2)色度分量插值算法

对于YCbCr 4:2:0来说,亮度分量的运动估计达到了1/4精度,因此,色度分量需要达到1/8精度。各位置的抽头系数见表3。
表3 色度插值滤波器抽头系数在这里插入图片描述

(二)MV预测技术

H.265/HEVC在MV预测方面提出了两种新的技术:Merge和AMVP。二者都使用了空域和时域MV预测的思想,通过建立候选MV列表,选取性能最优的一个作为当前PU的预测MV。但二者还是存在区别的,Merge可以看成是一种编码方式,当前PU的MV直接由空域(或时域)上邻近的PU预测得到,不存在MVD,而AMVP是一种MV预测技术,编码器需要对实际MV和预测MV的差值进行编码,存在MVD。其次,二者候选MV列表长度不同,构建候选MV列表的方式也有区别。

1、Merge模式

Merge模式为当前PU建立一个MV候选列表,列表中存在5个候选MV。通过遍历这五个MV并进行率失真代价计算,选取最小的一个座位最优MV。编码器传输MV在候选列表中的索引。Merge模式的MV候选列表中包括了空域和时域,对于B Slice,还包括组合列表的方式。

(1)空域候选列表建立

示意图如图,H.265/HEVC标准规定,空域最多提供四个候选MV,也就是五个候选块中最多选择四个,按照A1-> B1-> B0-> A0-> B2的顺序建立。
在这里插入图片描述
图10 空域候选块

(2)时域候选列表的建立

时域MV候选列表的建立利用了当前已编码图像位置的PU的运动信息。如图11所示,当前PU的时域候选MV为
curMV=td/tb*colMV
其中colMV为同位PU的MV,tb为同位PU与其参考图像间的距离,td表示当前PU与其参考图像之间的距离。
在这里插入图片描述

图11 MV比例伸缩示意
H.265/HEVC规定,时域最多只提供一个候选MV。若当前候选列表中不足五个,需要用(0,0)进行填补。

(3)组合列表的建立

对于B Slice而言,存在两个MV,因此MV候选序列需要提供两个预测MV。H.265/HEVC标准将MV候选列表中的前四个候选MV进行两两组合组成候选MV对,并且一个候选MV对的两个MV不能相同,B Slice的组合列表见表4。
表4 组合列表建立方式
在这里插入图片描述

2、AMVP技术

高级运动向量预测(AMVP)将MV进行差分编码,解码端通过建立相同列表,对运动向量残差(MVD)与预测MV在该列表中的序号即可计算当前PU的MV。AMVP的列表中也包含空域和时域,但列表长度仅为2。

(1)空域列表的建立

空域候选列表的建立如图10,在当前PU左侧和上方各产生一个候选预测PU,左侧选择顺序A0-> A1->scaled A0->scaled A1,上方的选择顺序为B0-> B1-> B2->scaled B0->scaled B1->scaled B2。当左侧(上方)检测到第一个“可用”的MV时,直接用该MV作为当前PU的候选预测MV,不再进行其他操作。只有当候选MV的参考图像与当前PU相同时,该候选MV才“可用”。

(2)时域列表的建立

与Merge模式的时域列表建立相同。

(三)加权预测

加权预测可用于修正P Slice和B Slice中的运动补偿预测像素。H.265/HEVC标准规定了两种方法:默认加权预测和Explicit加权预测。

1、默认加权预测

未使用权值ω。根据参考图像队列的不同,分为:
①仅使用List0:predSamples=(predSamplesL0+32)>>6
②仅使用List1:predSamples=(predSamplesL1+32)>>6
③List0和List1均使用:predSamples=(predSamplesL0+predSamplesL1+64)>>7
此处>>操作对应于亚像素精度运动补偿中对预测像素值的放大。

2、Explicit加权预测

权值ω由编码器确定。也分为:
①仅使用List0:predSamples=(predSamplesL0?ω0+32)>>6+offset0
②仅使用List1:predSamples=(predSamplesL1?ω1+32)>>6+offset1
③List0和List1均使用:predSamples=(predSamplesL0?ω0+predSamplesL1?ω1+(offset0+ offset1+1)<<6)>>7

四、PCM模式

H.265/HEVC有一种特殊的编码模式——PCM模式。该模式,编码器直接传输一个CU的像素值,不经过预测、变换等操作。解码端直接回复恢复CU的像素值。适用于图像的内容及不规则或量化参数非常小和无损编码的情形。