H266/VVC帧间预测编码技术概述

news2025/2/4 4:05:55

帧间预测编码简述

  • 帧间预测利用视频时间域的相关性,使用邻近已编码图像像素值预测当前图像的像素值,能有效去除视频时域冗余。

  • 目前主要的视频编码标准中,帧间预测都采用基于块的运动补偿技术,不同的编码标准有不同的分块方式。

  • 为当前图像的每个像素块在之前已编码图像找到一个最佳匹配块,这个寻找过程就称为运动估计(Motion Estimation,ME)

  • 用于预测的图像被称为参考图像或参考帧(Reference Picture)

  • 最佳匹配块到当前块的位移被称为运动矢量(Motion Vector,MV)

  • 当前块与参考块的像素差值被称为预测残差(Prediction Residual)

  • MV预测残差信息会编入码流并传递到解码端。

  • 为当前块在参考图像中寻找一个最佳匹配块,需要一个准则来判定两个块的匹配程度,这个准则就称为运动估计准则;常见有最小均方误差MSE、最小平均绝对误差MAD、最大匹配像素数MPC、绝对误差和SAD等。

  • 运动估计搜索是根据匹配准则寻找最优匹配块,并获得最优MV的过程;常见搜索算法有全搜法对数搜索法三步搜索法UMHexagonS算法TZSearch算法等等。

  • 在解码端,从码流中解析出运动信息后,将根据MV得到的参考块作为当前块预测值的过程称为运动补偿(Motion Compensation,MC),MC得到的预测值加上传输到解码端的预测残差,就得到了最终的重建值

  • 编解码端需要确保参考信息的一致,即使用重建后的已编码图像作为参考图像,因此MC和重建图像过程是编解码端都会实施的步骤。

  • 相邻图像间物体的运动不一定是以整像素为基本单位的,因此将运动估计的精度提升到亚像素级别,可以提高运动估计的精确度,因此亚像素精度运动估计需要对参考像素进行插值操作。

H266/VVC帧间预测编码关键技术

概述

MV的预测及获取新增加的技术

基于历史MV预测(History-based MV Mrediction,HMVP)的候选、联合帧内帧间预测技术(Combined Inter and Intra Prediction,CIIP)、带有运动矢量差的Merge技术(Merge-Mode with MVD,MMVD )、几何划分帧间预测技术(Geometric Partitioning Mode,GPM)、对称运动矢量差分编码(Symmetric MVD Coding,SMVD)、CU级的自适应运动矢量精度(Adaptive Motion Vector Resolution,AMVR)、基于子块的时域MV预测(Sub-block Temporal Motion Vector Prediction,SuTMVP) 、仿射运动补偿预测(Affine Motion Compensated Prediction,AMCP)、解码端运动矢量细化(Decoder Side Motion Vector Refinement,DMVR)等等。

运动补偿新增加的技术

片级加权运动补偿(WP)、CU级权重的加权补偿(Bi-Prediction with CU-Level Weight,BCW)、双向光流(Bi-Directional optical Flow, BDOF)、光流预测细化(Prediction Refinement with Optical Flow,PROF)等等。

帧间编码信息的存储

参考像素MV存储以8x8的尺寸粒度实施,通过类似科学技术法的方式对MV进行压缩存储(18比特降低到10比特表示)。

亚像素插值

H266/VVC采用双线性插值方法,插值滤波器为一维滤波器,按照先水平方向后垂直方向的顺序完成二维亚像素插值。

亮度分量最高支持1/16像素精度插值,统一为8抽头滤波器,由基于离散余弦变换的滤波器生成。
色度分量最高支持1/32像素精度插值,统一使用4抽头滤波器,水平、垂直滤波器系数分别由水平、垂直方向的缩放因子决定。

Merge模式

Merge模式不需要传输MVD和参考帧索引,是一种高效的MV编码方法。H266保留了常规Merge模式的同时,还引入了CIIPMMVDGPMSbTMVP仿射Merge等技术。

常规Merge模式

常规Merge模式: 直接将MVP运动矢量信息(参考图像索引、运动矢量)作为当前CU运动矢量信息的帧间编码方式。

Skip模式

Skip模式: 是Merge模式的特例,直接使用MVP信息作为当前CU的运动矢量,不编码MVD信息和预测残差信息。

CIIP

CIIP:联合帧内帧间预测模式(Combined Inter and Intra Prediction, CIIP)是联合帧内预测和帧间预测,利用帧内预测值和帧间预测值的加权平均值得到当前CU预测值的技术。

MMVD

