【VVC】类和编码树了解

1. CodingStructure类

CodingStructure 类表示视频编码中的结构层次,用于存储编码单元(CU)、预测单元(PU)和变换单元(TU)等信息。

主要成员变量:

  • area: 表示当前编码单元的区域。
  • cus: 存储当前编码单元的列表。
  • pus: 存储当前预测单元的列表。
  • tus: 存储当前变换单元的列表。
  • sps, pps, slice: 存储序列参数集(SPS)、图像参数集(PPS)和切片(Slice)信息。
  • cost, dist, fracBits: 用于存储编码成本、失真度和编码比特。

主要成员函数:

  • init: 初始化编码结构。
  • clearCUs: 清除编码单元。
  • addCU, addPU, addTU: 添加编码单元、预测单元和变换单元。
  • getRecoBuf: 获取重建后的图像缓冲区。

2. Partitioner类

Partitioner 类用于管理图像划分的过程,包括划分编码单元(CU)、预测单元(PU)和变换单元(TU)。

主要成员变量:

  • modeType: 表示当前的模式类型(例如帧内模式或帧间模式)。
  • currArea: 表示当前划分区域。
  • chType: 表示当前处理的通道类型(亮度或色度)。

主要成员函数:

  • initCtu: 初始化编码树单元(CTU)。
  • splitCurrArea: 划分当前区域。
  • nextPart: 移动到下一个划分单元。

3. EncCu类

EncCu 类用于管理编码单元(CU)的编码过程。

主要成员变量:

  • m_CABACEstimator: CABAC编码器,用于熵编码。
  • m_CurrCtx: 当前上下文状态。
  • m_modeCtrl: 模式控制器,用于管理编码模式。

主要成员函数:

  • xCompressCU: 压缩编码单元。
  • xCheckRDCostIntra: 计算帧内模式的RD成本。
  • xCheckRDCostInter: 计算帧间模式的RD成本。

4. RdCost类

RdCost 类用于计算率失真成本(Rate-Distortion Cost)。

主要成员变量:

  • m_distParam: 失真参数。
  • m_costMode: 成本模式。

主要成员函数:

  • calcRdCost: 计算率失真成本。
  • getDistPart: 获取特定部分的失真度。

5. IntraSearch类

IntraSearch 类用于帧内预测的搜索和编码。

主要成员函数:

  • estIntraPredLumaQT: 估计亮度帧内预测的四叉树。
  • estIntraPredChromaQT: 估计色度帧内预测的四叉树。

6. InterSearch类

InterSearch 类用于帧间预测的搜索和编码。

主要成员函数:

  • motionCompensation: 运动补偿。
  • xEstimateMvPredAMVP: 估计运动矢量预测(AMVP)。

7. CABACEstimator类

CABACEstimator 类用于CABAC熵编码。

主要成员函数:

  • resetBits: 重置编码比特。
  • coding_unit: 编码单元。
  • getEstFracBits: 获取估计的比特数。

8. CA 视频编码中的树结构(编码树、SepTree、DualTree、Tree_D等)在视频压缩中起到了关键作用。它们是基于分层分割和预测策略,用于提高压缩效率和视频质量。以下是对这些概念的详细说明:

编码树(Coding Tree)

编码树是视频编码中用来表示和处理图像块的分层结构。编码树通常指的是编码树单元(CTU,Coding Tree Unit),是视频帧中最大的基本处理单元。

  • CTU(Coding Tree Unit):CTU是一种分层结构,通常大小为64x64像素,可以递归地划分成更小的编码单元(CU,Coding Unit)。
  • CU(Coding Unit):CTU可以划分成多个CU,CU是进行预测和变换的基本单元。CU的大小可以变化,通常是8x8到64x64的范围。

分割树(Partitioning Tree)

在编码过程中,CTU可以根据图像内容的复杂度进行分割,以提高压缩效率。分割树的概念包括QuadTree、SepTree、DualTree等。

QuadTree

四叉树(QuadTree)是一种数据结构,用于递归地将一个二维平面(如图像)划分为四个相等的子区域。四叉树在视频编码中非常重要,尤其是在高效视频编码(HEVC)和通用视频编码(VVC)标准中,用于编码单元(CU)的划分。

  • 四叉树划分:CTU可以递归地分割成四个子CU,直到达到最小CU大小。
SepTree

