x264宏块模式选择

x264宏块模式选择

评价编码效率有两个指标:码率和解码图像质量。最好结果是码率小而质量高,但这基本上是不可能的,码率和质量一般是反比的关系。因此编码器编码过程就是对这两个因素的平衡过程。率失真优化RDO(Rate Distortion Optimization)就是在这种情况下提出来的编码优化方案。

        J(mode) = SSD+λ*R(mode, ref, mvd, residual)

        SSD(Sum of Squared Difference)是指重建块与源图像的差值平方和,它表征了编码质量,SSD低就相当于编码质量高;

        R(mode, ref, mvd, residual)是宏块模式,参考帧ID,运动矢量差,以及残差数据经熵编码后的比特数,它表征了码流大小;

        λ是拉格朗日乘子,是SSD与码流两个不同量纲的物理数据平衡权值。

使得J(mode)取得最小值的{mode, ref, mvd}组合就是RDO的最优选择结果。可以看出为了得到这个最优结果,需要对各种宏块模式和每一个参考帧、参考块都编码一遍(得到R(residual)),这将是极为耗时的事情。JM编码器就是用这种RDO,因此编码速度非常的慢。同时由于残差数据的编码比特数和量化系数QP相关,因此R(mode,ref,mvd)也需要和QP相关,以平衡R(mode,ref,mvd)和R(residual)。


为了减少RDO的计算量,在X264里面使用了

        J(mode) = SATD+λ*R(mode, ref, mvd)

       其中省略了表征残差数据比特的R(residual),也就是不需要对每一个候选模式都编码一遍,这样大大的降低了计算量。同时为了弥补省略R(residual)而对公式造成的不准,将SSD改为SATD。
SATD(Sum of Absolute Transformed Difference)是Hadamard变换后的结果绝对值求和,Hadamard变换是一个非常简单的时频变换,其值与残差编码输出比特数成正比,在一定程度上可以反映生成码流的大小。



另外在运动估计的匹配准则,

Jmotion=SAD/SATD+λ*R(ref,mv)

在做运动估计时,一般而言,离最优匹配点越远,表征匹配误差的绝对误差和SAD(Sum of Absolute Difference)就越大,这就是有名的单一平面假设,现有的快速运动估计算法大都利用该特性。但是SATD值并不满足该条件,如果在整象素运动估计中运用SATD搜索,容易陷入局部最优点。而在亚象素中,待搜索点不多,各点处的SAD差异相对不大,可以用SATD出选择码流较少的匹配位置。
因此在整数点运动估计的时候一般使用SAD;在分数点运动估计的时候使用SATD。


原文来源:
RDO,SAD,SATD,λ?
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值