H.265/HEVC率失真优化(RDO)及其HM代码注解

一、率失真优化(RDO)的目的

选择一个最小失真的编码模式可以带来最好的视频质量, 然而这往往需要很高的编码比特率。如何在有限的编码比特数下,选择一个失真最小的模式是编码中的关键问题。对于给定编码单元,上述求极值问题可将其转化为:在给定码率的情况下,尽可能降低失真D。这也即是 RDO 的目的,率失真代价函数表述如下:
{ Para}opt=arg min{ Para}(D+λR)
其中,RD 分别表示编码所消耗的比特数码率以及失真程度,{ Para}opt表示最佳的编码参数集,包括模式选择、运动估计以及QP等,λ 为拉格朗日乘子。

二、HEVC中率失真优化方法

HM 采用拉格朗日优化方法为每个编码树单元CTU确定除编码参数QP之外的所有编码参数,主要包括CU划分模式、CU中PU和TU的划分、PU预测等等。每个CTU采用分级方式确定不同层的编码参数,步骤如下:
1. 首先,遍历所有CU,按如下公式对CU(CU从64x64到8x8)进行划分模式进行编码;
min J J=D(Mode)+ λ(Mode)•R(Mode)
2. 然后,在CTU中遍历所有PU(PU是预测的基本单元)模式和TU(TU是变换的基本单元,TU遍历的最小尺寸为4x4)的
组合,选择率失真代价值最小的确定为最优模式;
3. 不论帧内还是帧间,都会存在PU的预测,对PU的预测模式也是遍历所有的预测模式,分别计算每个模式对应的率失真代价值,选取最小的率失真代价值对应的预测模式为最优模式;

三、HEVC参考模型HM中初始QP和拉格朗日乘子初始化

在RDO中拉格朗日乘子作为率失真代价函数计算的关键参数,每帧的初始拉格朗日乘子会根据Slice的类型和在GOP中的位置,根据下式中每帧的初始QP确定对应的拉格朗日乘子:
模式选择过程对应拉格朗日乘子:
λ(Mode)=αW**pow(2,(QP-12)/3.0)
运动估计过程对应拉格朗日乘子:
λ(Motion)=pow(λ(Mode),1/2.0)

W为加权因子,I帧为0.57。根据当前Slice是否最为参考图像,Nb为GOP中B帧的个数(发现LDP配置中P帧在HM中也算作B帧),如果为非参考图像α为1,如果为非参考帧时:
α= 1.0 - Clip3(0.0,0.5,0.05*Nb)

HM在编码GOP之前会对每个Slice的拉格朗日乘子作初始化,并在compressGOP函数中的initEncSlice实现初始化

    m_pcSliceEncoder->initEncSlice ( pcPic, iPOCLast, pocCurr, iGOPid, pcSlice, isField );

如果开启多QP优化,会对每个遍历的QP初始lambda,我用的HM版本为HM 16.9,不过不同版本的对应函数应该没有太大变化

  // pre-compute lambda and QP values for all possible QP candidates
  for ( Int iDQpIdx = 0; iDQpIdx < 2 * m_pcCfg->getDeltaQpRD() + 1; iDQpIdx++ )
  {
    // compute QP value
    dQP <
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值