H.264 宏块级RDO控制

来源:互联网 发布:linux 输出日志命令 编辑:程序博客网 时间:2024/05/18 01:02

  本文介绍的是H.264宏块级的RDO控制,帧级的会在其他篇幅进行讨论。

  宏块级RDO由两部分组成,一部分是失真率,另一部分是比特率。RDO控制的目的就是在比特率满足小等于最大可用比特率的前提下,尽可能的降低失真率。为了达成这个目的,首先要知道如何评估失真率,这个可以参考笔者的另一篇博文《图像质量评估算法》。官方代码JM中使用的是SSD来进行评估,笔者也以该方法进行后续介绍,失真率没有明确的下表,表明都是在SSD方法下的失真率。

  在H.264中,比特率由三部分组成,即:

R=Rheader+Rmotion+Rres(1)

Rheader是语法元素占用的比特数,Rmotion是MV信息占用的比特数(I块没有这个),Rres即使残差占用的比特数。

  为了继续后面的介绍,这里先列出如下两组已知关系(后续会补上他们的出处,现在我也不是很懂为啥这两个会成立):

  • 典型的SSD方法下高码率下码率与失真近似关系为:
    R(DSSD)=alog2(bDSSD)(2)

    其中ab是常数,DSSD是在SSD方法下的失真率。
  • 典型的SSD方法下高码率下失真率与QP的近似关系为:
    DSSD=kE[DSSD]1282(QP12)/3(3)

    其中k是常数,E[DSSD]是在SSD方法下失真率的期望。

  接下来我们定义一个由失真率和比特率组成的代价函数:

J(Sk,MODE|λ)=D(Sk,MODE)+λMODER(Sk,MODE)(4)

  其中Sk是图像S的第k个宏块,J(Sk,I|λ)为最后的代价,编码器的目标是在满足R(Sk,MODE)MaxRate情况下,使其最小。MODE是当前宏块的预测模式(帧内或帧间),λMODE是在MODE下的拉格朗日系数。

  对式(4)左右两边进行R的求导,根据数学只是,我们知道当倒数为0时,代价函数最小(对D求导不知道可不可以?):

dJdD=dDdR+λ=0(5)

dDdR=λ(6)

  通过对式(2)进行求导,我们得到:

dDdR=Da(7)

  带入式(4),可得:

λMODE=Da(8)

  再结合式(2),可得:

λMODE=c2(QP12)/3(9)

  其中c是个常数。JVT在重复了Gary J.Sullivan和Thomas Viegand在文献中的实验,通过拟合得出c=0.68[1]

参考资料:

[1]: 《深入理解视频编解码技术 基于H.264标准及参考模型》

原创粉丝点击