HEVC帧内预测学习(二) 35种预测模式的计算

1.planar模式

该模式可分为水平与垂直预测,然后将其水平与垂直预测值求平均。适用于像素值变化缓慢的情况。
HEVC帧内预测学习(二) 35种预测模式的计算
即预测该位置的像素时,需要知道PU单元的左下角第一个参考像素即R(0,N+1)和右上角第一个参考像素即R(N+1,0),以及该像素对应左侧和上方的参考像素R(0,y),R(x,0)。
HEVC帧内预测学习(二) 35种预测模式的计算
HEVC帧内预测学习(二) 35种预测模式的计算

2.DC模式

该模式适用于大面积平坦区域,
第一步就是求出该预测单元左侧及上方的像素的平均值
HEVC帧内预测学习(二) 35种预测模式的计算

对于每个坐标的参考像素的确定需要分情况:
疑问:色度与亮度在一帧图像中的变化规律有什么区别吗
1.对于色度分量和大于16x16的亮度分量,则其预测像素值便是dcValue。
2.对于pu小于16x16的亮度分量
疑问:为什么每次都要保持有四个参考像素?能不能有八个?
① 左上角位置
HEVC帧内预测学习(二) 35种预测模式的计算

将该位置上方与左侧参考像素与dcValue求平均
② 第一行位置
HEVC帧内预测学习(二) 35种预测模式的计算

用该位置上方参考像素与dcValue求平均
③ 第一列位置
HEVC帧内预测学习(二) 35种预测模式的计算

与第一行类似
④ 其他位置
HEVC帧内预测学习(二) 35种预测模式的计算

3.角度预测模式

3.1书本讲解

HEVC帧内预测学习(二) 35种预测模式的计算
上图中分析的模式23的θ角就是下图所示。HEVC帧内预测学习(二) 35种预测模式的计算
而2~34号预测模式的偏移值分别为,刚好对应上图的坐标HEVC帧内预测学习(二) 35种预测模式的计算
(29号模式偏移值为9,不是7,这里修改一下)
角度预测模式是按照先判断是否投影,然后再预测的方式进行的。
其中217号为水平类模式,10号为水平模式,1834为垂直类模式,26号为垂直模式。

3.2预测方法

3.2.1投影(对参考像素二次整理)

2~10号
在这段预测模式中,属于水平类模式,其偏移值是大于零的,因此不需要进行投影,参考像素便是块左侧的2n+1个参考像素,计算公式如下图:HEVC帧内预测学习(二) 35种预测模式的计算
11~17号
在这段预测模式中,同样属于水平类模式,但其偏移值是小于0的,因此需要进行投影,方法为:
在左上角参考像素上方位置处向上延伸,延伸出的参考像素为上方参考像素按照模式角度方向的投影,具体方法例程参考18~26号预测模式。
18~26号
这段预测模式中,属于垂直类模式,其偏移值小于0,因此需要投影,将左侧参考像素按照模式规定的角度方向进行投影,如下图方法。HEVC帧内预测学习(二) 35种预测模式的计算
其中参考像素的计算公式如下图。Round为四舍五入。HEVC帧内预测学习(二) 35种预测模式的计算

具体计算例子:HEVC帧内预测学习(二) 35种预测模式的计算
比如20号预测模式,其参考像素上方与左上方不变,其参考像素
Ref[-1]=R(0,y(-1))
而y(-1)=32*(-1)/(-21)=2
所以Ref[-1] = R(0,2)

(为什么上述例子只计算到第8行,也就是投影只需要左侧8个参考像素,而不是所有16个:
根据上面式子,对比下面预测部分计算参考像素位置的公式,投影所需要的的左侧参考像素数刚好是N个,而不是所有左侧参考像素2N个,因为我们只需要预测到第N行的所有像素,而预测第N行的第一个像素所需要的参考像素就是其正对着的左侧参考像素投影过去的,其左下方参考像素的投影根本用不到。所以在实际设计中,我们只提取出左侧N+1个参考像素即可完成投影的任务,进而实现预测像素值。)
而即使偏移值小于0,也有可能因为偏移角太小而无法进行投影,书中的判断方法如下图。HEVC帧内预测学习(二) 35种预测模式的计算
invAngle参数如下。应该是根据上面公式倒推过来的HEVC帧内预测学习(二) 35种预测模式的计算
27~34号
在这段预测模式中,属于垂直类模式,其偏移值是大于零的,因此不需要进行投影,参考像素便是块左侧的2n+1个参考像素,计算公式如下图:HEVC帧内预测学习(二) 35种预测模式的计算

3.2.2 预测

以下公式与理解是在垂直类模式下,水平类模式与之类似。
1.计算当前像素中所在参考像素位置,书中记作pos,公式如下
HEVC帧内预测学习(二) 35种预测模式的计算

y是当前像素的行,offset[M]是该模式的偏移值。其代表的物理意义就是根据行的位置,按照模式规定的角度方向指向上方参考像素位置。
从这个公式对比HEVC帧内预测学习(二) 35种预测模式的计算
可以看出,如果只看数学表达式的话,预测一行的第一个像素时,所需要的参考像素刚好是该行正左侧参考像素的投影。
2.计算对应参考像素的加权因子wHEVC帧内预测学习(二) 35种预测模式的计算

&是按位与。取低五位。(意义参考下面红色字体分析)
当模式2、10、18、26、34时,w=0。则根据下面预测公式,只需要保留n个参考像素即可,而其他模式需要保留n+1个参考像素。
3.计算当前像素预测值
P(x,y=1:nTbS)=((32-w)Ref[pos+y-1]+wRef[pos+1+y-1]+16)>>5
HEVC帧内预测学习(二) 35种预测模式的计算

注:在MATLAB代码中,除了10、26以外所有像素预测都是用这个方式进行
(意义:可以将w与pos联合进行理解,pos作为高位,w作为低位。实际上pos是取y*offset[M]除以32的整数部分,而其实际的投影位置一般是处于pos与pos+1的地方,当小数部分越小,对应的参考像素就越接近pos对应的位置,反之就越接近pos+1的位置的参考像素,而将w除以32的话就相当于小数点的部分,因此将w作为权值。现在参考下面预测计算公式,这就相当于pos位置的参考像素占了,而pos+1位置的参考像素占了)
对于26垂直模式,以及10水平模式,我们需要对边界像素进行滤波计算得到预测值。
26模式时,只对每个预测块的第一列像素用滤波公式计算,剩余的像素使用上面公式计算。
10模式时,只对每个预测块的第一行的像素使用滤波公式进行滤波,剩余的像素使用上面公式计算。
滤波公式:HEVC帧内预测学习(二) 35种预测模式的计算
右边括号部分是为了预测垂直方向像素变化规律。