【视频编码\VVC】量化基础知识

量化:是将信号的连续取值(大量离散取值)映射为有限多个离散赋值的过程。实现信号取值多对一的映射。可以有效减少信号取值的空间,进而获得更好的压缩效果。

根据输出和输入数据的类型,可以将量化器分为标量量化SQ和矢量量化VQ两种类型。

VVC除了使用标量量化,还采纳了低复杂度的矢量量化(依赖量化DQ)

标量量化

简单的,将输入信号划分为M个互不相交的区间,区间端点,称为量化的判定边界。对于每一个区间,分辨选取一个点作为输出值,称为重建值。当输入样点位于区间范围内,量化结果为那个重建值。还可以将输入信号经过量化之后被映射为一些用于表示重建值的索引号,索引号比重建值具有更加统一和简单的形式。在视频编码中,常使用索引号。

均匀标量量化

将输入值域分为等距的区间,每个区间对应的输出值为该区间的中点。区间的长度称为量化步长。量化步长取决于输入信号的变化范围及重建值的个数。

因为中间值为每个区间的重点,所以量化误差位于区间[-deta/2,deta/2)

量化误差的衡量准则

  • 均方误差:反映失真的大小
  • 信噪比:失真与信号的相对大小
  • 峰值信噪比:失真与信号峰值的相对大小

因此使用均匀标量量化可以获得的失真与量化步长的平方成正比。对于非均匀分布,使用均匀量化可能无法获得较好的性能。

Lloyd-Max量化器

最优标量量化,考虑服从任意分布的输出信号,设其概率密度函数为f_X(x)

最优标量量化器表示某一区间的重建值应为该区间的“质心”。因为直接求解式子比较困难,因此采用迭代的方式进行求解,称为Lloyd-Max算法。(初始化、计算ti、计算xi的重建、计算Dj,损失小于一定程度停止优化)

熵编码量化器

Lloyd-Max是在给定重建数目M的约束条件下,量化失真最小。如果采用定长编码,每传输一个量化输出值需要的比特位数为R=log_2M,向上取整。

如果考虑变长编码,每个量化输出值所需的比特数不一样,平均比特数接近量化输出值的熵,这样Lloyd-Max就不是最优的了。此时最优量化器应该在对熵的约束下使失真最小。

设定目标比特率R

可以看到重建值依旧为“质心”,但是划分编解有区别,熵编码量化器在临近量化的基础上引入了一个偏差。相邻两个区间的划分点会向着取值概率较小的重建值方向偏移。取值概率较大的量化重建值对应的量化区间越大,概率大的重建值编码时所需要的比特数越小。

在视频编码中常认为DCT系数服从拉普拉斯分布,主要特点是在0值附近系数概率较大。因此图像和视频编码中的量化器会加宽以0为中心的区间,称为“量化死区”

还有率失真优化量化,在下面介绍。

矢量量化

矢量量化是多对一的量化,即两个或两个以上的幅度对应一个量化结果。

假设有N个K维矢量,把K维空间划分为互补子空间(胞腔CELL),在每个子空间中找到一个代表矢量(码字、码矢),全部组成为一个矢量集(码书、码本)。矢量集中的矢量个数J为码字长度

矢量量化的过程可以看成从欧式空间
R_K

到其中一个有限矢量集Y的映射Q:R_K\rightarrow Y=\{Y_1,Y_2,...,Y_j\}

将多干个标量数据(k个)构成一个矢量,然后矢量空间进行发整体量化,用码书中与输入矢量最匹配的码字索引替换输入矢量进行传输与存储。

网格编码量化(Trellis Coded Quantization,TCQ)

因为矢量量化复杂度高,因此采用矢量量化和标量量化相结合的方式。复杂度低且具有量化的性能。来源于网络编码调制,借鉴了网络编码调整中信号集合扩展,信号集合划分和网络状态转移的思想。