SepTree(Separate Tree)用于表示在不同的颜色分量上进行独立分割的树结构。在视频编码中,Y、Cb和Cr分量可以分别进行分割。

  • 分离树划分:Y、Cb、Cr分量分别进行QuadTree划分,这样可以更灵活地处理颜色信息。
DualTree

Separable Tree (SepTree) 是视频编码中一种用于灵活划分和处理编码单元(CU)的技术。它主要用于处理帧内(Intra)和帧间(Inter)预测时的不同需求,允许对亮度(Luma)和色度(Chroma)信号进行单独和独立的处理。

  • 独立划分:允许亮度(Luma)和色度(Chroma)信号独立划分和编码。
  • 灵活处理:可以对亮度和色度信号采用不同的预测模式和划分策略,提升编码效率和图像质量
  1. 帧内预测(Intra Prediction)

    • 在帧内预测中,亮度信号和色度信号可能有不同的纹理特征和需求。通过 Separable Tree,可以对亮度和色度信号分别进行最优的预测和编码。
  2. 帧间预测(Inter Prediction)

    • 在帧间预测中,运动补偿可能对亮度和色度信号有不同的影响。SepTree 可以独立处理亮度和色度信号的运动矢量,提高运动补偿的精度和效果。

Tree_D (多分辨率树)

Tree_D 或多分辨率树是一种用于更复杂视频编码场景的高级树结构。它允许在不同分辨率下进行自适应划分和编码。

  • 多分辨率划分:在不同分辨率下进行块划分,以更精细地捕捉视频内容的细节。
  • 应用场景:适用于高分辨率视频或复杂场景,需要更高的编码灵活性和效率。

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

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

相关文章

【SpringBoot】SpringBoot整合RabbitMQ消息中间件,实现延迟队列和死信队列

📝个人主页:哈__ 期待您的关注 目录 一、🔥死信队列 RabbitMQ的工作模式 死信队列的工作模式 二、🍉RabbitMQ相关的安装 三、🍎SpringBoot引入RabbitMQ 1.引入依赖 2.创建队列和交换器 2.1 变量声明 2.2 创建…

在群晖上通过Docker部署DB-GPT

最近一直有网友在后台私信,发的内容高度统一,只有后面 8 位数字不一样,都是 #22232 xxxxxxxx,有谁知道是什么意思吗?在我印象中,这是第二次这么大规模的发类似的字符串了 什么是 DB-GPT ? DB-G…

Linux lvm卷扩容之SSM

介绍 SSM(System Storage Manager)是系统存储管理器,它是一种统一的命令行界面,用于管理各种存储设备。通过SSM,用户可以方便地管理、配置和监控存储系统。检查关于可用硬驱和LVM卷的信息。显示关于现有磁盘存储设备、…

O2OA(翱途)开发应用平台(v9)开发实战(3)-如何做信息发布

内容管理就是用来发布信息的,比如说发布单位的内部信息:像公司新闻、通知公告、规章制度等等。 接下来我们来介绍一下如何创建,比如我要创建一个栏目,专门用来发布公司的规章制度 需求 规章制度 首先从菜单打开“内容管理设置…

平衡二叉树AVL

平衡二叉树是一种特殊的二叉查找树,其中每个节点的左右子树的高度差不超过1。这种树的平衡性质使其在多种操作下保持较高的效率。 平衡二叉树的定义与性质 严格定义:在平衡二叉树中,任一节点的两个子树的高度最大差别为一,这使得…

node学习之常用内置模块

这里只列举一些常用的,具体使用方法请查看官网 一、os模块 const os require("node:os"); // 获取计算机cup信息 // console.log(os.cpus());// 获取当前操作系统的换行符 // console.log(os.EOL);// 获取系统架构 // console.log(os.arch());// 以整数…

Linux卸载RocketMQ教程【带图文命令巨详细】

巨详细Linux卸载RocketMQ教程 #查询rocketmq进程 ps -ef | grep rocketmq #杀掉相关进程 kill -9 进程id #查找安装目录 find / -name runbroker.sh #删除rocketMQ目录 rm -rf 安装目录框起来的就是进程id,全部杀掉 这里就是我的安装目录,我的删除命令…

SwiftUI五视图动画和转场

代码下载 使用SwiftUI可以把视图状态的改变转成动画过程,SwiftUI会处理所有复杂的动画细节。在这篇中,会给跟踪用户徒步的图表视图添加动画,使用animation(_:)修改器给一个视图添加动画效果非常容易。 下载起步项目并跟着本篇教程一步步实践…

