RDO、SAD、SATD、λ相关概念【转】

率失真优化概述:

  率失真优化(Rate D isto r t i on Op t i m ized)策略是在率失真理论[3 ]的基础上提出的一种代价函数方案,  RDO 的主要思想是, 在计算代价函数时, 同时考虑码率和失真度两方面因素的制约, 在保证低失真度的同时保证低码率, 这样更加有利于视频流的传输。 H. 264在运动搜索、 参考帧择优、 模式决策三个方面运用了不同的RDO 代价函数, 也将非RDO 代价函数列为可选模式, 以满足不同的需要。。 可描述如下: 在保证比特率R 不超过最大比特率R max 的条件下, 使失真D 达到最小, 即m in{D } 限制条件:R ≤R max。

  可以通过选择最优的编码参数给出"最好"的图像质量(最低的失真) , 并不超过目标比特率。 在实际中, 用一套编码参数(量化步长、 块模式选择等)对视频序列进行编码, 得到相应的编码比特率 (R ) 和解码图像质量(或失真D ) , 两者结合, 即形成一个R -D 工作点。 用不同套的编码参数重复上述编码过程,获得不同的R - D 工作点,曲线为凸的曲线,横坐标为D,纵坐标为R,曲线为R(D)。

  公式如:J(mode)=D+λ*R。根据不同的情况,D可取下面的值(常用的就是SSD、SAD和SATD):以H.264亮度为例,在帧内预测块大小(16x16或4x4)和预测方向(4个或9个)决策、运动搜索(选择最有匹配点)、参考帧选择、帧间模式选择等都需要进行RDO。

    SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即绝对误差和

    SATD(Sum of Absolute Transformed Difference)即hadamard变换后再绝对值求和

    SSD(Sum of Squared Difference)=SSE(Sum of Squared Error)即差值的平方和

    MAD(Mean Absolute Difference)=MAE(Mean Absolute Error)即平均绝对差值

    MSD(Mean Squared Difference)=MSE(Mean Squared Error)即平均平方误差

RDO概述:

  众所周知,评价编码效率的有两大指标:码率和PSNR。码流越小,则压缩率越大;PSNR越大,重建图像越好。在模式选择的时候,判别公式实质上也就是对二者的综合评价。

  首先以RDO为例,模式对应的代价:J(mode)=SSD+λ*R(ref,mode,mv,residual)

  这里,SSD是指重建块与源图像的差值均方和;λ是拉格朗日乘子,就当是权值吧;R就是该模式下宏块编码的实际码流,包括对参考帧、模式、运动矢量、残差等的比特总和。当然如果是帧内模式,就只有R(mode,residual)。

  很多人迷惑的是,改宏块还没编码啊,怎么知道它的码流和重建图像?实际上,RDO就是对每个模式都实际编码一次,得到J(mode),然后选择J(mode)最小的模式为实际编码模式。就像编码器引入了一个大反馈,这也正是JM选用RDO编码起来龟速的原因,当然,编码效率最佳。

  后来,“随意”注意到,不论熵编码选用cavlc还是cabac,各个模式下的residual编码都使用cavlc,为什么此时不用cabac呢?难道cabac复杂么?我的看法是因为cabac会对模型表更新数据,解码端是没有模式选择模块的,如果编码端此时使用cabac,会造成编解码端模型表不匹配,不能正常解码。 λ的取值是就是码率控制相关的概念。

SAD和SATD:

  前已所述,RDO包含各模式的实际编码过程,也就是变换量化、熵编码、反变换反量化、重建等,计算量是相当大的,实时编码领域不可能直接使用。因此,就有了下面的替代公式:

  J(mode)=SAD+λ*R(ref,mode,mv)

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

  这里SAD就是该模式下预测块与源图像的绝对误差和。比特R中少了对residual的编码,也就是运动估计后就可以直接得到该模式的J(mode)值,极大的减少了运算复杂度。

  SATD就是对残差进行哈德曼变换后的系数绝对和,在大多数情形下,SATD比SAD评价效果更好些,我对foreman CIF图像的测试,psnr增加了约0.2db,码流差不多。当然,SATD比SAD多了个变换,计算量大些。

注意:SAD和SATD对应的λ与RDO的λ取值是不一样的。

  容易困惑的还有,运动估计的匹配准则,很多运动估计的论文中都直接是SAD或SSE。编码器中对残差、MV、ref都要编码,所以匹配准则也就是SAD和码流R的综合评价!!!在同一个模式下,参考块与编码块的不同信息有ref、MV,故匹配准则为:

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

最后,附上我以前在群“H264乐园”中的帖子,

Q:如果不用率失真最优化, 为什么选择SATD+delta×r(mode,ref,mv)作为模式选择的依据?为什么运动估计中,整象素搜索用SAD,而亚象素用SATD?为什么帧内模式选择要用SATD?

A:    SAD即绝对误差和,仅反映残差时域差异,影响PSNR值,不能有效反映码流的大小。SATD即将残差经哈德曼变换的4×4块的预测残差绝对值总和,可以将其看作简单的时频变换,其值在一定程度上可以反映生成码流的大小。因此,不用率失真最优化时,可将其作为模式选择的依据。

   一般帧内要对所有的模式进行检测,帧内预测选用SATD的原因同上。 在做运动估计时,一般而言,离最优匹配点越远,匹配误差值SAD越大,这就是有名的单一平面假设,现有的运动估计快速算法大都利用该特性。但是,转换后SATD值并不满足该条件,如果在整象素中运用SATD搜索,容易陷入局部最优点。而在亚象素中,待搜索点不多,各点处的SAD差异相对不大,可以用SATD选择码流较少的匹配位置。

