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,λ?
发布了40 篇原创文章 · 获赞 7 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章