AVS3:角度加权预测AWP

news2025/1/21 13:47:02

在一般的视频编码标准中帧间预测有两种方式:单向预测和双向预测。一般是将图像划分为矩形(正方形)块然后到参考帧中去搜索和它最接近的块作为预测块,单向预测只有一个预测块,而双向搜索会有2个预测块,将2个预测块按固定权重(一般是平均)加权后即得到最终预测块。但是很多视频内容比较复杂,物体边界未必是水平或垂直,此时需要在物体边界附近划分出更多更小的块来提升编码效果。为了解决这个问题,在最近的编码标准中引入了非矩形划分,它用于双向预测,通过对2个预测块的每个预测值使用不同权重来拟合不同物体形状。

AV1中引入CWP(Compound Wedge Prediction),它通过3个预定义的表生成权重mask,共有16种mask,如图1。

图1 AV1对正方形和矩形的mask

VVC在2019年引入了三角划分(TPM,Triangular Partition Mode),划分边界是两条对角线,需要对每个预测值计算它到划分边界的距离,根据距离确定权重。后来VVC引入了几何划分(GPM,Geometric),它有64种划分模式,每个预测值需要根据每种划分模式的角度计算它到划分边界的距离从而得到权重。

图2 GPM模式权重计算

AWP

AVS3引入了角度加权预测(AWP,Angular Weighted Prediction),

角度加权模式支持的最小块尺寸为8,最大块尺寸为64,共支持8种角度,这8种角度的斜率绝对值共五种,分别是{水平,垂直,1,2,1/2},每个角度支持7种参考权重配置,因此对于每个块而言,角度加权模式的模式数共有56种模式。

图3 参考权重位置计算

AWP生成权重的方式借鉴了intra角度模式生成参考值的方式。AWP算法分为三步:

  • 计算有效参考位置的数量;

  • 生成有效的参考权重值;

  • 根据有效的参考权重值计算每个预测像素的权重;

计算有效参考位置的数量

和帧内预测类似,AWP需要根据选择的角度和块尺寸确定参考权重数量,计算方法如下式,L是有效参考权重的数量,w和h是块的宽和高,m是角度斜率的绝对值,

AWP共支持8种角度,如图4,这8种角度的斜率绝对值共五种,

图4 AWP角度

AWP的计算精度是1/2像素精度,所以最终有效参考像素数量的计算如下,

L=(w<<1)+((h<<1)>>m)

生成参考权重值

确定参考权重数量后需要生成参考权重值,AWP对每个角度支持7种参考权重集,如图5

图5 参考权重计算

具体如下式,

Rx[x]=Clip3(0,8,x-d)

d=(L>>1)+(set_idx-3)*((L>>3)-1)

其中Rw[x]是位置x处的参考权重值,set_idx是7种参考集的索引。

生成预测像素权重

计算完参考权重后就可以根据参考权重计算每个预测像素的权重,如图6,这个过程类似intra模式根据参考像素计算预测值,

图6 像素权重计算

对不同角度计算方式如下:

其中Pw(i,j)是(i,j)位置处的权重。

AWP预测块生成

AWP用于双向预测,它需要两个单向mv分别生成两个预测块,然后按照上面计算的权重将两个预测块加权得到最终的预测块。为了获得2个单向mv需要构建有个mv列表,从列表中选择两个mv,列表的候选mv由时域和空域相邻块获得,如图7

图7 时空相邻块

  • MV候选项生成

按照T,A,B,C,D,E,F的顺序将相邻块mv加入列表,其中T是时域块,对于T时域块L0的运动信息可用,则采用L0的运动信息进行缩放获取运动信息,若时域块L0的运动信息不可用,则采用时域块L1的运动信息进行缩放获取运动信息。对于空域块,若当前块运动信息为单向,直接取出单向运动信息并查重, 若当前块运动信息为双向,根据编号奇偶性裁剪为单向运动信息并查重(偶数选L0,奇数选L1),其中T的编号是0,A的编号是1,以此类推。

  • MV修正