MMVD: Merge模式直接利用MVP作为当前CU的运动矢量信息,是运动矢量的高效编码方式。然而,视频相邻(空域、时域)区域CU也会有不同的运动特性,常规Merge模式降低了MV的编码比特数,但也可能因为不准确的MV造成更大的预测残差。为了权衡运动矢量的准确性和编码比特数,H266引入了一种带有运动矢量差的Merge技术MMVD

GPM

GPM: 实际视频内容多种多样,当运动物体具有非水平或垂直边缘时,常规矩形CU并不能有效匹配,预测表达不够高效。针对此问题,H266引入几何划分帧间预测模式(Gemetric Partitioning Mode,GPM),允许使用非水平或垂直直线对矩形CU进行划分,每个子区域可以使用不同的运动信息进行运动补偿,从而提高了预测准确度。
在H266中,GPM的运动信息采用Merge方式编码,因此也归类为Merge扩展模式。

AMVP

常规AMVP

常规AMVP: 是针对运动矢量信息的差分编码技术;该模式利用空域、时域上运动矢量的相关性,为当前CU建立MVP候选列表。与Merge不同,编码端为当前CU建立MVP候选列表,针对不同的参考图像构建得到的MVP列表可能不同,常规AMVP需要编码参考帧索引、MVP列表索引、MVD。

SMVD

SMVD: 在实际场景中,物体的运动在短时间内时匀速的;对于双向预测,并且参考帧位于当前帧两侧的情形,前后向运动矢量可能具有对称一致性。因此,H266采用对称运动矢量差分编码(Symmetric MVD Coding,SMVD)模式,只编码前向MVD,后向MVD则根据对称一致性推导得到。

AMVR

AMVR: 提高运动矢量精度有利于提高运动补偿效果,而运动剧烈场景则需要更大的运动矢量范围,同时,在提高运动矢量范围和精度时,编码运动矢量需要更多的比特数。H266兼顾运动矢量和精度,引入CU级的自适应运动矢量精度(Adaptive Motion Vector Resolution,AMVR)技术,该技术允许每个CU自适应选择一种精度表示MVD,最高精度为1/16亮度像素,最低精度为4亮度像素。

基于子块的帧间预测模式

除了平移运动,视频内容还包括旋转、缩放、拉伸等运动。
为了有效表示此类运动,传统编码须采用较小的 CU,以便使用不同的运动信息对不同小CU进行运动补偿。虽然不同小区域(甚至像素)具有不同的运动,但它们却具有相同的运动模式。因此利用基于子块的帧间预测模式将CU划分成多个子块,利用CU的运动信息按照一定规则得到每个子块不同的运动信息,可以节省表示此类运动信息所需的比特殊。基于子块的帧间预测模式包括基于子块的时域运动矢量预测技术(SbTMVP)仿射运动补偿技术

SbTMVP: 基于子块的时域运动矢量预测技术使用同位图像ColPic中参考块的运动信息直接得到当前CU子块的MV信息。

仿射运动补偿技术: 包括仿射Merge模式和仿射AMVP模式。

解码端运动矢量细化

DMVR: Merge模式可以高效表示运动矢量信息,但可能会导致其运动矢量并非使参考块与编码块最匹配。为了改进Merge模式下MV的精确性,进一步减少预测残差,H266采用了一种基于双边匹配的解码端运动矢量细化技术(Decoder-Side Motion Vector Refinement, DMVR)。

基于光流场的预测值修正

光流: 是指视频帧内容在时域上的瞬时运动速度,即像素在时间域上的运动速度。视频中的时间间隔较短的两帧,光流也表现为同一目标点在两帧之间的位移,即像素的运动矢量

计算光流:对于时域邻近的视频帧,同一目标在不同帧上的亮度通常不会发生变化,而且运动距离很小;因此可以利用图像帧中像素亮度在时间域上的变化及像素空域相关性,计算视频帧之间的像素运动信息,即光流。

基于光流的预测值修正: 当前像素值可以根据参考像素值(对应位置)、光流值、空域梯度得到。当运动补偿中运动矢量存在较小误差时,可以计算运动矢量误差(光流值),对预测值进行补偿。称为基于光流的预测值修正。

BDOF: 采用双向运动补偿的帧间编码块,可以利用前向预测参考块和后向预测参考块得到一致性,估计前向预测参考块和后向预测参考块间的光流,作为运动矢量的修正值,这技术称为双向光流(Bi-Directional Optical Flow, BDOF)。