Linux下tcpwrappers防火墙介绍

tcpwrappers&#xff08;防火墙&#xff09; &#xff0d;&#xff0d;过滤TCP包头(/usr/sbin/tcpd) /etc/hosts.allow 允许 /etc/hosts.deny 拒绝 匹配顺序 tcp包头----<wrappers.so> ------- /etc/hosts.allow ------- /etc/hosts.deny 匹配规则< 规则马上写&…

AI 写高考作文丨10 款大模型 “交卷”,实力水平如何?

前言 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;已不再是遥不可及的未来科技&#xff0c;而是逐渐融入我们日常生活的实用工具。从智能语音助手到自动驾驶汽车&#xff0c;从智能家居系统到精准医疗诊断&#xff0c;AI技术正以其强大的计算能力和数…

算法之链表知识

一、链表的概念 链表是一种常见的数据结构&#xff0c;用于存储数据元素的集合。它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。这种数据结构在动态内存分配中非常有用&#xff0c;因为它不需要连续的内存空间。 二、单向链表和双向链表 单向链表&a…

Rust基础学习-Rust宏

Rust中的宏是生成另一段代码的一段代码。可以根据输入生成代码&#xff0c;简化重复模式&#xff0c;使得代码更加简洁。比如我们一直在用的println!,vec!,panic!都是宏。 创建宏 可以使用macro_rules!创建一个宏&#xff1a; macro_rules! macro_name {(...) > {...} }这…

Java中类初始化的奥秘

一、概述 在 Java 语言中&#xff0c;类的加载、链接&#xff08;验证、准备、解析&#xff09;和初始化过程都是在程序运行期间完成的。 其中加载、验证、准备、初始化和卸载这五个阶段的顺序是确定的。解析阶段可以在初始化之前也可以在初始化之后再开始(又叫作运行时绑定、动…

c#与汇川plc通信 使用官网API库

前言 上位机开发中有时会要求与PLC进行通信&#xff0c;汇川官网也有好用的API库方便大家使用。记录一下开发过程。 1.下载资料 汇川官网地址&#xff1a;汇川技术 - 推进工业文明 共创美好生活 打开后选择&#xff1a;服务与支持-》资料下载-》 资料下载 这里可以直接搜索&am…

六级作文---3.图画类

六级作文—3.图画类 范文 As is illustrated in the graph, the share of urban population increased from 19.39% to 60.6% between 1980 and 2019. From my perspective, the above figures reveal a currently prevailing tendency and represent China’s achievements i…

C++学习插曲:“name“的初始化操作由“case“标签跳过

问题 "name"的初始化操作由"case"标签跳过 问题代码 case 3: // 3、删除联系人string name;cout << "请输入删除联系人姓名&#xff1a;" << endl;cin >> name;if (isExistPerson(&abs, name) -1){cout << "…

【刷题篇】分治-归并排序

文章目录 1、排序数组2、交易逆序对的总数3、计算右侧小于当前元素的个数4、翻转对 1、排序数组 给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 class Solution { public:vector<int> tmp;void mergeSort(vector<int>& nums,int left,int right){…

cocos creator3.7版本拖拽事件处理

前言&#xff1a;网上能找到的资料都太落后了&#xff0c;导致哥们用AI去写&#xff0c;全是瞎B写&#xff0c;版本都不对。贴点实际有用的。别老捣鼓你那破convertToNodeSpaceAR或者convertToNodeSpace了。 核心代码 touch.getDeltaX() touch.getDeltaY() 在cocoscreator3…

python-自幂数判断

[题目描述]&#xff1a; 自幂数是指&#xff0c;一个N 位数&#xff0c;满足各位数字N 次方之和是本身。例如&#xff0c;153153 是 33 位数&#xff0c;其每位数的 33 次方之和&#xff0c;135333153135333153&#xff0c;因此 153153 是自幂数&#xff1b;16341634 是 44 位数…

简单快速设置Windows和Ubuntu双系统双引导

一、参考资料 Windows和Ubuntu双系统安装教程 二、设置引导 1. 安装EasyBCD 下载并安装 EasyBCD 2. 设置Windows引导 3. 设置Ubuntu引导 4. 启动系统 遇到这种情况&#xff0c;直接Enter回车。 三、修复引导 如果引导区损坏&#xff0c;导致无法进入系统&#xff0c;可以…