【视频编码\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.hqwc.cn/news/454414.html

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

相关文章

爬虫实战--爬取简单文字图片并保存到mongodb数据库

文章目录 前言发现宝藏 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们…

UE中对象创建方法示例和类的理解

对象创建方法示例集 创建Actor示例 //创建一个护甲道具 AProp* armor GetWorld()->SpawnActor<AProp>(pos, rotator); 创建Component示例 UCapsuleComponent* CapsuleComponent CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent&qu…

EasyX图形库学习(一、窗口创建函数initgraph、背景颜色设置setbkcolor、图形绘制函数)

目录 一、easyX图形库基本介绍 1、easyX的原理 2、easyX的安装 3、easyX的颜色&#xff08;RGB颜色模型&#xff09; 颜色模型相关函数: 4、easyX的坐标 二、相关函数介绍: 绘图设备相关函数&#xff1a; 图形颜色及样式设置相关函数: 图形绘制相关函数: 文字输出相关…

机器学习基础、数学统计学概念、模型基础技术名词及相关代码个人举例

1.机器学习基础 &#xff08;1&#xff09;机器学习概述 机器学习是一种人工智能&#xff08;AI&#xff09;的分支&#xff0c;通过使用统计学和计算机科学的技术&#xff0c;使计算机能够从数据中学习并自动改进性能&#xff0c;而无需进行明确的编程。它涉及构建和训练机器…

【开源】基于JAVA+Vue+SpringBoot的陕西非物质文化遗产网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 设计目标2.2 研究内容2.3 研究方法与过程2.3.1 系统设计2.3.2 查阅文献2.3.3 网站分析2.3.4 网站设计2.3.5 网站实现2.3.6 系统测试与效果分析 三、系统展示四、核心代码4.1 查询民间文学4.2 查询传统音乐4.3 增改传统舞…

蓝桥杯每日一题-----数位dp练习

题目 链接 参考代码 写了两个&#xff0c;一个是很久以前写的&#xff0c;一个是最近刚写的&#xff0c;很久以前写的时候还不会数位dp所以写了比较详细的注释&#xff0c;这两个代码主要是设置了不同的记忆数组&#xff0c;通过这两个代码可以理解记忆数组设置的灵活性。 im…

文件上传总结:用原生解决前端文件上传操作(单个,多个,大文件切片)

目录 第一章 前言 第二章 理解文件上传的对象 2.1 如何利用原生实现 2.2 认识理解文件上传的四个对象 2.2.1 file对象 2.2.2 blob对象 2.2.3 formData对象 2.2.4 fileReader对象 2.2.4.1 了解fileReader对象基本属性 2.2.4.2 了解 fileReader对象基本方法 2.2.4.3…

Spring Web Header 解析常见错误

在上一章&#xff0c;我们梳理了 URL 相关错误。实际上&#xff0c;对于一个 HTTP 请求而言&#xff0c;URL 固然重要&#xff0c;但是为了便于用户使用&#xff0c;URL 的长度有限&#xff0c;所能携带的信息也因此受到了制约。 如果想提供更多的信息&#xff0c;Header 往往…

【问题篇】activiti通过修改表手动退回流程

背景&#xff1a;在利用activi完成开发项目开发后&#xff0c;假设某一个正常走的流程功能用户想要回退到某一个环节去&#xff0c;重新审核或者编辑表单&#xff0c;我们在处理运维工作时经常会遇到这种情况&#xff0c;下面针对这种情况&#xff0c;记录一下自己的处理方式&a…

WordPress从入门到精通【安装部署】

初识WordPress WordPress&#xff0c;简称WP&#xff0c;其简称的由来是取英文单词“word”与“press”的首字母 WP中文官网 1WP主站&#xff08;英文&#xff09; 官方标称&#xff0c;已有43%的网站在使用WordPress WordPress亮点 WP使用PHP语言开发&#xff0c;兼容性极…

状态压缩 笔记

棋盘式的f[i][j]中表示状态的j可以是状态本身也可以是在合法状态state中的下标 用状态本身比较方便&#xff0c;用下标比较省空间 用下标的话可以开id[M]数组记录一下 蒙德里安的梦想 求把 NM的棋盘分割成若干个 12的长方形&#xff0c;有多少种方案。 例如当 N2&#xff0…

你居然告诉我VB6释放资源文件有BUG,官方都没得办法修复,还好我最后搞定了!

网管小贾 / sysadm.cc 告诉大家一个坏消息&#xff0c;我又遇到了问题。 再告诉大家一个好消息&#xff0c;我把问题给解决了&#xff01; 哈哈&#xff0c;没错&#xff0c;前不久我遇到了一个奇葩问题&#xff0c;头毛都快掉完了&#xff0c;现在很怕别人对我说“谢”字&am…