转自:http://zmshy2128.blog.163.com/blog/static/2544637200658104210/

时间: 2024-10-20 06:21:16

RDO、SAD、SATD、λ相关概念【转】的相关文章

如何阅读X264代码

http://www.cnblogs.com/xkfz007/articles/2616057.html 最近我也开始看 X264 的代码了,于是想到把我读代码的过程记录下来,因为总有很多新手问如何读代码,我这个帖子就是专为这些人写的.至于会读代码的人就完全没有必要看了.下面当然是以 X264 为例了.JM 以及其他代码的学习方法和技巧都是完全一样的.我所用的版本是在帖子 在VS2008下编译最新版的x264连接错误 里上传的版本.最新版本的代码基本结构应该变化不大. 首先肯定是要把 X264

HEVC码率控制简介(R-lamda)

HEVC码率控制介绍 R-lamda模型提出到优化已有2年,从近几年的文章来看,大体归为类:一是帧内的码率的码率控制算法,一是模型参数更新,一是考虑感知 第一类:K0103码率控制算法主要是在P/B帧上提出的,I帧没有做,体现在I帧中LCU编码时用的还是帧层的QP,而帧层的QP是由配置文件(即*.cfg中QP: 32 # Quantization parameter(0-51)  这里的32我们可以更改一般设置为22.27.32.37),如果码率控制开启,实际上配置文件中#======== Qu

转:x264源代码简单分析:编码器主干部分-2

本文来自:http://blog.csdn.net/leixiaohua1020/article/details/45719905 上一篇文章已经记录了x264_encoder_open(),x264_encoder_headers(),和x264_encoder_close()这三个函数的源代码.本文继续上一篇文章的内容,记录x264_encoder_encode()函数的源代码. ? x264_encoder_encode() x264_encoder_encode()是libx264的AP

x264源代码简单分析:宏块分析(Analysis)部分-帧内宏块(Intra)

本文记录x264的 x264_slice_write()函数中调用的x264_macroblock_analyse()的源代码.x264_macroblock_analyse()对应着x264中的分析模块.分析模块主要完成了下面2个方面的功能: (1)对于帧内宏块,分析帧内预测模式(2)对于帧间宏块,进行运动估计,分析帧间预测模式 由于分析模块比较复杂,因此分成两篇文章记录其中的源代码:本文记录帧内宏块预测模式的分析,下一篇文章记录帧间宏块预测模式的分析. 函数调用关系图 宏块分析(Analys

x264源代码简单分析:编码器主干部分-2

本文继续记录x264编码器主干部分的源代码.上一篇文章记录x264_encoder_open(),x264_encoder_headers(),和x264_encoder_close()这三个函数,本文记录x264_encoder_encode()函数. 函数调用关系图 X264编码器主干部分的源代码在整个x264中的位置如下图所示. 单击查看更清晰的图片 X264编码器主干部分的函数调用关系如下图所示. 单击查看更清晰的图片 从图中可以看出,x264主干部分最复杂的函数就是x264_encod

什么是SAD,SAE,SATD,SSD,SSE,MAD,MAE,MSD,MSE?

SAD(Sum of Absolute Difference)=SAE(Sum of Absolute Error)即绝对误差和 SATD(Sum of Absolute Transformed Difference)即hadamard变换后再绝对值求和 SSD(Sum of Squared Difference)=SSE(Sum of Squared Error)即差值的平方和 MAD(Mean Absolute Difference)=MAE(Mean Absolute Error)即平均绝

RDO与RLO

RDO: 平均误差(SSD/SSE).均方误差(MSE).绝对误差和(SAD).峰值信噪比(PSNR) min D subject to R < Rc 拉格朗日优化(λ为拉格朗日乘子): min J, where J = D +λR RLO: The performance loss  P(D) – P(0) 表示的是匹配和不匹配的特征对之间的汉明距 Generalized Binomial Distribution (GBD) 广义二项分布 p(S|k-1,v-1):当特征对的前v-1位之间的

DNS服务相关概念详解

实验环境:RHEL 32Bit DNS服务相关概念详解 DNS是一种域名解析服务,DNS服务的核心以及DNS服务的标准都是基于一个软件来实现的,这个软件叫做BIND(Berkeley Internet Name Domain),互联网上几乎所有的DNS服务都是由BIND来构建的,虽然也有其它的DNS服务构建标准,但是它们的使用语法以及工作机制都和BIND非常接近. ·Linux服务器和Windows服务器的比较 Linux服务器在没有SELinux的时候它的安全级别和Windows服务器的安全级

8. 蛤蟆的数据结构进阶八哈希表相关概念

8. 蛤蟆的数据结构进阶八哈希表相关概念 本篇名言:"作家当然必须挣钱才能生活,写作,但是他决不应该为了挣钱而生活,写作.--马克思" 前些笔记我们学习了二叉树相关.现在我们来看下哈希表.这篇先来看下哈希表的相关概念 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47347273 1.  哈希表的概念 哈希表(HashTable)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键