本文介绍的是H.264宏块级的RDO控制,帧级的会在其他篇幅进行讨论。
宏块级RDO由两部分组成,一部分是失真率,另一部分是比特率。RDO控制的目的就是在比特率满足小等于最大可用比特率的前提下,尽可能的降低失真率。为了达成这个目的,首先要知道如何评估失真率,这个可以参考笔者的另一篇博文《图像质量评估算法》。官方代码JM中使用的是SSD来进行评估,笔者也以该方法进行后续介绍,失真率没有明确的下表,表明都是在SSD方法下的失真率。
在H.264中,比特率由三部分组成,即:
R=Rheader+Rmotion+Rres(1) (1) R = R h e a d e r + R m o t i o n + R r e s
Rheader R h e a d e r 是语法元素占用的比特数, Rmotion R m o t i o n 是MV信息占用的比特数(I块没有这个), Rres R r e s 即使残差占用的比特数。
为了继续后面的介绍,这里先列出如下两组已知关系(后续会补上他们的出处,现在我也不是很懂为啥这两个会成立):
- 典型的SSD方法下高码率下码率与失真近似关系为:
R(DSSD)=alog2(bDSS