【视频编码\VVC】多样化视频编码工具了解

除了通用编码工具,VVC还针对特定特性的全景视频、屏幕视频开发了特定的编码工具。

全景视频编码

360度全包围视角的球面视频。为了采用传统的视频编码,全景视频需要转换为平面视频,经纬度等角映射(ERF)、立方体映射(CMP)是常用的格式。

水平环绕补偿

ERP格式全景视频的左右边界是连续的,所以当编码到参考图像边界的时候,可以使用图像右侧像素对左侧像素进行填充。适用于其他左右边界连续的格式,如等面积映射。

水平环绕偏移值:

offset = W-pps_pic_width_minus_wraparound_offset*MinCbSizeY

虚拟边界取消环路滤波

多面投影是将球面全景视频投影在多个平面上,为了采用平面视频编码算法,通常将多个面拼接成一个矩形图像,但是不可避免会出现在某些相邻投影面之间出现图像内容不连续现象。如果对这些不连续边界使用环路滤波,会在重建视频中出现拼接伪影。VVC允许对边界禁用环路滤波。

屏幕内容视频编码

是一种特殊的视频类型,由计算机生成。不受物理限制,不存在传感器噪声,常含有更少的颜色类型、更多的重复图形、更锐利的物体边缘,场景切换也在屏幕内容视频中频繁出现。

帧内块复制(IBC)

不再将参考区域限制在相邻像素行,可以利用当前帧所有已编码区域,预测待编码CU。

使用块矢量(block vector,BV)来面熟当前CU与匹配区域的位移。

IBC Merge模式的块矢量候选列表通过空域块矢量和历史块矢量构建,记为bvCandList。按照空域块矢量、历史块矢量、零值块矢量来维护。

VTM中的编码端IBC运动搜索使用了两种模式:哈希搜索和指定局部搜索范围。

为了降低复杂度,对帧内块复制的参考区域进行了限制,只有位于当前CTU及当前CTU左侧的CTU的部分区域可以作为参考区域。

变换跳过模式的残差编码

直接对CU的预测残差进行量化和熵编码。与之相关,熵编码与非变换跳过模式有区别。只对宽和高都小于MaxTsSize的CU使用。

块差分脉冲编码调制

H.265中PCM模式,编码器直接对CU的像素值进行量化熵编码,不经过预测和变换模块、

VVC中,针对屏幕内容,采用了块差分脉冲编码调制(BDPCM)模式,对完成帧内预测后,直接进行量化,然后对量化预测残差按预测方向进行差分脉冲编码。

  • 使用帧内预测的水平模式或垂直模式得到预测值,预测过程使用未滤波的参考像素
  • 求亮度值与预测值的差,得到预测误差。对预测误差进行量化,得到预测误差的量化值
  • 根据预测方向,对预测误差的量化值进行差分编码。

调色板模式

屏幕视频的像素值经常集中在少量颜色。在调色板模式下,编解码端维护一个称为调色板的颜色列表,当像素值等于或接近调色板中的某一颜色时,编码端只需要编码该颜色索引。可以使用长度较短的调色板完成像素信息描述,提高编码效率。

  • 通过简化的K聚类方法初步生成调色板:计算当前点与当前调色板中每个颜色的SAD,找到调色板中与当前样点SAD值最小的颜色,作为当前样点的预测值,SAD作为预测误差
  • 对调色板进行进一步调整:通过率失真决策,判断是否使用调色板预测列表中的某个颜色作为聚类中心
  • 对调色板颜色重新排序:生成调色板索引表

需要对调色板进行维护和更新,对调色板索引的编码类似系数编码,按照系数组(CG)进行编码,可以采用水平扫描模式或垂直扫描模式进行。

  • 编码调色板:编码复用标志列表,来描述预测列表中的颜色是否在调色板中出现,对不在预测列表中的颜色数量,依次编码各颜色
  • 编码调色板索引:遍历每个系数组中每个位置的索引
  • 更新预测列表:简历空的新预测列表,并将当前调色板中的颜色依次加入新预测列表。

自适应色度变换(ACT)

VVC针对4:4:4颜色格式(削弱颜色失真效应)的视频,使用颜色转换模块,将视频信息转换到YCgCo颜色空间,进行变换、量化、熵编码等操作。

YCgCo颜色空间的优点

  • 具有接近KL变换的编码性能
  • 与RGB颜色空间的转换可逆
  • 支持有损压缩和无损压缩
  • 只包含移位和加法运算,计算复杂度低

因为颜色空间分量的动态范围不同,所以量化参数需要进行相应调整。

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

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

相关文章

PostgreSQL操作笔记

基础操作 数据库相关 -- 查看所有数据库 \l-- 切换到指定数据库 \c 库名-- 查看库中所有表 \d执行SQL脚本 如果有现成的SQL脚本: \i 脚本路径路径一般需要用单引号引起来。 如果需要当场编辑一次性的SQL脚本,可以: \e执行上述命令后会进…

GC机制以及Golang的GC机制详解

要了解Golang的GC机制,就需要了解什么事GC,以及GC有哪几种实现方式 一.什么是GC 当一个电脑上的动态内存不再需要时,就应该予以释放,以让出内存,这种内存资源管理,称为垃圾回收(Garbage Collection)&#x…

最长上升子序列(LIS)简介及其例题分析

一.最长上升子序列(LIS)的相关知识 1.最长上升子序列(Longest Increasing Subsequence),简称LIS,也有些情况求的是最长非降序子序列,二者区别就是序列中是否可以有相等的数。假设我们有一个序…

【论文笔记】Initializing Models with Larger Ones

