x264代码剖析(十二):核心算法之帧内预测函数x264_mb_analyse_intra()
在帧内预测模式中,预测块是基于已编码重建块和当前块形成的,编码器通常选取预测块与编码块之间差异最小的预测模式。H.264帧内预测则是参考预测块左方或者上方的已编码块的临近像素点被引入空间域。
对于亮度像素而言,预测块用于16*16或4*4大小宏块的相关操作,其中,
(1)、16*16亮度块有4种预测模式,适用于平坦区域图像编码;
(2)、4*4亮度块有9种可选预测模式,独立预测每一个4*4大小的亮度子块,适用于带有大量细节的图像编码。
对于色度像素而言,色度块也有4种预测模式,类似于16*16大小亮度块的预测模式。
除此之外,H.264还有一种帧内编码模式I_PCM,该模式允许编码器直接传输图像的像素值,而不经过预测和变换。在一些特殊情况下,特别是图像内容不规则或者量化参数非常低时,该模式比起其他的“常规操作”(帧内预测——变换——量化——熵编码)效率更高。I_PCM模式的采用主要有以下几个目的:
(1)、允许编码器精确地表示像素值;
(2)、提供表示不规则图像内容的准确值,而不引起重大的数据量增加;
(3)、严格限制宏块解码比特数,但不损害编码效率。
1、16*16亮度预测模式
16*16大小的亮度块有4种预测模式,如下图:
2、4*4亮度预测模式
4*4大小亮度块的上方和左方像素为已编码并进行重构的像素,用作编解码器中的预测参考像素。4*4亮度块有9种可选预测模式,对应的预测模式以及描述如下:
3、8*8色度块预测模式
每个帧内编码宏块的8*8色度成分由已编码左上方色度像素预测而得,两种色度成分常用同一种预测模式。4种预测模式类似于帧内16*16预测的4种预测模式,只是模式编号不同。其中,DC为模式0,水平为模式1,垂直为模式2,平面为模式3。
4、帧内预测模式的选择
H.264采用拉格朗日率失真优化(Rate Distortion Optimization, RDO)策略进行最优化编码模式选择,通过遍历所有可能的编码模式,最后选择最小率失真代价模式作为最佳帧内预测模式。具体的编码模式选择过程概述如下:
(1)、计算当前4*4块和重建的4*4块之间的差值平方和(SSD,Sum of Squared Difference)以及编码的比特率;
(2)、计算9种帧内模式的率失真值;
(3)、选择具有最小率失真值的模式作为最佳4*4帧内预测模式;
(4)、对宏块内的16个4*4块重复上述(1)~(3),获得每一个4*4块的最佳预测模式和相应的最小率失真值;
(5)、累加计算得出16个块的最小率失真值,得到当前宏块的4*4帧内预测率失真值;
(6)、按照类似的方法,分别计算当前16*16大小宏块在4种模式下的