基于光流的仿射预测修正: 在H266中,仿射运动补偿技术(仿射Merge模式仿射AMVP模式)以4x4子块为处理单位,每个4x4子块拥有一个共同的运动矢量,而仿射运动区域,每个像素的运动矢量都不同,导致每个像素点的亮度补偿值可能有少许偏差。针对采用仿射运动补偿的编码块,光流预测细化(Prediciton Refinement with Optical Flow, PROF)技术为4x4子块的每个像素计算光流补偿值,即像素运动矢量与子块运动矢量的差值,然后根据光流计算公式计算每个像素的亮度补偿值。

帧间加权预测

H266/VVC采用Slice级加权预测和CU级加权预测(Bi-Prediction with CU-Level Weight, BCW)。Slice级加权预测所有CU共用同一组参数,归为显性(Explicit)预测,BCW每个CU利用索引确定加权值,归为默认加权,当不使用加权与测试时,归为默认加权

光照强弱出现变化时,视频中同场景会出现全局或局部的亮度变化,如拍摄的光圈变化,人为剪辑的淡入淡出等;传统的运动补偿得到的残差较大,Slice级加权预测可以有效应对此种场景。Slice级加权预测通过对参考图像的重建像素值做一个线性变换得到预测值。

针对采用双向预测的CU,H266引入了CU级双向加权预测BCW技术,仅仅使用少量预定义的权值,并编码器索引。

帧间预测模式组织结构

在这里插入图片描述

参考

JVET输出文档: https://www.itu.int/wftp3/av-arch/jvet-site/
书籍: 新一代通用视频编码H266/VVC:原理、标准与实现[万帅 霍俊彦 马彦卓 杨付正/著]

备注

本系列博客主要是对《新一代通用视频编码H266/VVC:原理、标准与实现》的学习笔记。

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

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

相关文章

Spring企业开发核心框架

文章目录 Spring企业开发核心框架一、框架前言1. 总体技术体系2. 框架概念和理解 二、Spring Framework简介1. Spring 和 SpringFramework2. SpringFramework主要功能模块3. SpringFramework 主要优势 三、Spring IoC 容器概念1. 组件和组件管理概念2. Spring IoC容器和容器实现…

C# LINQ

一、前言 学习心得&#xff1a;C# 入门经典第8版书中的第22章《LINQ》 二、LINQ to XML 我们可以通过LINQ to XML来创造xml文件 如下示例&#xff0c;我们用LINQ to XML来创造。 <Books><CSharp Time"2019"><book>C# 入门经典</book><…

上海亚商投顾:沪指冲高回落 游戏股午后集体重挫

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 三大指数12月22日冲高回落&#xff0c;黄白二线分化严重。游戏股午后大跌&#xff0c;盛天网络、游族网络、巨…

【JAVA】黑马MybatisPlus 学习笔记【终】【插件功能】

4.插件功能 MybatisPlus提供了很多的插件功能&#xff0c;进一步拓展其功能。目前已有的插件有&#xff1a; PaginationInnerInterceptor&#xff1a;自动分页TenantLineInnerInterceptor&#xff1a;多租户DynamicTableNameInnerInterceptor&#xff1a;动态表名OptimisticL…

bootstrap:bootstrapValidator校验数据是否可用(验证账户名是否重复)

目录 1、html内容 2、bootstrap的校验 3、控制层代码&#xff1a; 4、业务层核心代码 5、效果 1、html内容 <form id"jangleEditForm" name"jangleEditForm" class"formJ" ><div class"form-group" ><label for&q…

10个练习Web渗透测试的最佳网站

黑客的最高境界——社会工程学&#xff01;社会工程在网络安全领域充当了关键角色&#xff01;黑客技术如何操纵信息安全&#xff1f;社会工程攻击的多种形式&#xff0c;包括网络钓鱼、电子邮件欺诈、诱饵场景&#xff1b;如何应对黑客利用未提出的问题的策略。防范黑客社会工…

二叉树OJ题——3.翻转二叉树

226. 翻转二叉树 - 力扣&#xff08;LeetCode&#xff09; /* 解题思路&#xff1a; 翻转每一棵树的左右子树根节点 */void swap (struct TreeNode**x,struct TreeNode**y) {struct TreeNode*num0;num*x;*x*y;*ynum; }struct TreeNode* invertTree(struct TreeNode* root) { i…

【广州华锐互动】VR科技科普展厅平台:快速、便捷地创建出属于自己的虚拟展馆

随着科技的不断进步&#xff0c;虚拟现实(VR)技术已经在许多领域取得了显著的成果。尤其是在展馆设计领域&#xff0c;VR科技科普展厅平台已经实现了许多令人瞩目的新突破。 VR科技科普展厅平台是广州华锐互动专门为企业和机构提供虚拟展馆设计和制作的在线平台。通过这个平台&…

