H.264/AVC的帧内预测
这一期来聊一聊H.264/AVC的帧内预测。
目录
帧内预测
帧内预测?
预测?
总感觉这个词有股神奇的力量
为什么要预测?
帧内预测呢
它又有什么样的作用呢?
为什么要预测——因为一般来说,对于一幅自然图像,相邻的像素之间的亮度和色度值经常是比较接近的,也就是颜色是渐进变化的,不会一下子突变成完全不一样的颜色。预测是为了减少数据量,提高压缩率。
帧内预测——相对于帧间预测而言,就是利用视频空间域的相关性,使用同一帧图像内邻近已编码像素预测当前的像素,以达到有效去除视频时域冗余的目的。
举个例子:
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 是基于已编码重建块和当前块形成的。如下图所示(当前块由周边虚线已编码块完成预测)。
对亮度像素而言,
-
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预测。具体预测模式如下表。
模式 | 描述 |
模式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块演示不同方向的预测
对于模式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) | 利用线形函数及左、上像素推出相应像素值,适用于亮度变化平缓区域 |
前面三种很好理解了,重点是第四种Planer的计算方式,该模式分别根据像素距离块边界的距离,再结合水平和垂直线性加权得到的。下图是四种预测模式的预测图。
色度块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技术