将R位量化对应的2^R阶量化器拓展为2^{R+1}阶,码书大小增加2倍,使用更精细的码书提高信噪比。同时为了减少码字,将拓展后的码书划分为4个子集,按照顺序分布,每个子集包含2^{R-1}个码字,每个子集堪称一个独立的量化器。

为每个输入选择一个量化器进行量化,量化器的选择根据量化器状态转移,采用网格进行约束。当编码长度为N时,量化器状态采用N级网格级联,每级都要在4个量化器中找到到与输入数据最匹配的码字,按照从左到右的顺序级联所有网格,使用维特比算法,找到一条最小误差的最佳路径,得到所有的状态转移过程。

VVC量化

VVC支持普通标量量化和依赖量化DQ。

VVC的标量量化

VVC中规定的时反量化过程。\widehat{c_l}=l_i\cdot Q_{step} 量化后的值*量化步长。在实际应用中,使用量化参数(QP)来表示所选的量化步长。VVC在HEVC52个量化参数的基础上,拓展了量化参数的数量,并且可以根据比特深度进行自适应的调整。取值范围为-6*(bitdepth-8)到63。量化步长和量化参数有确定关系。当比特深度一定的时候,QP每增加6,步长增大1倍。

VVC中全部使用整数运算,并融合了反变换中的比例伸缩运算,引入量化矩阵,调整当前块内不同位置的量化步长。由于依赖量化器的特殊性,每个量化器重建值的距离为一般量化器的2倍。如果采用变换跳过模式,就不需要反变换,也不需要额外的缩放,同时不再采用量化矩阵。

VVC的编码器采用传统的标量量化方法l_i=floor(c_i/Q_{step}+f)c_i表示DCT系数,f控制舍入关系。为了避免浮点运算,保留运算精度,也引入了qbits和MF变量。对于特殊的块会修改MF以步长变换过程中的隐式缩放。量化过程如下:

率失真优化量化

因为实际编码中,待量化变换系数的分布特性不同,标量量化无法有效应对,引入了率失真量化器(RDOQ)。对于一个变换系数,给定多个可选的量化注意,利用RDO准则选择一个最优的量化值。

实现步骤

  • 确定当前TU每个系数的可选量化值,对当前TU所有系数进行预量化,利用得到的量化值大小确定可选量化值。
  • 利用RDO准则确定当前TU所有系数的最优量化值,按照扫面顺序遍历当前TU所有系数,对于每个系数遍历可选的量化值。
  • 利用RDO准则确定当前TU每个系数组CG是都量化为全0组。
  • 利用RDO准则确定当前TU最后一个非0系数的位置,遍历非0系数,分别计算其作为最后一个非0系数时的TU总率失真代价,选择最小的那个。

熵编码中的符号隐藏SDH技术也需要量化参数的配合,利用率失真优化,确定最优量化参数。

依赖量化DQ

当前变换系数的量化值依赖前一个变换系数的量化值。利用了变换系数间的相关性,使得变换系数经量化后在N维向量空间更紧密,减少了输入向量和重建向量之间的误差,减小的量化带来的失真。

VVC依赖量化器关键技术:定义两种不同标量量化器Q1和Q2,定义标量量化器之间的转换准则。

Q0对应偶数倍的步长,Q1对应奇数倍量化步长。当变换块进行反量化的时候,初始状态设置为0,变换系数按照编码顺序重建,重建完成后更新状态。VVC的标量量化器由一个4状态状态机表示。步骤如下

  • 确定当前系数的可选量化索引,为每个量化系数确定4个后选址,针对每个量化器都有2个最小化原始值和重建值差的绝对值的候选。
  • 当扫描缩影从k-1转换到k时,为阶段k-1的网络节点和阶段k的网络节点之间的所有连接计算一个率失真代价。保留最小率失真代价的连接。
  • 得到率失真代价最小的路径,确定出路径上的量化索引,得到最终的量化值。

量化参数

在传输速率受限时,灵活地控制量化参数使编码效率尽可能接近给定码率非常重要。VVC沿用了HEVC中的量化组QG概念。时一个矩形全区域,为一个划分子树包含的CU,同一个QG内所有的CU共享一个QP。由CU划分深度cbSubdiv的最大值Max_cbSubdic决定。