二分查找——OJ题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、点名1、题目讲解2、算法原理3、代码实现 二、搜索旋转排序数组中的最⼩值1、题目讲解2、算…

LabVIEW在齿轮箱故障诊断中的应用

LabVIEW在齿轮箱故障诊断中的应用 在现代机械工业中&#xff0c;齿轮箱作为重要的传动设备&#xff0c;其性能稳定性对整体机械系统的运行至关重要。故障的及时诊断和处理不仅保障了设备的稳定运行&#xff0c;还减少了维护成本。利用LabVIEW强大数据处理和仿真能力&#xff0…

在k8s中将gitlab-runner的运行pod调度到指定节点

本篇和前面的 基于helm的方式在k8s集群中部署gitlab 具有很强的关联性&#xff0c;因此如果有不明白的地方可以查看往期分享&#xff1a; 基于helm的方式在k8s集群中部署gitlab - 部署基于helm的方式在k8s集群中部署gitlab - 备份恢复基于helm的方式在k8s集群中部署gitlab - 升…

(11)Linux 进程以及进程控制块PCB

前言&#xff1a;章我们将带着大家深入理解 "进程" 的概念&#xff0c;"进程" 这个概念其实使我们一直在接触&#xff0c;只不过这个概念我们没有进行详细讲解罢了&#xff0c;本章我们就把 "进程" 好好地深入理解一番&#xff01;引出进程的概念…

C语言结构体内存对齐

文章目录 一、结构体内存对齐问题二、查看结构体成员起始位置三、设置内存对齐方式 一、结构体内存对齐问题 如下的info_s结构体类型&#xff0c;包含一个int型成员age, 一个char型成员gender, 一个int型成员id。 单从数据成员的大小进行分析&#xff0c;整个结构体的大小应为…

Spring Boot国际化i18n配置指南

Spring Boot国际化i18n配置指南 一、配置 1、yml文件配置 spring:messages:basename: i18n/Messages,i18n/Messages_en_US,i18n/Messages_zh_CNencoding: UTF-8i18n&#xff1a;表示国际化文件的父目录 Messages&#xff1a;默认国际化文件 Messages_en_US&#xff1a;英文文…

共享和独享的区别是什么?有必要用独享IP吗?

通俗地讲&#xff0c;共享IP就像乘坐公共汽车一样&#xff0c;您可以到达目的地&#xff0c;但将与其他乘客共享旅程&#xff0c;座位很可能是没有的。独享IP就像坐出租车一样&#xff0c;您可以更快到达目的地&#xff0c;由于车上只有您一个人&#xff0c;座位是您一个人专用…

链表的详细介绍

目录 链表的简单定义&#xff1a; 链表的分类 单项带头非循环 单向不带头循环链表 实现单向非循环无头链表 定义链表&#xff1a; 实现链表方法 打印链表 头插法&#xff1a; 尾插法&#xff1a; 指定插入&#xff1a; 通过对应值删除节点&#xff1a; 删除所有对应…

Unity向Web服务器上传和下载图片

Unity向Web服务器上传和下载图片 如果本片有看不懂的请查看我上篇文章&#xff1a;[Unity与Web服务器Post&#xff0c;Get](https://blog.csdn.net/qq_42194657/article/details/103031573)一、上传和下载图片1.在Unity中创建一个RawImage并在WebManager.cs脚本中添加一个Textu…

.json文件转为.dll文件后还能读取吗?

(只是修改了后缀名而已&#xff0c;做一个伪装&#xff09; 测试&#xff1a; QFile file(QApplication::applicationDirPath() "/config.dll");qDebug()<<QApplication::applicationDirPath() "/config.dll";if (file.open(QIODevice::ReadOnly))…

css mask 案例

文章目录 一、基本用法二、图案遮罩二、文字阴影效果三、日历探照灯效果 CSS的mask属性用于定义一个可重复使用的遮罩&#xff0c;可以将其应用到任何可视元素上。这个功能类似于Photoshop中的图层蒙版。通过mask属性&#xff0c;可以创建独特的效果&#xff0c;比如圆形、渐变…

西门子博途怎么使用PID_Compact做pid调试

到目前为止&#xff0c;我已经在S7-1200中创建了一个可运行的PLC程序&#xff0c;并在Basic Panel中创建了一个HMI项目来操纵和操作该程序。 引文&#xff1a;博途工控人平时在哪里技术交流博途工控人社群 现在&#xff0c;我们该如何深入的让程序开始逐渐智能化呢&#xff0c…