Rate Distortion Optimization

搜索时,一个不可避免的问题就是如何对mv进行比较,从而得到最优

对于同一压缩算法来说,码率越高表示图像质量越好、失真越小,但是码率越高要求更大的存储空间,也会增加网络传输的压力。因此在码率与失真中找出平衡点,使压缩效果最优,这种方法叫做R-D Optimization(码率失真优化)

典型的高码率下,码率与失真关系(R-D关系式)为

$R(D) = {\alpha}{ln(\frac{\delta^2}{D})}$

$R$为码率,$\alpha$为系数,$\delta^2$为方差,$D$为失真。

方差越大,意味着图像细节越多,因此码率也会越大;失真越大,意味着图像由于压缩所损失的细节越多,那么码率越小。

R-D曲线

R与D好比鱼与熊掌,取一方,必然会舍去另一方,两者不可能都取得最佳,因此如何取舍,就需要权衡利弊。最好的方法,就是看哪个权重大,哪个的比例就大,权重小的比例小,这就是拉格朗日方法。

拉格朗日代价函数为:

$J = D + \lambda_{MODE} \cdot R$

要使得代价最小,那么在其导数为0处有最小值:

$\frac{dJ}{dR} = \frac{dD}{dR} + \lambda_{MODE} = 0$

现假设D与R的权重比为$\lambda_{MODE}$,并假设上方点A为根据上方结论得到的最佳位置,那么点A处有斜率:

$k = -\lambda_{MODE} = \frac{dD}{dR}$

又因为可以通过对R-D关系式求导,然后整理得:

$\frac{dD}{dR} = -\frac{D}{\alpha}$

因此,在R-D最优点处有:

$\lambda_{MODE} = \frac{D}{\alpha}$

另外,在典型的高码率下,失真近似满足公式:

$D = \frac{ ( 2 \cdot QUANT )^2}{12}$

把D代入上述公式,得到:

$\lambda_{MODE} = \frac{1}{3\alpha}\cdot QUANT^2$

即:

$\lambda_{MODE} = \zeta\cdot QUANT^2$

最终可以通过函数拟合得到$\zeta = 0.85$,在h.264中,当存在B帧编码时$\zeta = 0.68$,则有:

$\begin{align*}
\lambda_{MODE}
&= 0.68\cdot QUANT^2 \\
&= 0.68 \cdot (2^\frac{QP - 12}{6})^2 \\
&= 0.68\cdot 2^\frac{QP - 12}{3}
\end{align*}$

注:QP在这里减去12是因为在h.264早期只有40个QP,而现在由52个QP

由于上面计算的时候用的是$\delta^2$(方差),即SSD,但是实际上h.264计算用的是

$\begin{align*}
SAD &= \sum_{(x,y)\in A}\left | s[x,y] - s'[x,y]\right | \\
SSD &= \sum_{(x,y)\in A}\left | s[x,y] - s'[x,y]\right |^2
\end{align*}$

那么

$\lambda_{MOTION} =  \sqrt{\lambda_{MODE}}$

为了方便计算,在一般h.264的编码器中采用的都是

$D = SAD$

而R则需要知道当前所选择的mv与ref所占用的bit,而这些都是可以事先计算出来的,在JM中不同的mv与ref所占的bit都在编码前被初始化了,用数组存储起来。mv与ref采用的都是哥伦布编码。

$R = Bit_{mv} + Bit_{ref}$

h.264 率失真优化的更多相关文章

  1. H.264学习笔记3——帧间预测

    帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏 ...

  2. H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  3. 【图像处理】H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...

  4. x264 - 高品质 H.264 编码器

    转自:http://www.5i01.cn/topicdetail.php?f=510&t=3735840&r=18&last=48592660 H.264 / MPEG-4 ...

  5. H.264简介

    H.264/MPEG-4 AVC (H.264) 是1995年自MPEG-2视频压缩标准发布以后最新的, 最有前途的视频压缩标准. H.264是由ITU-U和ISO/IEC联合开发组共同开发的最新国际 ...

  6. 转:MediaCoder H.264格式编码参数设置及详解

    转: http://mediacoder.com.cn/node/81 由于现在大部分视频转码都选择H.264格式进行编码,同时CUDA编码的画质还达不到x264软编码的质量(如果你对画质无要求,可以 ...

  7. H.264视频的RTP荷载格式

    Status of This Memo This document specifies an Internet standards track protocol for the   Internet ...

  8. 音视频编解码技术(一):MPEG-4/H.264 AVC 编解码标准

    一.H264 概述 H.264,通常也被称之为H.264/AVC(或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC) 1. H.264视频编解码的意义 H.264的出现就是为了创 ...

  9. h.264并行熵解码

    在前面讨论并行解码的章节中,我们专注于讨论解码的宏块重建部分,甚至把宏块重建描述成宏块解码,这是因为在解码工作中,宏块重建确实占了相当大的比重,不过解码还包含其它的部分,按照解码流程可粗略分为: 读取 ...

随机推荐

  1. 表格布局TableLayout

    简单实现计算机界面布局的案例: <?xml version="1.0" encoding="utf-8"?><TableLayout xmln ...

  2. python urllib2详解及实例

    urllib2是Python的一个获取URLs(Uniform Resource Locators)的组件.他以urlopen函数的形式提供了一个非常简单的接口, 这是具有利用不同协议获取URLs的能 ...

  3. 关于Form窗体的StartPosition 属性如何设置的问题

    1.让窗体在启动时在指定位置出现 form1.StartPosition Manual CenterScreen WindowsDefaultLocation (default) WindowsDef ...

  4. Java Applet读写client串口——终极篇

    測试环境: SDK:Oracle JRockit for Java version 6, Java Communication for Windows 2.0 OS:WINDOWS7 外设:串口条形码 ...

  5. linux c 系统报错

    本文中的错误是指在代码编译完全正确程序可运行的情况下,因为没有成功调用程序中的某些系统调用函数而产生的错误.往往这些系统调用函数通过返回值(比如1,0,-1)来说明其是否调用成功,而程序员需要知道详细 ...

  6. 深入探索C++对象模型-1

    概述 在实际生产中,遇到一个复杂的类,如果能看出这个类的内存模型结构,那么以后的操作基本就没有难度的: 所以说,学会分析一个类的内存模型,是每一个C++程序员必须要会的知识. 下面,就让我们来了解C+ ...

  7. 设置listview的header不能点击

    View headView = inflater.inflate(R.layout.search_top, null); mListView.addHeaderView(headView ,null, ...

  8. java定时器,Spring定时器和Quartz定时器

    一.java定时器的应用 其实java很早就有解决定时器任务的方法了,java提供了了类java.util.TimerTask类基于线程的方式来实现定时任务的操作,然后再提供java.util.Tim ...

  9. 工厂模式[3] 抽象工厂 Abstract Factory

    简介 1.简单工厂,或静态工厂,产品接口 定义:专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类或实现同一接口 优点:客户端可以直接消费产品,而不必关心具体产品的实现(不关心对象的 ...

  10. js动态添加table 数据tr td

    成果库修改:      要求主题列表随成果类型改变而改变      网上查询资料后开工,在成果类型下拉框添加change()事件触发Dwr,查询主题集合——动态创建/编辑Table      概要代码 ...