为了增加帧内预测的精度,VVC改进了HEVC的帧内预测方法,将预测角度从33种扩展到65种,角度预测的插值滤波器改用4抽头的高斯插值滤波器。同时,由于QTMTT划分结构使得CU的不在局限于正方形,各种矩形尺寸的CU被广泛采用,因此VVC扩展了HEVC中角度预测的预测范围,引入了广角预测模式。
除了改进HEVC中的帧内编码技术,VVC还使用了新的高效预测技术,具体有跨分量线性预测(Corss-Component Linear Mode, CCLM)、位置自适应帧内联合预测(Position dependent intra prediciton Combination, PDPC)、帧内多行预测(Multiple reference line intra prediction, MRL)、帧内逐块预测(Intra sub-Partition prediction, ISP)等。
传统帧内预测包括方向角度预测和平滑预测(DC和Planar)两类,VVC为提高预测精度,将HEVC帧内的33种角度预测模式扩展到65种,如图所示,67种角度预测可用于亮度和色度的预测。
在原HEVC中的35个角度模式的基础上,每两个方向之间插入一个新预测方向,共33+32=65
个预测方向。
为了降低建立MPM列表的复杂度,VTM通过两个相邻的CU预测模式生成6个MPM,MPM列表中的模式包含以下三类:
VTM参考两个相邻PU(左(A)、上(B))的帧内模式生成MPM列表。默认的初始化MPM列表如下
6 MPM modes = {A, Planar (0) or DC (1), Vertical (50), HOR (18), VER - 4 (46), VER + 4 (54)}
之后MPM列表根据两个相邻的PU帧内模式进行更新。更新方式如下:
生成MPM列表时,要进行去重操作,以保证6个模式都是不同的。在编码帧内模式时,61个非MPM模式,采用截断二进制编码(TBC)。
HEVC采用四叉树划分结构,对于每个正方形N×N
的CU帧内角度预测模式的范围为45°— -135°,其左、上参考样点数目都是2N+1
。但是VVC采用了QTMTT划分结构,CU尺寸不局限于正方形,还有矩形尺寸。对于一个尺寸为W×H
的CU,为满足45度~-135度的角度预测范围,左、上分别需要W+H+1
个参考样点,这种角度预测范围虽然兼容了HEVC相关技术,但是并没有考虑到VVC中QTMTT的特点,例如:(1)当W>H
时,待预测像素距离上方的参考像素更近;(2)当W
这种矩形尺寸的CU并不是沿斜对角线对称的,这就造成对于某些预测角度,其预测值使用的是很远的参考像素而不会用邻近的参考像素,如下图所示。
左侧示例,待预测像素A距离上方参考像素T更近,但是由于预测角度限制,最终使用左侧像素L预测。对于右侧示例,待预测像素A距离左侧参考像素L更近,但是由于预测角度限制,最终使用上方像素T进行预测。
为解决此问题,对于非方形的编码块,VTM提出了帧内广角预测技术,为了不增加帧内预测模式数量,广角预测将依据CU的长宽比,自适应替换原始的角度预测模式,被替换的模式按照原始的索引进行传输,在解码端载替换为相应的广角预测。广角预测模式下,尺寸为W×H
的CU上方参考像素点个数为2W+1
,左侧参考样点个数为2H+1
。如下图所示。
由上图可以看到,可被替换的角度预测模式与CU的宽高比有关,现在总结如下,
宽高比 | 被替换的角度模式 |
---|---|
W / H == 16 | 12, 13,14,15 |
W / H == 8 | 12, 13 |
W / H == 4 | 2,3,4,5,6,7,8,9,10,11 |
W / H == 2 | 2,3,4,5,6,7 |
W / H == 1 | 无 |
W / H == 1/2 | 61,62,63,64,65,66 |
W / H == 1/4 | 57,58,59,60,61,62,63,64,65,66 |
W / H == 1/8 | 55, 56 |
W / H == 1/16 | 53, 54, 55, 56 |
在此,需要注意的是,在广角预测下,相邻像素的参考像素可能并不相邻,如下所示
因此,在广角模式下,为了降低非相邻参考样点对预测的影响,需要对参考值进行低通滤波,即参考样点的平滑。
加入广角预测模式之后,VTM所支持的预测角度如下图所示
VTM采用4抽头的插值滤波器用于生成角度预测参考像素,以提高角度预测的预测精度。在HEVC中,角度预测参考像素通过2抽头的线性插值滤波器计算得到,而VTM使用了更精确的6bit 4抽头高斯插值滤波器。VTM中以下五种模式不进行四抽头滤波:2
, HOR_IDX
, DIA_IDX
, VER_IDX
和66
;其余所有角度模式都要进行滤波。
根据帧内预测的模式,参考样本的平滑遵循以下原则(JVET-L0628):
HOR_IDX
, VER_IDX
);B: 对角线模式(2
, DIA_IDX
, VDIA_IDX
);C: 其他角度模式。为降低颜色分量间的冗余,VTM采用了跨分量线性模型的色度预测模式,即色度值可根据已重建亮度像素线性变换得到,变换函数为pred_C (i,j)=α•rec_L'(i,j)+β
,其中pred_C
为预测的色度值,rec_L'(i,j)
表示已重建的亮度下采样后的值。参数α
和β
通过相邻CU的亮度和色度计算得到,计算公式为 α = Y a − Y b X a − X b α = \frac{Y_a - Y_b}{X_a - X_b} α=Xa−XbYa−Yb, β = Y b − α × X b β = Y_b - α \times X_b β=Yb−α×Xb。其中, Y a Y_a Ya 是相邻亮度像素下采样后最大亮度像素的亮度值, X a 是 Y a X_a 是Y_a Xa是Ya对应的色度值。 Y b Y_b Yb 是相邻亮度像素下采样后最小亮度像素的亮度值, X b 是 Y b X_b 是Y_b Xb是Yb对应的色度值。下图给出一个CCLM预测的例子
VTM中计算α的除法操作通过查表获得,以降低计算复杂度。为了减少表的存储空间,最大最小的差值 diff 和 α 以指数形式存储和计算。例如,diff近似为4位有效位和一个指数量级。因此,1/diff 的表格元素可减少为16 个,如下
D i v T a b l e [ ] = 0 , 7 , 6 , 5 , 5 , 4 , 4 , 3 , 3 , 2 , 2 , 1 , 1 , 1 , 1 , 0 DivTable [ ] = { 0, 7, 6, 5, 5, 4, 4, 3, 3, 2, 2, 1, 1, 1, 1, 0 } DivTable[]=0,7,6,5,5,4,4,3,3,2,2,1,1,1,1,0
总之,这种计算方式不仅减少了计算复杂度还减少了存储空间。
除了亮度所有的上方参考像素和左侧参考像素联合计算线性模型的参数外,模型参数还有另外两种计算方式,即CCLM还有两位两种模式,称之为LM_A
和LM_L
模式。
W+H
个H+W
个对于4:2:0色度采样的序列,需要对对亮度信息进行下采样,VTM支持两种2:1采样方式。采样滤波器的选择由SPS指出,分表标识为“type-0”和“type-2”,如下
线性模型参数的计算过程不仅在编码端进行,解码端同样进行相同的操作,因此参数alpha和belta不用记录在码流中。
VTM色度共有8种预测模式,包括5种亮度分量的帧内模式和三种CCLM模式(CCLM
、LM_A
、LM_L
)。色度模式的传输和获取过程如下表所示
帧内色度模式的编码依赖于相应的亮度块,因为VTM中I帧的亮度和色度分量可能会有不同的划分结构,一个色度块可能对应多个亮度块。因此,对于色度的DM模式,使用当前色度块中心像素对应的亮度块的帧内预测模式。
在VTM中,帧内某些模式的预测结果将通过位置自适应帧内联合预测模式进行修正。简单来说,PDPC模式就是通过未滤波和已滤波的参考像素的预测值加权作为最终的预测值。VTM中的以下模式将默认进行PDPC:Planar, DC, horizontal, vertical, bottom-left angular mode and its eight adjacent angular modes, and top-right angular mode and its eight adjacent angular modes.
最终预测值pred(x,y) 为(传统帧内模式预测值)与(参考像素直接计算的修正值)的和,计算公式如下:
p r e d ( x , y ) = [ w L × R − 1 , y + w T × R x , − 1 – w T L × R − 1 , − 1 + ( 64 – w L – w T + w T L ) × p r e d ( x , y ) + 32 ] > > 6 pred(x,y) = [ wL×R_{-1,y} + wT×R_{x,-1} – wTL ×R_{-1,-1} + (64 – wL – wT+wTL) × pred(x,y) + 32 ]>>6 pred(x,y)=[wL×R−1,y+wT×Rx,−1–wTL×R−1,−1+(64–wL–wT+wTL)×pred(x,y)+32]>>6
其中 R x , − 1 R_{x,-1} Rx,−1和 R − 1 , y R_{-1,y} R−1,y当前像素(x,y)上方和左侧的相邻参考像素, R − 1 , − 1 R_{-1,-1} R−1,−1表示当前块左上角的参考像素。
类似于HEVC中DC模式的边界滤波器和水平/垂直模式的边缘滤波器,当PDPC作用于DC、Planar、水平和垂直预测模式时,不需要额外的边界滤波器。
下图列出不同预测模式的PDPC的预测方式和相应参考像素,其中pred (x’, y’)是预测像素位于当前预测块的(x’, y’)。对于对角线模式,参考像素 R x , − 1 R_{x,-1} Rx,−1的横坐标x计算方式为x = x’ + y’ + 1,纵坐标y计算方式为y = x’ + y’ + 1。对于别的方向模式,参考像素可能会处于分数像素位置,此时,使用最邻近的整数像素值进行替代。
PDPC的权重依赖于帧内预测模式,具体如下
预测模式 | wT | wL | wTL |
---|---|---|---|
右上对角线模式 | 16 >> ( ( y’<<1 ) >> shift) | 16 >> ( ( x’<<1 ) >> shift) | 0 |
下左对角线模式 | 16 >> ( ( y’<<1 ) >> shift ) | 16 >> ( ( x’<<1 ) >> shift ) | 0 |
右上对角线模式相邻角度 | 32 >> ( ( y’<<1 ) >> shift ) | 0 | 0 |
下左对角线模式相邻角度 | 0 | 32 >> ( ( x’<<1 ) >> shift ) | 0 |
多行帧内预测模式即使用多个参考行的帧内预测,如下图所示
传统帧内预测(如HEVC等)使用reference line 0
进行帧内预测,VTM增加了两个参考行reference line 1
和reference line 3
。需要注意的是,Segment A
和Segment F
并不是相邻的已重建像素,而是由临近的Segment B
和Segment E
填充得到。
多行预测的参考行索引(mrl_idx)需要传输到解码端以生成相应的帧内参考像素,即帧内多行编解码模式信息为 “预测模式+ 参考行索引” 。VTM为了降低码率,同时平衡编码端复杂度,对于不使用reference line 0
的多行预测,其额外的参考行模式将包含在MPM列表中,因此只需要传输MPM的索引即可。码流中,参考行的索引在帧内预测模式之前传输,DC和Planar模式不使用多行预测。
需要额外注意,为了避免使用CTU外扩展使用参考样本,多行预测模式对CTU最上第一行CU默认关闭。此外,PDPC默认对扩展参考行关闭。
帧内逐块预测技术依据CU的亮度分量尺寸,将其沿水平或垂直方向划分成2个或者4个尺寸相同的子块,然后逐个子块进行预测重建。进行帧内ISP的最小CU尺寸为48或84(即最少需要32个像素),48或84的CU会被分成2个子块,其他尺寸则被分成4个子块,即每个子块最要需要有16个像素。下图给出了一个例子,上方为4*8CU的ISP划分方式,下方为划分为4个子块的情况。
对于每个子块,重建信号为预测信号与残差信号的和,残差信号通过熵解码、反量化和反变换得到。(每个子块独立预测变换量化) 换句话说,每个子块的重建信号可以用来进行下一个子块的预测,CU中每个子块的重建、预测依次进行。位于当前CU左上角的第一个子块首先压缩,然后向下(水平划分)或者向右(垂直划分)依次编码, 每个子块公用相同的帧内预测模式。
子块尺寸 | 熵编码系数组尺寸 |
---|---|
1 × N , N ≥ 16 1 \times N, N\geq 16 1×N,N≥16 | 1 × 16 1 \times 16 1×16 |
N × 1 , N ≥ 16 N \times 1, N\geq 16 N×1,N≥16 | 16 × 1 16 \times 1 16×1 |
2 × N , N ≥ 8 2 \times N, N\geq 8 2×N,N≥8 | 2 × 8 2 \times 8 2×8 |
N × 2 , N ≥ 8 N \times 2, N\geq 8 N×2,N≥8 | 8 × 2 8 \times 2 8×2 |
M × N M \times N M×N | 4 × 4 4 \times 4 4×4 |
平衡性能和复杂度,对编码端做出如下优化
topRight
, blowLeft
, diag
)r1=topRight/belowLeft
和r2=diag/(topRight + belowLeft)
r1
和r2
r1
大于预先设定的阈值,则跳过所有ISP_H的模式选择;如果r1
小于预先设定的阈值,则跳过所有ISP_V的模式选择。r2
大于预先设定的阈值,跳过ISP_H和ISP_V。