前面说过,不论是图像还是视频在空域上都存在很强的相关性,也就是说对于某个像素它的像素值和其邻近的像素的像素值会很接近,利用这点来进行预测编码可以去除空域相关性压缩图像或视频体积。
帧内预测流程大致如下:
1、参考像素准备
由于空域相关性,我们总是选择离当前PU最近的已编码像素作为当前PU内像素的参考像素,在HEVC中就是选择当前PU上面的一行和左边的一列。准确说,对于NxN的PU选择正上方N个像素,右上方N个像素,左侧N个像素,左下方N个像素,左上角1个像素,共4N+1个像素作为参考像素。
但是在某些情况下,如在图像边界,Tile或Slice边界时某些参考像素不可用,某些情况下A、E区域尚未编码其像素也不可用。此时就需要寻找像素来填充。
若A区域像素不存在则用B区域最下方的像素填充,若E区域不存在则用D区域最右侧的像素填充,如上图所示。
如果所有区域的像素都不存在,则所有参考像素都用R=1<<(BitDepth-1)来填充,对于8bit像素用128填充,10bit像素用512填充。
2、帧内预测
HEVC为帧内预测提供了35种模式,分别为DC模式,Planar模式和33种角度模式。帧内模式编号和对应名称如下:
模式0是Planar模式,1是DC模式,2到34对应33种角度模式。
其中2-17偏水平方向,19-34偏垂直方向,模式10是水平方向,模式26是垂直方向,这些角度模式中越靠近水平或垂直方向分布的越密集,这是因为自然界中物体在水平或垂直方向运动更多用这些方向预测更准确。
那么如何根据这些模式利用参考像素计算预测值呢?
(1)Planar模式
对应(x,y)位置处的像素P,要想利用Planar模式计算其预测值需要用到其正上方,正左方,当前PU右上方第一个像素和左下方第一个像素共4个像素。计算方法如下:
对PU内每个像素都采用这种计算方法即可算出Planar模式下每个像素的预测值。
(2)DC模式
DC模式首先需要计算当前PU上方和左侧像素的平均值(不包括左上角,右上方和左下方)
若当前PU为色度PU或大于16x16的亮度PU,则PU内所有像素预测值都为dcValue,对于其他情形(尺寸小于等于16x16的亮度PU)按下列方法计算预测值。
(3)角度模式
对于角度模式,其角度延申方向可能既涉及上方参考像素也涉及左方参考像素,若将这些像素都投影到一行或一列就更利于处理,例如对于垂直类的角度模式将左侧的像素投影到上方。
因为每个角度方向都不同,所以每个角度需要投影的参考像素也不同。每个角度对于垂直方向(模式26)或水平方向(模式10)都有一个偏移值,如下图。
以垂直类模式M(对应偏移值为offset[M])为例构造其一维参考像素列表Ref[]。
①offset[M]<0,即M为18到25
②offset[M]≥0,即M为26到33
水平类一维参考列表构建方法类似,下面是4x4PU的像素投影实例
通过以上计算便可以得到一个一维的参考像素列表Ref[],
下面对于像素(x,y)寻找其对应参考像素在Ref中的位置pos:
pos = (y*offset[M])>>5
像素(x,y)对应的权重因子w:
w = (y*offset[M])&31,其中&表示按位与运算
则(x,y)像素的预测值为:
3、参考像素滤波
在上面预测时直接使用了左侧或上方相邻像素作为参考像素,但是通常为了减少噪声,增加预测准确性,在选择某些预测模式时需要对参考像素进行平滑滤波,通常是使用一个3抽头低通滤波器进行。具体如下:
-
对于4x4的PU不需要进行平滑滤波。对于其他所有尺寸PU,如果是DC模式不需要平滑滤波,如果是Planar模式都需要平滑滤波。
-
对于角度模式。
-
对8x8PU只对模式2、18、34进行常规平滑滤波。
-
对16x16PU除了模式9、10、11、25、26、27外,其他所有27个角度模式都需要进行常规平滑滤波。
-
对32x32PU除了模式10、26外其他所有31个角度模式都要进行常规平滑滤波或强滤波。
-
常规滤波:抽头系数为[1,2,1]/4
强滤波:强滤波只在32x32PU上进行,且要满足
强滤波计算方法如下:
4、PU边界值平滑
为了去除边界的不连续效应,对于小于32x32的PU,当使用模式1、10、26时,PU预测后的第一行和第一列要进行滤波处理。
5、帧内模式编码
当选定好帧内预测模式后,预测模式要被编码送到解码端。因为帧内预测有35种模式需要6bit才能编码。HEVC为当前PU定义了3种最可能模式(Most Probable Modes)MPM[0]、MPM[1]、MPM[2],如果当前模式在MPM内只需要编码其索引即可,如果不在MPM内而在另外32种模式中只需要5bit即可编码。
MPM的构造需要利用其左侧和上方相邻已编码PU的模式信息。
MPM构造过程如下:
(1)ModeA和ModeB相同
①ModeA和ModeB都为DC模式或Planar模式
MPM[0] = Planar
MPM[1] = DC
MPM[2] = 26
②ModeA和ModeB都是角度模式
MPM[0] = ModeA
MPM[1]和MPM[2]为ModeA相邻的两个角度模式
(2)ModeA和ModeB不相同
MPM[0] = ModeA
MPM[1] = ModeB
①若ModeA和ModeB都不是Planar模式,MPM[2] = Planar
②当①不满足时,若ModeA和ModeB都不是DC模式,MPM[2]=DC
③当①②都不满足时,MPM[2] = 26
感兴趣记得扫描关注微信公众号哦!(微信号:Video Coding)