当前位置: 首页 > news >正文

H266/VVC率失真优化与速率控制概述

率失真优化技术

率失真优化: 视频编码的主要目的是在保证一定视频质量的条件下尽量降低视频的编码比特率,或者在一定编码比特率限制条件下尽量地减小编码失真。在固定的编码框架下,为了应对不同的视频内容,往往有多种候选的编码方式,编码器的一个主要工作就是在某种策略选择最优的编码参数,以实现最优的编码性能。基于率失真理论的编码参数优化被称为率失真优化,率失真优化技术是保证编码器效率的主要手段。

率失真理论: 在允许一定程度失真的条件下,能够把信源信息压缩到什么程度?也就是说,最少需要多少比特才能描述信源?针对这个问题,香农在1959年发表了 《保真度准则下的离散信源编码定理》 ,定义了信息率失真函数R(D),并讨论了其相关基本定理。之后,率失真理论逐渐受到了人们的重视。

互信息量:对于两个离散随机事件集X和Y,事件 yj 的出现给出的关于事件 xi 的信息量定义为互信息量 I(xi; yj) ,其定义公式如下。由公式可以看出,互信息量为后验概率与先验概率比值的对数。互信息量的单位与自信息量一样取决于对数的底。
在这里插入图片描述
失真度:设离散无记忆信源[X; P] = [x1, …xN; p(x1),…p(xN)]经过信道传输后接收端的离散变量Y的概率空间为[Y; P] = [y1, …yN; p(y1),…p(yN)]。对于每对(xi, yj),指定一个非负的函数d(xi, yj)>=0,称其为单个符号的失真度或失真函数。
规定了单个符号的失真度之后,传输一个符号引起的平均失真度,即信源的平均失真度如下公式。
在这里插入图片描述
不同的信源符号和不同的接受符号,产生的失真不同,但平均失真度已对信源和信道进行了统计平均,所以平均失真度可描述某一信源在某一试验信道传输下的失真大小,可从整体上描述系统的失真情况。

率失真函数:接收端获得的平均信息量可用平均互信息量I(X, Y)来表示,这就变成这在满足保真度准则的条件下,寻找平均互信息量的最小值。这个最小值就是在满足保真度准则的条件下,信源必须传输的最小平均信息量,如下公式,就是信息率失真函数,简称率失真函数。
在这里插入图片描述
率失真函数R(D)的一半曲线图形如下图。
在这里插入图片描述
率失真信源编码定理:保真度准则下信源编码定理、保真度准则下信源编码逆定理。

视频编码中率失真优化

视频压缩的目标:在保证视频质量的都前提下尽量降低视频流的压缩码率。
视频失真测度:平方误差和SSE、均方误差MSE、绝对误差和SAD、峰值信噪比PSNR。
视频率失真曲线:
在这里插入图片描述
视频编码率失真优化:不同的编码参数可以得到不同的率失真性能,最优的编码方案就是在编码系统定义的所有编码参数中使用能够使系统性能最优的参数值,视频编码系统中的率失真优化就是基于率失真理论选择最优的编码参数。拉格朗日优化法是视频率失真中最常见和最有力的优化工具。

H266中的率失真优化

H266采用了更先进的编码算法和多种高效的编码工具,因此编码过程也面临更多的编码参数选择。因此,拉格朗日优化方法在图像组层、片层、CTU层和CU层都发挥了重要的应用。

速率控制

速率控制:通过一系列编码参数,使得视频编码后的比特率满足所需要的速率限制要求,并且使编码失真最小。速率控制术语率失真的范畴,速率控制算法的重点是确定与速率相关的量化参数。

缓冲机制:视频的编码速率与编码参数、编码结构、视频内容等诸多因素密切相关,速率控制算法通常无法保证实际编码速率与目标速率完全一致。为了减小二者之间的差别,通常会在编码器和传输信道间建立一个数据缓冲区,称为“缓冲机制”,用于平滑编码速率与信道速率之间的差别。如下图。
缓冲机制可以使编码速率更好地匹配信道速率,但会消耗存储空间和带来时延。因此,实际应用中,缓冲区的大小由允许最大时延及运营成本决定。
在这里插入图片描述
流体流量模型:为了设计含缓冲区的速率控制算法,通常将缓冲区的动态变化过程用流体流量模型来表示,如下图。
在这里插入图片描述
速率控制技术: 主要分为两个模块,即目标比特分配量化参数的确定。在视频编码中的速率控制过程如下图。H266标准的速率控制算法仍然采用传统的两步骤方式。
在这里插入图片描述

参考

JVET输出文档: https://www.itu.int/wftp3/av-arch/jvet-site/
书籍: 新一代通用视频编码H266/VVC:原理、标准与实现[万帅 霍俊彦 马彦卓 杨付正/著]

备注

本系列博客主要是对《新一代通用视频编码H266/VVC:原理、标准与实现》的学习笔记。

http://www.lryc.cn/news/275312.html

相关文章:

  • thinkphp6入门(14)-- 多关联模型查询
  • MT8766安卓核心板规格参数_MTK8766核心板模块方案定制
  • k8s的声明式资源管理(yaml文件)
  • Qt中图片旋转缩放操作
  • LeetCode 2125. 银行中的激光束数量【数组,遍历】1280
  • 关于图像分割任务中按照比例将数据集随机划分成训练集和测试集
  • 回文链表【链表】
  • Linux Perf 介绍
  • 【论文阅读】Variational Graph Auto-Encoder
  • 如何把电脑中的项目快速传进Github中?
  • Plantuml之nwdiag网络图语法介绍(二十九)
  • MyBatis接口的方法上使用,定义对应的 SQL 操作
  • (20)Linux初始文件描述符
  • draw.io基础操作和代码高效画图进阶
  • 2024-01-04 用llama.cpp部署本地llama2-7b大模型
  • HTTP打怪升级之路
  • axure RP9.0安装字体图标库fontawesome
  • PiflowX组件-ReadFromUpsertKafka
  • keil 5 ARM CC编译错误和警告解释大全(3)序列号2000-3000
  • CentOS 7 实战指南:文件或目录的权限操作命令详解
  • 我的第一个前端项目,vue项目从零开始创建和运行
  • 【OJ】C++,Java,Python,Go,Rust
  • Flink 任务指标监控
  • Go语言程序设计-第7章--接口
  • 性能优化-OpenMP基础教程(二)
  • 让电脑变得更聪明——用python实现五子棋游戏
  • C#-接口
  • ASP.NET可视化流程设计器源码
  • 景联文科技GPT教育题库:AI教育大模型的强大数据引擎
  • PHP进阶-实现网站的QQ授权登录