【视频编码\VVC】变换编码基础知识及标准设计相关参数

变化编码的基础知识

定义:变换编码是将以空间域像素形式描述的图像转换至变换域,以变换系数的形式加以表示。

大部分图像都包含较多平坦区域和内容变化缓慢的区域,使得图像能量在空间域的分散转换为变换域的相对集中分布,从而达到空间去冗余的目的。

变换概述

选用DCT变换的原因:DCT形式与输入信号无关并且存在快速实现算法,并且性能接近K-L变换。

  • H.264第一次使用了整数DCT
  • H.265沿用了整数DCT,进行了不同尺寸的变换形式,还引入了离散正弦变换
  • H.266同时采用了DCT和DST,并且采用了多种基函数的变换形式,拓展了变换的尺寸(可分为8种类型,但是DCT-2因其较低的计算复杂度和相对高的编码效率,一直是核心变换技术)

离散余弦变换

下图给出了二维4X4的DCT-2基图像。当k=0,l=0的时候,水平分量和垂直分量的频率都等于10,此时图像平坦,在任何地方上都没有灰度值的变化。右下角表示像素灰度在水平方向和垂直方向发生连续变化。不同类型的DCT,其基图像不同,与原图像越相似,变换性能越好。

如果像素块包含较多细节纹理信息,则较多能量分布在高频区域。

实际上,大多数图像包含更多的低频分量,并且可以利用人眼对图像高频信息相对不敏感的特性,对低频系数进行较为精细的量化和处理,更好的压缩图像。

整数离散余弦变换

余弦函数的使用使DCT过程必须处理浮点数,这样不可避免会带来舍入误差导致编解码失配。并且整型使得DCT处理速度大大提高。

二维DCT 可以分解为两个一维DCT,将变换矩阵整数化,同时为了保持正交性,对整数化后的元素进行微调。同时乘以修正系数,防止值的扩大。乘法操作在量化中实现。

  • VVC中使用了8、16、32、64这四种DCT-2
  • 4、8、16、32这四种DCT-8

蝶形算法

哈达玛变换

H.264种规定了哈达玛变换,与离散余弦变换相比,哈达玛变换仅包含加法运算,可使用递归形式快速实现,并且正反变换具有相同的形式,算法复杂度低,且容易实现。

但自H.265起,标准不在使用该变换,但其在图像编码中有其他的应用,常用于计算残差信号的SATD,指将残差信号进行哈达玛变换后,再求各元素的绝对值之和。根据实验,发现残差的SATD与其经过DCT后的系数的绝对值之和十分的接近,说明SATD能在一定程度上反映残差再频域中的大小。因此被广泛使用在快速模式的选择上。

VVC中的变换编码

VVC摒弃了独立于编码单元CU的变换但与TU,即TU与CU一致,除非CU尺寸大于最大变换块尺寸。并且支持MxN的变换块。

采用的新技术

  • 多核选择MTS,4种变换核的组合,以适应图像的不同残差特性
  • 子块变换SBT,只针对CU的子块进行变换和后续处理,其他部分残差信号直接设置为0
  • 色度残差联合编码JCCR,针对两个色度分量进行旋转变换处理,去除局部性
  • 低频不可分变换LFNST,采用特定的变换矩阵对变换系数进行二次变换

主变换

多核变换选择

收预测模式的影响,预测残差会有不同的特性。通常情况下,帧内残差随着与参考点距离的增大而增大,越接近CU边缘越大。用不同的变换核处理不同的残差。

多核变换选择引入了4种变换核组合,与传统DCT-2一起作为主变换的候选,以适应不同内容特性。

高频调零

将变换后的部分高频系数设置为0,仅保留低频系数。

子块变换

当同一CU包含不同内容的时候哦,运动补偿不同,包含的残差信息不同。所以允许只对部分区域的预测残差进行变换。将CU划分为两个TU,只对其中一个进行变换、量化,另一个预测残差强制设置为0。总共有8种SBT模式。

色度残差联合编码

在传统变换之前,先对CB\CR分量使用分量间变换技术,对相同位置的两个色度分量进行变换,去除色度分量间的相关性。旋转变换。

二次变换

二次变换只针对帧内模式,并且主变换为DCT-2的情形,只对主变换系数的低频分量进行不可分变换。因为随着预测模式的变化,尤其是使用方向预测的时候,预测残差具有方向性,变换后的低频分量依旧具有

H.266引入了一种低频不可分变换LFNST技术。

  • 不可分变换F=T*Y_j
  • 只处理主变换系数的低频部分,剩余主变换系数被置0
  • 为了降低计算复杂度、减少存储变换矩阵所需要的空间,采用了简化不可分变换的方法RT,将一个N维向量映射到不同空间的R维向量上
  • 变换核是通过离线训练的方式得到的。因为不同的预测模式有不同的变换集,所以需要对35个帧内预测模式进行训练。最终采用了4个变换集,每个包含2个变换核的方案。