Abstract 介绍权重选择,一种通过从预训练模型的较大模型中选择权重子集来初始化较小模型的方法。这使得知识从预训练的权重转移到更小的模型。 它还可以与知识蒸馏一起使用。 权重选择提供了一种在资源受限的环境中利用预训练模型力量的新方法,希望能够…

代码随想录Day67 | 695.岛屿的最大面积 1020.飞地的数量

代码随想录Day67 | 695.岛屿的最大面积 1020.飞地的数量 695.岛屿的最大面积1020.飞地的数量 695.岛屿的最大面积 文档讲解:代码随想录 视频讲解: 状态 采用bfs,这道题相较于之前的题变为了求岛屿的最大面积。那就说明我们每遇到一个新的岛屿…

【Linux】软件管理yum | 编辑器vim | vim插件安装

目录 1. Linux软件管理yum 1.1 什么是软件包 1.2 查看软件包 1.3 如何安装软件 1.4 如何卸载软件 2. Linux编辑器vim 2.1 vim的基本概念 2.2 vim的基本操作 2.3 vim正常模式命令集 2.4 vim末行模式命令集 2.5 简单vim配置 2.6 插件安装 1. Vim-Plug 3. coc.nvim …

如何自己系统的学python

学习Python是一项很好的投资,因为它是一种既强大又易于学习的编程语言,适用于多种应用,如数据分析、人工智能、网站开发等。下面是一个系统学习Python的步骤建议: 基础准备 安装Python: 访问Python官网下载最新版本的…

微服务获取当前登录用户信息

一,实现思路 1,基于JWT令牌登陆方式 JWT实现登录的,登录信息就保存在请求头的token中。因此要获取当前登录用户,只要获取请求头,解析其中的token。 1),Gateway网关拦截,解析用户信…

微信小程序-生命周期

页面生命周期 onLoad: 页面加载时触发的方法,在这个方法中可以进行页面初始化的操作,如获取数据、设置页面状态等。 onShow: 页面显示时触发的方法,在用户进入页面或从其他页面返回该页面时会调用此方法。可以在此方法中进行页面数据刷新、动…

Onenote软件新建笔记本时报错:无法在以下位置新建笔记本

报错现象: 当在OneNote软件上,新建笔记本时: 然后,尝试重新登录微软账户,也不行,提示报错: 解决办法: 打开一个新的记事本,复制粘贴以下内容: C:\Users\Adm…

Mysql中的事务

什么是事务: 多条sql语句,要么全部成功,要么全部失败。 事务的特性: 1:原子性(Atomic): 组成一个事务的多个数据库操作是一个不可分割的原子单元,只有所有操作都成功,整个事务才会…

在Unity中模拟实现手势识别功能

在虚拟现实(VR)和增强现实(AR)的应用开发中,手势识别技术扮演着至关重要的角色,它允许用户以自然的方式与虚拟世界进行交云。然而,并非所有开发者都有条件使用真实的手势识别硬件。本文介绍了如何在Unity中通过模拟的方式实现一个简单的手势识…

【LeetCode】1768_交替合并字符串_C

题目描述 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 https://leetcode.cn/problems/merge-strings-al…

C++调用lua函数

C 调用Lua全局变量(普通) lua_getglobal(lua, "width");int width lua_tointeger(lua,-1);lua_pop(lua,1);std::cout << width << std::endl;lua_close(lua); 这几行代码要放到lua_pcall(lua, 0,0,0);之后才可以. C给lua传递变量 lua_pushstring(lua, …

Python 操作 Excel,如何又快又好?

➤数据处理是 Python 的一大应用场景&#xff0c;而 Excel 则是最流行的数据处理软件。因此用 Python 进行数据相关的工作时&#xff0c;难免要和 Excel 打交道。Python处理Excel 常用的系列库有&#xff1a;xlrd、xlwt、xlutils、openpyxl ◈xlrd &#xff0d; 用于读取 Exce…

点云从入门到精通技术详解100篇-基于点云网络和 PSO 优化算法的手势估计(续)

目录 3 深度图像处理及转化 3.1 双目深度摄像原理及深度图的获取 3.1.1 理想化双目深度相机成像

day47_servlet

今日内容 0 复习昨日 1 接收请求 2 处理响应 0 复习昨日 HTTP请求中 请求行 请求方法,请求路径 请求头 页面信息 请求正文 请求的数据 HTTP响应中 响应行 状态码 信息 响应头 页面信息 响应正文 要给浏览器的内容 1 接收请求 浏览器发出请求,经过web.xml映射匹配,找到Servlet…

STL容器之map和set

map和set ​ c98支持的是单参数的隐式类型转换&#xff0c;而c11支持多参数的隐式类型转换&#xff1b; 1.map和set的使用 1.1set ​ set实现key值不允许修改&#xff0c;是将iterator转变成const_iterator&#xff1b;可以对同一个类型typedef成两个不同的自定义标识符。即…

Rocky 9 安装 R-CytoTRACE

官网给出的详细指南&#xff0c;只是可能大家打不开或者懒得去看E文。 第一步&#xff0c;下载CytoTRACE安装包。 wget https://cytotrace.stanford.edu/CytoTRACE_0.3.3.tar.gz 第二步&#xff0c;打开R或者Rstudio-server # 安装依赖包 if (!requireNamespace("Bioc…

在vue中$nextTick 原理及作用

在vue中$nextTick 原理及作用 Vue 的 nextTick 其本质是对 JavaScript 执行原理 EventLoop 的一种应用。 nextTick 的核心是利用了如 Promise 、MutationObserver、setImmediate、setTimeout的原生 JavaScript 方法来模拟对应的微/宏任务的实现&#xff0c;本质是为了利用 Java…