构建完mv列表后,从中选择2个mv最终用于AWP。这两个mv会被进一步修正,即加一个MVD。MVD由步长和方向决定,共有5种步长{1/4,1/2,1,2,4},4种方向{上,下,左,右}。最终MVD如下,其中offset是5种步长之一。

  • 最终预测块生成

最终预测块由2个预测块加权得到,其中Fp(i,j)是坐标(i,j)处的最终预测值,M(i,j)第一个预测块在坐标(i,j)处的预测值,N(i,j)第二个预测块在坐标(i,j)处的预测值,Pw(i,j)是坐标(i,j)处的权重值。

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

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

相关文章

基于Java医院住院综合服务管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

前端Vue自定义精美悬浮菜单按钮fab button 可设置按钮背景颜色 菜单按钮展开条目

前端Vue自定义精美悬浮菜单按钮fab button 可设置按钮背景颜色 菜单按钮展开条目,下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13321 效果图如下: # cc-suspensionMenu #### 使用方法 使用方法 <!-- scrollShow:是否显示滑动…

【Spark实战】Windows环境下编译Spark2 Linux上部署Spark On Yarn

Windows环境下编译Spark2 环境准备 git-2.14.1maven-3.9.2jdk-1.8scala-2.11.8zinc-0.3.15 主下载地址spark-2.3.4 github官方地址 编译准备 maven远程仓库使用的是阿里云的 解压源码包spark-2.3.4.zip,修改根模块的pom文件。主要目的是为了变更hadoop的版本号&#xff0c;…

飞控学习笔记-飞行器数学模型(2)

十字型模型 旋翼动力学 动力模型 电机模型 模型仿真 升力模型 力矩模型 反扭力 仿真

如何理解字符串不可变

字符串的不可变性: String类内部定义了 final char[ ] value ;数组用于存储字符串数据。 这里的value数组是通过final关键字修饰的,也就说字符串其实是一个常量,一旦在内存中申请出一个空间并且为其赋值之后这个空间中的字符串值就不可以修改了,将这个性质我们称之为不可变性。…

阿里云服务拆分部署

最近在工作中遇到需要将现网运行的服务拆分出一套&#xff0c;放置于本地机房&#xff0c;拆分服务运行有两种方案&#xff1a; 第一种是本地部署一个独立spring应用&#xff0c;业务上的要求是尽量隔离 第二种是采用阿里集群部署 采用第二种方案目前看是隔离度最高的

4.44ue4:相机抖动

1.创建相机抖动类 右键内容面板&#xff0c;点击创建蓝图类&#xff0c;搜索shake&#xff08;camera shake&#xff09; 2.使用相机抖动&#xff1a; 节点&#xff1a;play world .. api解释&#xff1a; epicenter&#xff1a;震源 inner Radius&#xff1a;内圈范围&a…

Git gui教程---第一篇 下载和安装

下载和安装 下载网址安装 下载网址 链接: 下载网址 有两种安装方式&#xff1a; 是用EXE的文件安装&#xff0c;我们用这个是便携版&#xff0c;好像是压缩包形式&#xff0c;没用过。 这是下载后的安装包文件&#xff0c;我的电脑是64位&#xff0c;所以下载的是64位。 安…

Unity2D横版游戏(深海潜水艇)

找到个挺有意思的小游戏Unity2D横版游戏&#xff08;深海潜水艇&#xff09; 这个也是曾经有段时间抖、音很火的一个小游戏。 鼠标左键点击让小艇上升 因为是unity开发的小游戏&#xff0c;可发布多个平台&#xff0c;有兴趣的拿去玩吧。 代码也是挺简单的 using UnityEngin…

【经典题目分析】数组分割问题