VVC变换编码的标准设计与相关参数

主变换的标准实现

多核变换选择

多核变换选择MTS分为隐式MTS和显式MTS,区别在于隐式MTS根据固定规则判断确定MTS变换核。

  • 显式MTS

sps层上,sps_mts_enabled_flag表示是否允许使用MTS

sps_explicit_mts_intra_enabled_flag帧内显式MTS

sps_explicit_mts_inter_enabled_flag帧间显式MTS

  • 隐式MTS

满足下列3个条件种任意一个就会启用隐式MTS

当前CU的ISP为水平划分或垂直划分

当前CU使用了SBT,并且CU的宽和高最大值不超过32

帧内显示MTS被禁用,CU预测模式为帧内预测模式,不启用低频不可分变换,且不启用帧内MIP。

启用隐式MTS的时候,使用的变换核也按照一定规则选取。

启用显示MTS,CU层的mts_idx标识MTS所选最优变换核。

相关语法元素

sps_transform_skip_enabled_flag是否启用变换跳过模式

sps_log2_transform_skip_max_size_minus2变换跳过模式的变换块最大尺寸为以2为底的对数值减2,取值范围0-3

sps_max_luma_transform_size_64_flag亮度块最大变换尺寸式64还是32

transform_skip_flag当前变换块是否启用变换跳过模式

子块变换

sps_sbt_enabled_flag子块变换SBT启用标识

CU层的cu_sbt_flag标识当前CU是否进行SBT

子块划分具有垂直划分(SBT-V)和水平划分(SBT-H)两种方式。有1:2、1:3、2:2的划分。划分后的TU有两种位置,即position0(左块和上块)和position1(右块和下块)。

2:2的划分宽度要大于等于8,1:3的CU要大于等于16。连读块的SBT变换核由子块划分方式和所选位置决定。

相关语法元素

cu_sbt_quad_flag标识当前子块的划分方式,1表示1:3划分,0表示2:2划分

cu_sbt_pos_flag标识当前选择的子块位置,1表示第2个子块,0表示第一个子块

cu_sbt_horizontal_flag当前子块划分当时,1表示水平划分,0表示垂直划分

色度残差联合编码

sps_joint_cbcr_enabled_flag表示视频序列是否启用色度残差俩呢编码JCCR。帧内CU的tu_cb_coded_flag\tu_cr_coded_flag至少一个为1,如果都为1,传输tu_joint_cbcr_residual_flag

VVC支持6种旋转变换,用m来定义6种角度模式。旋转角度的正负由ph_joint_cbcr_sign_flag表示。

二次变换的标准实现

VVC支持8x8\4x4两种尺寸的LFNST

  • 使用哪种尺寸的LFNST由TU尺寸隐式判断
  • 变换集的选择由帧内预测模式隐式判断
  • 变换核的选择由显式信号1fnst_idx决定,标识是否使用LFNST及使用时的变换核索引

选择流程如下

帧内预测模式与变换集一一对应,给出索引PredModeIntra标志帧内预测模式,取值为【-14,80】时的对应变换集。如果包含宽角度在内,为【-14,83】。

在sps层上,sps_1fnst_enabled_flag标识是否使用LFNST,1表示启用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法学习——华为机考题库10(HJ64 - HJ69)

算法学习——华为机考题库10(HJ64 - HJ69) HJ64 MP3光标位置 描述 MP3 Player因为屏幕较小,显示歌曲列表的时候每屏只能显示几首歌曲,用户要通过上下键才能浏览所有的歌曲。为了简化处理,假设每屏只能显示4首歌曲&a…

基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道

基于MATLAB实现的OFDM仿真调制解调,BPSK、QPSK、4QAM、16QAM、32QAM,加性高斯白噪声信道、TDL瑞利衰落信道 相关链接 OFDM中的帧(frame)、符号(symbol)、子载波(subcarriers)、导频…

数据库管理-第144期 深入使用EMCC-01(20240204)

