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

帧间预测编码简述

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

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

  • 为当前图像的每个像素块在之前已编码图像找到一个最佳匹配块,这个寻找过程就称为运动估计(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:原理、标准与实现》的学习笔记。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于驾驶训练算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.驾驶训练算法4.实验参数设定5.算法结果6.…

Android笔记(二十一):Room组件实现Android应用的持久化处理

一、Room组件概述 Room是Android JetPack架构组件之一,是一个持久处理的库。Room提供了在SQLite数据库上提供抽象层,使之实现数据访问。 (1)实体类(Entity):映射并封装了数据库对应的数据表中…

微信小程序备案流程整理

一、备案流程 [找备案入口]–[填主体信息]–[填小程序信息]–[初审]–[短信核验]–[通管局审核] 1,在小程序后台找到备案入口 (1)新的未上架小程序,可以在小程序首页点击【去备案】进入。 (2)已上架小程…

交换机端口镜像技术原理与配置

在网络维护的过程中会遇到需要对报文进行获取和分析的情况,比如怀疑有攻击报文,此时需要在不影响报文转发的情况下,对报文进行获取和分析。镜像技术可以在不影响报文正常处理流程的情况下,将镜像端口的报文复制一份到观察端口&…

基于Java版本与鸿鹄企业电子招投标系统的二次开发实践-鸿鹄企业电子招投标系统源代码+支持二开+鸿鹄电子招投标系统

随着市场竞争的加剧和企业规模的扩大,招采管理逐渐成为企业核心竞争力的重要组成部分。为了提高招采工作的效率和质量,我们提出了一种基于电子化平台的解决方案。该方案旨在通过电子化招投标,使得招标采购的质量更高、速度更快,同…

L1-061:新胖子公式

题目描述 根据钱江晚报官方微博的报导,最新的肥胖计算方法为:体重(kg) / 身高(m) 的平方。如果超过 25,你就是胖子。于是本题就请你编写程序自动判断一个人到底算不算胖子。 输入格式: 输入在一行中给出两个正数,依次为…

ImageJ图像滤波基础

文章目录 滤波简单滤波器卷积滤波Unsharp MaskTop Hat ImageJ系列:安装与初步💎灰度图像处理 滤波 预设滤波器 ImageJ的Process菜单提供了诸多图像滤波器,其中大部分方法均可定制参数,但也提供了一些已经预设参数的处理方法。 …

博易大师智星系统外盘资管系统的功能介绍!

1. 市场行情数据接收和显示:软件需要接收实时的市场行情数据,并将其以图形或数字的形式显示出来,包括价格、成交量、成交额等信息。 2. 交易操作界面:软件需要提供一个交易操作界面,供用户进行交易操作,包括…

少走十年弯路!!!webpack详解

webpack是什么?? 本质上,webpack 是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当 webpack 处理应用程序时,它会在内部从一个或多个入口点构建一个 依赖图(dependency graph),然后将你项目中所需的每一个模…

sql_lab之sqli中的搜索型注入

搜索型注入 原理是运用模糊查询: select * from users where username like %a% 1.找到具有模糊查询的搜索框的注入点 2.构造闭合 因为模糊查询的代码是 select * from users where username like %a% 所以应该 鱼%’ -- s 判断构造闭合的函数是否正确 鱼%…

Spring Boot3 Web开发技术

前期回顾 springboot项目常见的配置文件类型有哪些?哪种类型的优先级最高 yml properties yaml 读取配置文件里的数据用什么注解? value restful风格 RESTful 风格与传统的 HTTP 请求方式相比,更加简洁,安全,能隐…

成为小leader后,最大的感受就是:领导真的更偏爱主动汇报的下属!

* 你好,我是前端队长,在职场,玩副业,文末有福利! 有些朋友在职场,可能会陷入一个误区,觉得我们的付出,领导都能看到。这就大错特错了,很简单,打个比方,你有10…

MySQL数据库——InnoDB引擎-逻辑存储结构(表空间、段、区、页、行)

目录 表空间 段 区 页 行 之前我们初步介绍过InnoDB引擎的逻辑存储结构,如下图所示: 下面来对其每个组成部分详细了解: 表空间 表空间是InnoDB存储引擎逻辑结构的最高层, 如果用户启用了参数 innodb_file_per_table(在 …

Python - 深夜数据结构与算法之 Divide Conquer Backtrack

目录 一.引言 二.分治与回溯简介 1.Divide & Conquer 分治 2.BackTrack 回溯 三.经典算法实战 1.Combination-Of-Phone [17] 2.Permutations [46] 3.Permutations-2 [47] 4.Pow-X [50] 5.N-Queen [51] 6.Combinations [78] 7.Sub-Sets [78] 8.Majority-Elemen…

如何修复无法读取的U盘,修复U盘的方法

无法读取U盘是常见的故障,可能的原因有很多,例如U盘驱动器问题、文件系统损坏、电脑USB接口问题等。本文将详细分析这些原因,并提供相应的解决方法,帮助用户解决无法读取U盘的问题。 如何修复无法读取的U盘,修复U盘的方…

Python - 深夜数据结构与算法之 Recursion

目录 一.引言 二.递归的简介 1.Recursion 递归 2.Factorial 阶乘 3.Template 模版 三.经典算法实战 1.Generate-Parentheses [22] 2.Climbing-Stairs [70] 3.Is-Valid-BST [98] 4.Max-Depth [104] 5.Construct-Binary-Tree [105] 6.Min-Depth [111] 7.Invert-Tree…

DML语言(重点)———update

格式:update 要修改的对象 set 原来的值新值 -- 修改学员名字,带了简介 代码案例: -- 修改学员名字,带了简介 UPDATE student SET name清宸 WHERE id 1; -- 不指定条件情况下,会改动所有表! 代码案例…

@click 默认传递原生的事件对象

项目场景 [Day1] <template><div id"app"><h1>小黑记事本</h1><button click"handleClick">www</button><div class"head"><!-- 按键&#xff08;回车&#xff09;按下&#xff0c;出发add事件&…

适合引流源码声音鉴定神器网站源码,轻松吸引用户关注

源码介绍 声鉴卡HTML5网页源码&#xff0c;完整可运转&#xff0c;调用wx录音&#xff0c;自动判断声音属性&#xff0c;输出结果 安装教程 只需要把源码上传至主机空间就可以 支持上传二级目录访问&#xff01;提示一下&#xff1a;wxvx打开效果是最佳的源码里面生成二维码…

TIA博途中临时变量Temp的基本概念解析

TIA博途中临时变量Temp的基本概念解析 TEMP&#xff08;临时变量&#xff09;的概念是这样的。 每一个OB&#xff0c;FB&#xff0c;FC都可以声明Temp临时变量。 它们仅是在被调用时&#xff0c;由操作系统&#xff0c;根据块声明&#xff0c;临时分配的内存空间。该块结束时…