文章目录 698. 划分为k个相等的子集416. 分割等和数组 698. 划分为k个相等的子集 把一个数组&#xff0c;拆分成K个大小一样的子数组。方法可以是状态枚举&#xff0c;或者dfs class Solution { public:bool canPartitionKSubsets(vector<int>& nums, int k) {// 从…

C/C++图形库EasyX保姆级使用教程(三) 图形颜色的填充及相关应用

C/C图形库EasyX保姆级使用教程系列文章目录 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 第二章 图形化窗口设置以及简单图形的绘制 第三章 图形颜色的填充及相关应用 文章目录 C/C图形库EasyX保姆级使用教程系列文章目录前言一、如何填充颜色1.确定颜色1.1 …

TypeScript - 函数(下)

目录 1、在函数中声明this 2、其他需要知道的类型 2.1 void 2.2 object 2.3 unknow 2.4 never 2.5 Function 3、其余参数&#xff08;rest&#xff09;和参数 4、参数解构 5、函数的可分配性 1、在函数中声明this TypeScript 将通过代码流分析推断函数中应该是什么&…

jenkins_svn_maven持续集成

详解Jenkins &#xff0c;svn &#xff0c;maven 项目持续集成 第一步&#xff1a; 由于刚刚接触jenkins 并不知道他是个什么东西&#xff0c;首先百度一下&#xff0c;然后进入官网&#xff0c;下载安装包。 第二步 windows 安装&#xff1a; 下载完了&#xff0c;打开里面…

Spring Boot 中的 SAGA 事务

Spring Boot 中的 SAGA 事务 在分布式系统中&#xff0c;保证数据一致性是非常重要的问题。传统的 ACID 事务模型虽然能够保证单个数据库的数据一致性&#xff0c;但是在分布式系统中却很难实现。因此&#xff0c;近年来出现了一些新的事务模型&#xff0c;其中 SAGA 就是一种…

上海清晖管理咨询有限公司创始人傅永康受邀为第十二届中国PMO大会演讲嘉宾

上海清晖管理咨询有限公司创始人傅永康先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;PMBOK第七版对PMO的影响。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 项目管理协会&#xff08;P…

软件设计模式与体系结构-设计模式-结构型软件设计模式-桥接模式

四、桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是一种软件设计模式&#xff0c;它用于将抽象部分与其具体实现部分解耦&#xff0c;使它们可以独立地变化。桥接模式的核心思想是将一个系统分为多个维度&#xff0c;并通过桥接连接这些维度&#xff0c;从而实现…

合理组织安卓活动

本文所有代码均存放于https://github.com/MADMAX110/Starbuzz 开始构建一个应用时&#xff0c;你会考虑这个应用要包含什么&#xff0c;会有各种各样的很多想法&#xff0c;如何组织这些想法来建立一个直观、清晰的应用。 一、活动归类 要组织各种各样的活动&#xff0c;有一种…

IMX6ULL移植篇-uboot网络配置工作

一. uboot 网络IP配置 1. 硬件连接 在使用 uboot 的网络功能之前先用网线将开发板的 ENET2 接口和电脑或者路由器连接&#xff0c; I.MX6U-ALPHA 开发板有两个网口&#xff1a; ENET1 和 ENET2 &#xff0c;一定要连接 ENET2 &#xff0c;ENET2 接口如下&#xff1a…

LIS系统源码 基于互联网技术的医院实验室信息管理系统源码

LIS系统&#xff0c;即实验室信息管理系统&#xff0c;是一种基于互联网技术的医疗行业管理系统&#xff0c;它可以帮助实验室进行样本管理、检测流程管理、结果报告等一系列工作&#xff0c;提高实验室工作效率和质量。下面将从LIS系统的功能、特点方面对其进行详细介绍。 一、…

基于深度学习的高精度工人安全帽检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度工人安全帽检测识别系统可用于日常生活中或野外来检测与定位工人安全帽目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的工人安全帽目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用…