VVC中的QP依旧采用预测编码技术,只对QP与预测QP的插值进行编码,避免直接编码QP耗费的比特数。

QP的解析过程

  • 预测值的获取:由相邻已编码QG的QP信息得到。
  • 预测误差的解析:已QG为单元进行编码,每个QG包含一组deltaQP语法元素。
  • QP的计算:sliceQP由PPS层初始QP及Slice层或图像头中的QP偏移值都确定;QG的QP由预测QP和预测误差决定;亮度分量和色度分量的QP由色度亮度便宜关系、PPS层、Slice层QP偏移值的公式共同决定。

量化矩阵

使用量化矩阵,原理是对不同位置的系数使用不同的量化步长。

VVC中,量化矩阵作用于比例缩放过程,大小与TU相同,在比例缩放过程中DCT系数与对应位置的量化矩阵系数相除,然后再输出到量化模块。(变换-比例缩放-量化)。允许标准推荐使用的量化矩阵(2x2\4x4\8x8这3种,大于8由8x8上采样得到)和用户自定义的量化矩阵(根据帧间帧内模式、分量性质、变换块尺寸、定义了27种种量化矩阵)。

允许量化矩阵中的元素差分编码器啊,大于8x8的情况,只编码64个元素,其余上采样得到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2812919.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

java中容器继承体系

首先上图 源码解析 打开Collection接口源码&#xff0c;能够看到Collection接口是继承了Iterable接口。 public interface Collection<E> extends Iterable<E> { /** * ...... */ } 以下是Iterable接口源码及注释 /** * Implementing this inte…

