最近看x264代码,看到帧内模式选择部分,对其中的模式代价计算一头雾水,其实对帧内模式选择一直没有深入底层研究,停留在概念上,“纸上得来终觉浅,要想深入需看代码”。但是要想看懂代码还是要对理论东西有个大体认识。废话少说!
下面是从网上摘过来的:
第一篇:H.264帧内编码的模式选择
H.264中4X4亮度预测依据预测方向的不同共有9种预测模式。在亮度4x4帧内预测时,其中DC预测(模式2)、垂直预测(模式0)和水平预测(模式2总是被认为有效的,即使在编码块上面像素或左边像素不可用的情况下(这时候上面像素或左边像素的值就使用128这个值来代替),而其它模式仅当所有需要利用的预测象素点都可用的情况下才可以使用(如果E,
F, G,H不可用,可以用D的值来代替)。这儿所说的像素点可用(available)是指此像素所在的子块存在并且与当前编码的子块属于同一个slice。模式选择在H.264帧内编码中,每个宏块亮度信号都要完成9种4x4预测模式和4种16x16预测模式,然后通过预测模式选择,得出一种最佳预测模式使得编码后的图像在码流和图像质量两者权衡后的获得一个最佳。H.264中模式选择方法有两种:
1、使用率失真优化(RDO)模式选择。使用这种RDO方式的模式选择过程如下:
1)在给定最后解码的帧及宏块的量化因子QP后,计算拉格朗日因子:
X=0.85*QP2 (1)
2)在帧内亮度4x4预测的9种预测模式中,通过计算下面的函数使得其值最小,从中选择最佳的帧内亮度4x4预测模式。J(s, c, m I QP, Xm )=SSD(s, c, m I QP)+X*R(s, c, m I QP) (2)式中QP是宏块的量化参数,X是(1)中的拉格朗日因