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

声明:转载请注明出处
先把参考像素的位置列出来。在这里插入图片描述在预测时,我们需要划分到一个预测单元中,也就是PU单元(大小为4x4到64x64),上图中p(0,0)-p(N,N)部分也就是白色的像素,就是一个预测单元;而对PU中的像素进行预测时,我们也需要得到这个PU单元的上方一行参考像素(也就是上图中的R(0,0)-R(2N,0))以及左侧一列参考像素(也就是上图中的R(0,0)~R(0,2n)),
注意:上图的(x,y)位置的确定是以坐标x轴y轴进行确定的(也就是表示第y行第x列)。而在MATLAB代码中,(x,y)分别表示第x行,第y列。以下公式对应上图坐标进行解释。

1.planar模式

该模式可分为水平与垂直预测,然后将其水平与垂直预测值求平均。适用于像素值变化缓慢的情况。
在这里插入图片描述
即预测该位置的像素时,需要知道PU单元的左下角第一个参考像素即R(0,N+1)和右上角第一个参考像素即R(N+1,0),以及该像素对应左侧和上方的参考像素R(0,y),R(x,0)。
在这里插入图片描述

2.DC模式

该模式适用于大面积平坦区域,
第一步就是求出该预测单元左侧及上方的像素的平均值
在这里插入图片描述

对于每个坐标的参考像素的确定需要分情况:
疑问:色度与亮度在一帧图像中的变化规律有什么区别吗
1.对于色度分量和大于16x16的亮度分量,则其预测像素值便是dcValue。
2.对于pu小于16x16的亮度分量
疑问:为什么每次都要保持有四个参考像素?能不能有八个?
① 左上角位置
在这里插入图片描述

将该位置上方与左侧参考像素与dcValue求平均
② 第一行位置
在这里插入图片描述

用该位置上方参考像素与dcValue求平均
③ 第一列位置
在这里插入图片描述

与第一行类似
④ 其他位置
在这里插入图片描述

3.角度预测模式

3.1书本讲解

在这里插入图片描述
上图中分析的模式23的θ角就是下图所示。在这里插入图片描述
而2~34号预测模式的偏移值分别为,刚好对应上图的坐标在这里插入图片描述
(29号模式偏移值为9,不是7,这里修改一下)
角度预测模式是按照先判断是否投影,然后再预测的方式进行的。
其中2-17号为水平类模式,10号为水平模式,18~34为垂直类模式,26号为垂直模式。

3.2预测方法

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

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

具体计算例子:在这里插入图片描述
比如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,也有可能因为偏移角太小而无法进行投影,书中的判断方法如下图。在这里插入图片描述
invAngle参数如下。应该是根据上面公式倒推过来的在这里插入图片描述
27~34号
在这段预测模式中,属于垂直类模式,其偏移值是大于零的,因此不需要进行投影,参考像素便是块左侧的2n+1个参考像素,计算公式如下图:在这里插入图片描述

3.2.2 预测

通过之前的投影,我们已经得到参考像素Ref[x]了,其中x的范围看是否投影,如果是模式2-10和26-34,其偏移值大于零,则不投影,那么x范围为(0,2N);而其余模式的偏移值是小于0的,则应当进行投影,那么其x的范围可能就会根据不同的角度模式范围会包括小于0的部分也就是(-a,2N)的范围,其中a是个动态的,与模式号有关。

  • 首先,预测一个像素,要找到我们需要参考的像素才行,而通过模式对应的角度则可以计算出对应的参考像素。标准有这样的公式可以用来计算。
    在这里插入图片描述
    解释: 这个pos,指的是预测第y行对应的左侧参考像素位置时所需要的参考像素的坐标
    y是当前像素的行,offset[M]是该模式的偏移值。其代表的物理意义就是根据行的位置,按照模式规定的角度方向指向上方参考像素位置。
    从这个公式对比在这里插入图片描述
    可以看出,如果只看数学表达式的话,预测当前行左侧参考像素时,所需要的参考像素刚好是该行正左侧参考像素的投影。
  • 计算对应参考像素的加权因子w,标准是这样定义的。在这里插入图片描述
    &是按位与。取低五位。(意义参考下面加黑字体分析)。
    我的理解: 当偏移值offset[M]是正的,就是按照公式计算,当是负的时,可以先计算y*offset[M]的绝对值,然后取低五位,假设为a,w=32-a,就得出了结果。至于负数的时候为什么这样算,看下面黑体字可以理解。
    当模式2、10、18、26、34时,w=0。则根据下面预测公式,只需要保留n个参考像素即可,而其他模式需要保留n+1个参考像素。
    3.计算当前像素预测值
    在这里插入图片描述
    y表示行,x表示列。
    所以第y行第1个预测像素为:
    在这里插入图片描述
    同理第2个预测像素为:
    在这里插入图片描述
    注:在MATLAB代码中,除了10、26以外所有像素预测都是用这个方式进行
    (计算公式的意义:可以将w与pos联合进行理解,pos作为高位,w作为低位。实际上pos是取yoffset[M]除以32的整数部分,而其实际的投影位置一般是处于pos与pos+1的地方,当小数部分越小,对应的参考像素就越接近pos对应的位置,反之就越接近pos+1的位置的参考像素,而将w除以32的话就相当于yoffset[M]除以32的小数部分,因此将w作为权值。现在参考下面预测计算公式,这就相当于pos位置的参考像素占了(32-w)/32,而pos+1位置的参考像素占了w/32,而这只是针对偏移值大于零的部分是这样考虑的,而当偏移值小于零时,这个w就应当反了过来,因为其占比是反过来的,所以对于上面计算w的时候,会有32-a这样的理解。)
    这样来理解的话,上面的公式只适用于偏移值大于零的模式,对于偏移值小于零的时候就有点矛盾了。
    当偏移值小于零的时候,预测值就应当这样计算。
    在这里插入图片描述

对于26垂直模式,以及10水平模式,我们需要根据不同CU尺寸对边界像素进行滤波计算得到预测值。
当大于16x16时,不进行边界滤波,否则对26和10号模式进行边界滤波。
1.26模式时,只对每个预测块的第一列像素用滤波公式计算,剩余的像素使用上面公式计算。
在这里插入图片描述
右边括号部分是为了预测垂直方向像素变化规律。
2.模式10时,只对每个预测块的第一行的像素使用滤波公式进行滤波,剩余的像素使用上面公式计算。
在这里插入图片描述
右边括号部分是为了预测水平向像素变化规律。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值