代码随想录Leetcode474. 一和零

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; class Solution { public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数&#xff0c;上限m; [j]表示 1 的个数&#xff0c;上限nvector<vector…

Project_Euler-13 题解

Project_Euler-13 题解 题目 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 2306758820753934617117198…

备战蓝桥杯Day17 - 链表

链表 基本概念 链表是由一系列节点组成的元素集合。 每个节点包含两部分&#xff1a;数据域 item 、指向下一个节点的指针 next 通过节点之间的相互链接&#xff0c;形成一个链表 1. 链表的初始化 # 手动建立链表 # 链表的初始化 class Node(object):def __init__(self, …

超声波气泡传感器检测原理

超声气泡传感器 超声波气泡传感器利用超声波在液体和气体中的声阻抗不同的原理来实现对气泡或液体的识别和检测。它具有体积小、重量轻、使用寿命长、检测灵敏度高、响应速度快等优点&#xff0c;广泛应用于医疗、化工、食品和环保等领域。 检测原理&#xff1a; 超声波气泡…

【ArcGIS】基于DEM/LUCC等数据统计得到各集水区流域特征

基于DEM/LUCC等数据统计得到各集水区流域特征 提取不同集水区各类土地利用类型比例步骤1&#xff1a;划分集水区为独立面单元步骤2&#xff1a;批量掩膜提取得到各集水区土地利用类型比例步骤3&#xff1a;导入各集水区LUCC数据并统计得到各类型占比 提取坡度特征流域面坡度河道…

【网络那些事】

【云计算】 云计算&#xff1a;把计算资源放在某个地方&#xff0c;并通过互联网暴露出来&#xff0c;让用户可以按需使用计算资源的方式&#xff0c;就是所谓的云计算 云计算的三种服务&#xff1a; 云平台专业名词 日常叫法 亚马逊云叫法 虚拟机 EC2 &#xff08;Elasti…

GPT润色指令

1. GPT润色指令 Below is a paragraph from an academic paper. Polish the writing to meet the academic style,improve the spelling, grammar, clarity, concision and overall readability. When necessary, rewrite the whole sentence. Paragraph &#xff1a;你的句子…

初谈软件工程(一)

我就读于兰州交通大学的软件工程专业。虽然在全国众多的985、211高校中&#xff0c;兰州交通大学可能并不显眼&#xff0c;似乎未能跻身这些所谓的“顶尖”行列就意味着不被认可。然而&#xff0c;在甘肃省的教育领域中&#xff0c;它无疑是一座璀璨的明珠&#xff0c;名列前茅…

Apache-Camel中的Quartz定时任务

需求&#xff1a;在camel的基础上增加两个定时任务&#xff0c;一个需要发邮件&#xff0c;一个只需要简单调用存储过程并拿回数据记录日志即可 package com.hkt.it.ds.dmg.eip.route;import java.util.List;import com.xxx.DmgCamelRouteConfig; import com.xxx.DmgCamelRout…

全面介绍HTML的语法!轻松写出网页

文章目录 heading(标题)paragraph(段落)link(超链接)imagemap(映射)table(表格)list(列表)layout(分块)form(表单)更多输入:datalistautocompleteautofocusmultiplenovalidatepatternplaceholderrequired head(首部)titlebaselinkstylemetascriptnoscript iframe HTML&#xff…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

NVM存储设备MTBF介绍

1. 概念 1.1. MTBF MTBF(Mean Time Between Failure)&#xff0c;平均故障间隔时间&#xff0c;也被称为平均无故障时间&#xff0c;是衡量一个产品的可靠性指标&#xff0c;其单位为小时。其定义为&#xff1a;产品在总的使用阶段累计工作时间与故障次数的比值&#xff1a; …

【加密算法】AES对称加密算法简介

目录 前言 工作原理 SubBytes ShiftRows MixColumns AddRoundKey 应用场景 在Java中使用AES 加密和解密数据 注意事项和最佳实践 结论 前言 AES&#xff08;Advanced Encryption Standard&#xff09;是一种对称加密算法&#xff0c;它在密码学中被广泛应用。AES取代…

如何将本地项目上传到github上

将本地项目上传到github上有很多种方法&#xff0c;这里只讲述我认为最简单快捷的一种&#xff0c;先在github中创建一个仓库&#xff0c;接着在本地建文件夹&#xff0c;用命令行将项目推送到本地仓库&#xff0c;然后连接远程仓库&#xff0c;将本地项目推送到远程仓库上。要…

数学建模【相关性模型】

一、相关性模型简介 相关性模型并不是指一个具体的模型&#xff0c;而是一类模型&#xff0c;这一类模型用来判断变量之间是否具有相关性。一般来说&#xff0c;分析两个变量之间是否具有相关性&#xff0c;我们根据数据服从的分布和数据所具有的特点选择使用pearson&#xff…

分布式ID生成方案详解

✨✨ 祝屏幕前的您天天开心 &#xff0c;每天都有好运相伴。我们一起加油&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 一. UUID&#xff08;Universally …

开发者利器: 从 Amazon CodeWhisperer 到 Amazon Q

自 ChatGPT 火爆以来&#xff0c;生成式 AI 助手也是层出不穷&#xff0c;目前自然是以 Microsoft Copilot&#xff08;基于 GPT&#xff09;普及度最高了吧。看着微软风光了这么久&#xff0c;其他云厂商怎么可能会甘愿落后&#xff1f; 最近&#xff0c;来自亚马逊云科技的 …

阿里云国际云解析DNS如何开启/关闭流量分析?

流量分析服务会涉及产生日志费用&#xff0c;所以开通内网DNS解析服务后&#xff0c;默认不会主动开启流量分析&#xff0c;需要您手动开启流量分析。对于未开启流量分析的用户&#xff0c;进入界面会提示您展示的都是模拟数据&#xff0c;您可以点击开启流量分析服务&#xff…

B站项目-基于Pytorch的ResNet垃圾图片分类

基于Pytorch的ResNet垃圾图片分类 项目链接 数据集下载链接 1. 数据集预处理 1.1 画图片的宽高分布散点图 import osimport matplotlib.pyplot as plt import PIL.Image as Imagedef plot_resolution(dataset_root_path):image_size_list []#存放图片尺寸for root, dirs, fi…