帧内预测技术是利用同一帧中相邻像素的相关性,利用当前块相邻区域的重建像素预测当前块中像素的技术,如下图所示,当前CU可以利用相邻A、B、C、D和E位置处的重建像素来预测当前CU中的像素。通过帧内预测之后,再将预测残差通过变换、量化等,可以有效地去除视频的空间冗余。
帧内预测是利用的视频的空间相关性,利用当前图像已经编码的像素预测当前像素,VVC的帧内预测方法主要分为两种方式:
为了提高帧内预测模式的性能,VVC中的帧内预测模式改进主要有以下几点:
为了捕捉自然视频中呈现的更多的边缘方向,VVC在HEVC的33个角度预测模式的基础上,将角度预测模式扩展到了65个,再加上Planar模式和DC模式,共67个传统模式。
为了减少模式编码的比特数,VVC沿用了HEVC中的构建MPM列表的方法,并将MPM列表的长度扩展到了6。首先根据空间相邻块的帧内预测模式,构建MPM列表,如果当前待编码的模式在MPM列表中,则仅编码其在MPM列表中的索引即可;如果不在MPM中而是在61个non-MPM模式中,则使用截断二元码(Truncated Binary Code ,TB)编码其模式。
VVC中引入了非方形块,对于水平块(宽度大于高度),上边的参考像素使用概率大于左边参考像素的使用概率,对于垂直块(高度大于宽度),左侧的参考像素使用概率大于上侧的参考像素使用概率。并且,对于方形块在45度(模式2)附近和-135度(模式66)附近的预测角度,用在矩形块时,其对应的参考像素通常会超出(2W+1)或(2H+1)的参考像素范围。
针对矩形块,VVC引入了宽角度模式,如下图所示。对于那些方形块在45度附近与-135度附近的预测角度,用在当前长方形块上会导致超出原有 (2W + 1) 或(2H + 1) 的参考样本范围的,会将其重新映射成同一预测角度延长线上利用另一侧(或宽边或长边)的参考像素的反向预测角度,如下图所示。
与HEVC类似,VVC也采用了两种针对参考像素的滤波器:一种是对参考像素进行平滑滤波的[1 2 1]/4滤波器,另一种是对非整数位置处参考像素的插值滤波器。其中,插值滤波器又包括三次插值滤波器和高斯插值滤波器,三次插值滤波器能保留更多细节纹理,高斯插值滤波器的滤波效果更为平滑。对于一个给定块,只能对其使用平滑滤波器或者插值滤波器的一种,以避免由于连续应用两个过滤操作而导致的延迟增加。
滤波器的选择和使用与预测模式有关。具体地,平滑滤波器仅用于亮度块的整数预测角度,而插值滤波器仅用于分数角度预测模式,如下图所示,其中实线是整数角度模式,虚线是分数角度模式。
对于整数预测角度模式,当预测块的像素数超过32时,需要使用[1 2 1]/4平滑滤波器对参考像素进行平滑滤波。
对于分数角度预测模式,如果在进行预测时,给定角度方向的像素投影到参考像素的分数位置时,如下图虚线所示,此时需要使用插值滤波器对分数位置处的参考像素进行插值。对于亮度块,使用4抽头的插值滤波器,预测像素pred(x,y)的计算如下图所示,这里这里,i0 表示预测样本投影在参考样本中最接近左侧整数的位置,p∈ {0, . . . ,31},以1/32像素精度构成预测像素投影的分数部分;对于色度块,使用HEVC中的两抽头插值滤波器。
具体细节参考:H.266/VVC技术学习:帧内预测之角度预测模式
为了进一步利用相邻块和当前块的空间相关性,VVC中采用了多参考行(MRL)技术。顾名思义,MRL技术就是在进行帧内预测的时候,使用了多行参考像素,如下图所示,进行帧内预测时,除了可以使用参考行0,还可以使用参考行1和参考行2。
具体细节参考:H.266/VVC技术学习:帧内预测之MRL技术
VVC使用帧内预测子划分技术,在进行帧内预测时,可以将当前CU进一步划分为多个子块,然后分别对每个子块进行预测、变换、量化重建等,后一个预测的块,可以利用前一个重建像素作为参考像素,这样可以提高预测精度。ISP中各子块要么全是水平划分,要么全是垂直划分,如下图所示,并且所有子块的帧内预测模式都相同(PLANAR模式或者DC模式或者角度模式),这样ISP模式的编码性能的提升主要就来自多个使用相同预测模式的子块模式信息传令码率的节省,因为对多个子块只需要传一次帧内预测模式信息。
具体细节参考:H.266/VVC技术学习:帧内预测之ISP技术
为了补偿传统预测模式利用空间冗余性的不足,VVC 中引入了一种根据当前像素的位置及帧内预测模式的角度自适应选取反方向角度上的参考像素信息作为新的一个相对互补性的帧内预测,然后将它和原有角度的帧内预测做基于样本距离的加权平均,尽量让原有的角度预测都能够充分利用该预测角度上正反两个方向对应的参考像素信息,从而提高预测性能,计算公式如下所示:
refL[x, y], refT[x, y] 是分别来自左边和上边对当前样本位置 (x, y) 的预测参考样本,wL[x],wT[y] 是它们各自对应的基于水平或竖直距离的权重。
具体细节参考:H.266/VVC技术学习:帧内预测之PDPC技术
MIP技术是VVC中新增的帧内预测技术,与传统的帧内预测技术不同,该技术是利用机器学习方法训练出多个MIP预测矩阵,通过将相邻参考像素与预测矩阵进行矩阵乘法,获得预测像素。具体流程如下图所示:
MIP 模式先对左边和上边的参考像素做下采样平均,然后将其于训练得到的块大小相关的模式矩阵做矩阵相乘,最后加上一个模式矩阵对应的常数调整(Offset) 矢量项。产生的预测样本再上采样到原始块大小。
MIP 技术实际上是通过机器学习的方法,在统计意义上对实际中高效的帧内预测模式通过矩阵定义的方式进行线性建模。这里的针对块中每个样本位置定义的加权矩阵,实际上就是对每一个块中的样本都利用全体参考样本加权平均的最一般化的帧内预测方法,图示如下。
具体细节参考:H.266/VVC技术学习:帧内预测之MIP技术
为了提高帧内色度分量的预测性能,VVC使用了一种交叉分量线性模型的技术。该技术通过利用相邻重建亮度和色度像素建立亮度和色度分量的线性模型,再利用该线性模型预测当前块,计算如下图所示,其中表示当前CU的色度预测像素,表示当前CU的下采样重建亮度像素,和称为线性模型参数,由相邻的4个色度像素和对应的下采样的亮度像素生成推导。
该技术利用了亮度和色度的分量间相关性。为了降低建立线性模型的复杂度,采用定点的方式建立线性模型,具体地,
对于LM模式,分别从上边和左边的下采样亮度重建像素各选取两个重建像素,在各边的位置为 {1/4, 3/4} 处(W’ = W, H’ = H )
对于LM-L模式,在左边的下采样亮度重建像素中选取 4 个重建像素,在该边的位置为 {1/8, 3/8, 5/8, 7/8} 处(H’ = H + W)
对于对于LM-T模式,在上边的下采样亮度重建像素中选取 4 个重建像素,在该边的位置为 {1/8, 3/8, 5/8, 7/8} 处(W’ =W + H )
然后,将这 4 个亮度参考像素排序为两个较小值组(minY1, minY2) 和两个较大值组 (maxY1, maxY2),结合其各自像素对应位置的色度重建参考像素的做同样排序后的较小值组,较大值组 (minC1, minC2), (maxC1, maxC2), 各组取平均得到(minY, maxY), (minC, maxC)。
通过以下简单线性模型的推导公式即可算出模型参数α和β:
具体细节参考:H.266/VVC技术学习:帧内预测之CCLM技术
亮度预测模式的RDO过程:亮度预测estIntraPredLumaQT函数
MPM列表建立:(getIntraMPMs函数)
色度预测模式的RDO过程:色度预测estIntraPredChromaQT函数
通过initPredIntraParams函数进行初始化帧内预测参数,并决定是否对参考像素进行滤波,代码参考如下:初始化帧内预测参数
在初始化帧内预测参数后,需要获取进行帧内预测时使用的参考像素,并根据预测模式决定是否对参考像素进行平滑滤波。initIntraPatternChType函数是获取参考像素和对参考像素滤波的入口函数,xFillReferenceSamples函数用来获取参考像素。
参考像素的滤波与帧内预测模式以及块尺寸有关,具体条件参考:H.266/VVC技术学习:帧内预测之角度预测模式
对参考像素进行滤波是通过xFilterReferenceSamples函数,主要是使用[1,2,1]滤波器。参考像素获取及滤波的代码参考:
帧内预测之参考像素获取及滤波
根据预测模式,预测像素的计算分为以下几种:
DC模式和Planar模式
角度预测模式技术介绍和相关代码:
帧内预测之角度预测模式和帧内预测之角度预测函数(predIntraAng、xPredIntraAng)
MIP技术介绍和相关代码:
帧内预测之MIP技术:initIntraMip函数、predIntraMip函数、MIP技术相关代码
ISP技术介绍及相关代码:
帧内预测之ISP技术和帧内ISP技术相关代码
CCLM技术介绍及相关代码:
帧内预测之CCLM技术和CCLM技术相关代码(xGetLumaRecPixels,predIntraChromaLM)
预测结束后,为了块边界的连续性,需要对预测得到的预测块的边界进行边界滤波,PDPC技术的使用和预测模式有关
PDPC技术介绍:帧内预测之PDPC技术
亮度模式编码流程:
具体细节参考:H.266/VVC技术学习之帧内模式编码
具体细节参考:H.266/VVC技术学习之帧内模式编码