数据库管理144期 2024-02-04 数据库管理-第144期 深入使用EMCC-01(20240204)1 用户管理2 配置告警动作3 配置意外事件规则总结 数据库管理-第144期 深入使用EMCC-01(20240204) 作者:胖头鱼的鱼缸(尹海文&am…

大创项目推荐 题目:基于深度学习的人脸表情识别 - 卷积神经网络 大创项目推荐 代码

文章目录 0 简介1 项目说明2 数据集介绍:3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…

vscode1.86无法远程连接waiting the server log

问题 vscode升级到最新的1.86版本后,无法远程连接服务器Remote SSH,在log中提示如下: 观察下面的log提示可得: glibc的版本好像不符合vscode1.86版本的要求。你可以在你的服务器上运行下面的指令查看glibc的版本: …

【计算机网络】物理层概述|通信基础|奈氏准则|香农定理|信道复用技术

目录 一、思维导图 二、 物理层概述 1.物理层概述 2.四大特性(巧记"械气功程") 三、通信基础 1.数据通信基础 2.趁热打铁☞习题训练 3.信号の变身:编码与调制 4.极限数据传输率 5.趁热打铁☞习题训练 6.信道复用技术 推荐 前些天发…

服务器端会话技术-Session

一、Session 1.1 概述和快速入门 概述:Session 是服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中 快速入门 获取 HttpSession 对象使用 HttpSession 对象 常用方法 方法作用HttpSession request.getSe…

图像处理常用算法介绍

此篇简单回顾下图像处理领域常用到的一些算法,这边只对每个知识点重要的点做一些记录,便于快速的知其形,会其意。 一. SIFT(Scale-Invariant feature transform)特征 重点是了解DOG(Difference of Gaussian)高斯差分图像是如何生…

ubuntu离线安装k8s

目录 一、前期准备 二、安装前配置 三、安装docker 四、安装cri-dockerd 五、部署k8s master节点 六、整合kubectl与cri-dockerd 七、网络等插件安装 八、常见问题及解决方法 一、前期准备 ①ubuntu系统 本地已安装ubuntu系统,lsb_release -a命令查看版本信…

2024网络安全学习路线,最全保姆级教程,学完直接拿捏!

关键词: 网络安全入门、渗透测试学习、零基础学安全、网络安全学习路线 首先咱们聊聊,学习网络安全方向通常会有哪些问题 前排提示:文末有CSDN独家网络安全资料包! 1、打基础时间太长 学基础花费很长时间,光语言都…

Windows10安装PCL1.14.0及点云配准

一、下载visual studio2022 下载网址:Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 安装的时候选择"使用C的桌面开发“,同时可以修改文件路径,可以放在D盘。修改文件路径的时候,共享组件、…

Open CASCADE学习|拉伸

目录 1、沿方向拉伸 2、沿路径拉伸 3、变形拉伸 1、沿方向拉伸 #include <Geom_CylindricalSurface.hxx> #include <gp_Ax3.hxx> #include <GeomAPI_Interpolate.hxx> #include <BRepAdaptor_Curve.hxx> #include <BRepBuilderAPI_MakeEdge.hxx&…

追觅发布多款旗舰新品,双机械臂扫地机器人X40领衔登场

2月2日&#xff0c;追觅科技全球首创仿生“双”机械臂新品发布会在苏州举行。会上&#xff0c;追觅科技中国区总裁郭人杰分享了追觅科技全球化发展的业绩成果。郭人杰称&#xff0c;2019-2023年&#xff0c;追觅科技5年复合年增长率超过100%&#xff0c;增速领跑智能清洁行业&a…

LeetCode、746. 使用最小花费爬楼梯【简单,动态规划 线性DP】

文章目录 前言LeetCode、746. 使用最小花费爬楼梯【简单&#xff0c;动态规划 线性DP】题目与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。…

python的进程,线程、协程

python进程的实现 #coding:utf-8 from multiprocessing import Process import timedef run(name):print(%s is running % name)time.sleep(3)print(%s finished his run % name)if __name__ __main__:p Process(targetrun, args(XWenXiang,)) # 创建一个进程对象p.start()…

Redis(十二)Bigkey

文章目录 游标案例生成100万测试数据key生产上限制keys */flushdb/flushall等危险命令不使用keys *&#xff1a;scan Biigkey案例多大算大发现bigkey渐进式删除生产调优示例问题 游标案例 生成100万测试数据key shell: for((i1;i<100*10000;i)); do echo "set k$i v…

Nicn的刷题日常之调整奇数偶数顺序

目录 1.题目描述 2.解题思路 3.解题 1.题目描述 输入一个整数数组&#xff0c;实现一个函数&#xff0c; 来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分&#xff0c; 所有偶数位于数组的后半部分。 2.解题思路 1. 给定两个下标left和right&#xff…

手拉手spring-boot-starter-mail实现发送QQ邮箱

技术栈 springbootmybatis-plusmysql 软件 版本 IDEA IntelliJ IDEA 2022.2.1 JDK 17 Spring Boot 3.1 mybatis-plus 3.5 spring-boot-starter-mail Springboot版本 spring boot对mail的封装支持非常好&#xff0c;方便&#xff0c;几行代码就可以把邮件集成进来…

调用Gensim库训练Word2Vec模型

一、前期工作&#xff1a; 1. 安装Gensim库 pip install gensim 2.安装chardet库 pip install chardet 3. 对原始语料分词 选择《人民的名义》的小说原文作为语料&#xff0c;先采用jieba进行分词 import jieba import jieba.analyse import chardet jieba.suggest_freq…

Sklearn、TensorFlow 与 Keras 机器学习实用指南第三版(三)

原文&#xff1a;Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 第六章&#xff1a;决策树 决策树是多功能的机器学习算法&#xff0c;可以执行分类和回归任务&#xff0c;甚至多输出任务。它们…