HEVC添加加权预测模式的原因:
现今很多视频中都采用的一种技术:场景随着时间光线强弱渐变(temporal illumination variation),或者相同场景,出现阴影效应。这样的视频,帧与帧之间,背景的相似度可能很高,明暗差别较大,若单纯采用运动预测,运动补偿技术,得到的残差会不够理想。此时,有人注意到,出现temporal illumination variation现象,相邻帧(或者相邻Slice)之间的像素值整体上都是渐变的(shape),逐渐变大或变小,相对前面的图像帧,当前帧相当于整体乘了一个数(weight),再加上一个偏移量(offset),编码效果就会大大改善。这就是加权预测。
加权预测原理解析
加权预测在H.264已经被提出来并且得到应用。加权预测应用于运动估计之后,它是以Slice为单位,每一帧的每一个Slice都需要单独地传输相应的加权预测参数。对与当前解码图像,它有两个参考链表L0和L1,编码端需要给L0和L1中的每一个参考图像的YUV三个分量分别传输相应的加权预测参数。
在H.264中,加权预测存在两种模式,分别是explicit WP (EWP) 和 implicit WP(IWP)。
IWP模式的加权预测参数都是固定的,编解码端约定好采用相同的加权预测参数,不需要编码端传输,减少了码流传输的压力,提高传输效率。
由于IWP模式的参数都是固定的,所以它不能用于单向预测,因为当前帧跟参考帧的距离是变化的,导致权重会相差较大,采用固定的权重,效果不理想。所以在HEVC中,不存在IWP模式,只采用EWP模式,下面分析EWP模式。
Explicit WP:
EWP模式的加权预测参数是由编码端决定的,解码端需要从码流中读取得到相应的加权预测参数。采用EWP模式,编码端可以根据具体情况,灵活采用不同的参数。
加权预测共有三个预测参数,分别是:weight(权重), offset(偏移量),LDW(log weight denominator)。具体计算方式如下式:
(1)
(2)
上面两个式子,(1)式用于单向预测,(2)用于B帧的双向预测。P为像素预测值,W为权重,Q为偏移量,LX为参考链表L0或者L1。在编码端,为了避免浮点运算,需要将权重放大,放大的倍数为2的LWD次方,LWD的取值范围为[0,7]。解码端则缩小相应的倍数,是为了四舍五入。Clip()是控制像素值在有效值之内,如8比特的有效值为[0,255]。
大致流程如下图所示(转):
优化:
采用EWP模式,不管视频有没有光照衰弱效应,也就是Weight Prediction 有无压缩效果的情况下,编码端都需要将加权预测参数传输到解码端。此时:
W = (1<<LWD), Offset = 0。代入(1)式跟(2)式,可以发现,此时相当于没采用加权预测的效果。所以我们需要对加权预测参数进行优化,减少传输。
(1)因为L0和L1的每个参考图像都有自己的加权预测参数,可以发掘他们之间的关系,减少传输次数。
(2)每张图像的YUV三个分量都需要传输自己的加权预测参数,色度分量可以以亮度分量为预测值,减少传输大小。