H.264/AVC的帧内预测

这一期来聊一聊H.264/AVC的帧内预测。

 

目录

这一期来聊一聊H.264/AVC的帧内预测。

帧内预测

H.264帧内预测算法

亮度4x4块帧内预测

亮度16x16帧内预测

色度块8x8帧内预测


帧内预测

帧内预测?

预测?

总感觉这个词有股神奇的力量

为什么要预测?

帧内预测呢

它又有什么样的作用呢?

 

为什么要预测——因为一般来说,对于一幅自然图像,相邻的像素之间的亮度和色度值经常是比较接近的,也就是颜色是渐进变化的,不会一下子突变成完全不一样的颜色。预测是为了减少数据量,提高压缩率。

 

帧内预测——相对于帧间预测而言,就是利用视频空间域的相关性,使用同一帧图像内邻近已编码像素预测当前的像素,以达到有效去除视频时域冗余的目的。

 

举个例子:

F G H  
E B C  
D A X  
       

X为待预测像素,B~H为已知像素,由于自然图像的连续性,那么X就可以根据B~H推导出预测值,显然距离越近的权重越大。

假设X预测得到的像素值为201,实际的原始像素为202,那么在编码的时候只需要传递差值即可,此例中就是(202 - 201)= 1。编码1只需要一个比特,而不预测的话,则需传输8个比特。从而达到压缩的目的。

 

了解了预测的原理,我们来看一下H.264的帧内预测算法。

 

H.264帧内预测算法

 

在H.264帧内预测模式中,预测块 P 是基于已编码重建块和当前块形成的。如下图所示(当前块由周边虚线已编码块完成预测)。

H.264/AVC的帧内预测

对亮度像素而言,

  • P 块用于4×4 子块或者16×16 宏块的相关操作。4×4 亮度子块有9 种可选预测模式,独立预测每一个4×4亮度子块,适用于带有大量细节的图像编码;

  • 16×16 亮度块有4 种预测模式,预测整个16×16 亮度块,适用于平坦区域图像编码;

对色度块而言,

  • 有4 种预测模式,类似于16×16 亮度块预测模式。

 

编码器通常选择使预测得到的P 块和原始P块之间差异最小的预测模式。

 

此外,还有一种帧内编码模式称为PCM 编码模式。该模式下,编码器直接传输图像像素值,而不经过预测和变换。在一些特殊的情况下,比如电视雪花点这种,毫无规则可言,随机出现的点很难预测,此时还不如不预测。

 

亮度4x4块帧内预测

亮度4x4块的预测模式一共9种,其中八种方向预测,预测方向如下图所示。外加一种DC预测。具体预测模式如下表。

H.264/AVC的帧内预测

模式 描述
模式0  (垂直) 由A、B、C、D 垂直推出相应像素值
模式1(水平) 由I、J、K、L 水平推出相应像素值
模式2(DC) 由A~D 及I~L 平均值推出所有像素值
模式3(下左对角线) 由45°方向像素内插得出相应像素值
模式4(下右对角线) 由45°方向像素内插得出相应像素值
模式5(右垂直) 由26.6°方向像素值内插得出相应像素值
模式6(下水平) 由26.6°方向像素值内插得出相应像素值
模式7(左垂直) 由26.6° 方向像素值内插得出相应像素值
模式8(上水平) 由26.6° 方向像素值内插得出相应像素值

下图是以4x4块演示不同方向的预测

H.264/AVC的帧内预测

对于模式0,当前块的十六个像素值,完全由其上方块最后一行的那四个像素值决定。

模式1,也是一样,完全由图中IJKL四个像素值决定。

对于模式2(DC),则十六个像素值完全相等,等于ABCDIJKL这八个像素的平均值。

对于预测模式3~8,倾斜方向的,各个像素是由A到L像素通过权重不等的公式加权计算的。比如对于模式3来说:

a=(A+2B+C+2)/4,这里+2代表四舍五入,b和e=(B+2C+D)/4,cfi=(C+2D+E+2)/4,dgjm=(D+2E+F+2)/4,hkn=(E+2F+G+2)/4,lo=(F+2G+H+2)/4,p=(G+2H+H+2)/4=(G+3H+2)/4。

最终,我们要选择哪种模式进行预测?为了在后面节约码率考虑,当然是预测的越准越好,差距最小为好。而评判这个差距其实也有好几种算法,比如SAD、SATD等。

我们注意到这里有9种模式,之后要进行编码的话,我们除了把残差编进去,总得知道我预测的时候用了哪种模式吧,9这个数就尴尬了,因为刚好三个比特可以表示8种,四个比特可以表示16种,所以3bit不够4bit又浪费了。怎么办呢?

有个方法就比较巧妙,我有1bit用来表示我当前用的模式和前面的是不是一样的,因为经常有这样的情况,我前面块用的预测方向和现在这个块用的预测方向一样(比如物体边缘是一条直线,那么对应的那几个块用的预测方向很可能都是一样的),如果一样,我只用1bit就足够存储了,如果不一样,我再用用4个bit存储,也就达到了节约bit的目的。

 

亮度16x16帧内预测

说完了4x4的亮度块,我们看看16x16大小的亮度块。16x16亮度块有四种模式,具体描述如下表。

模式 描述
模式0(垂直) 由上边像素推出相应像素值
模式1(水平) 由左边像素推出相应像素值
模式2(DC) 由上边和左边像素平均值推出相应像素值
模式3(Planer) 利用线形函数及左、上像素推出相应像素值,适用于亮度变化平缓区域

 

H.264/AVC的帧内预测

前面三种很好理解了,重点是第四种Planer的计算方式,该模式分别根据像素距离块边界的距离,再结合水平和垂直线性加权得到的。下图是四种预测模式的预测图。

H.264/AVC的帧内预测

 

色度块8x8帧内预测

每个帧内编码宏块的8×8色度成分由已编码左上方色度像素预测而得,两种色度成分常用同一种预测模式。4 种预测模式类似于帧内16×16 预测的4 种预测模式,只是模式编号不同。其中DC(模式0)、水平(模式1)、垂直(模式2)、平面(模式3)。每个帧内编码宏块的8×8色度成分由已编码左上方色度像素预测而得,两种色度成分常用同一种预测模式。4 种预测模式类似于帧内16×16 预测的4 种预测模式,只是模式编号不同。其中DC(模式0)、水平(模式1)、垂直(模式2)、Planer(模式3)。

 

Media技术

H.264/AVC的帧内预测