AV1技术学习:Affine Motion Compensation

news2024/11/25 18:25:38

一、Affine Model Parameter

除了传统的平移运动补偿,AV1 还支持仿射变换模型,将当前像素点 (x, y) 通过以下方式投影到参考帧中的预测像素点 (x', y').

参数 (h13, h23) 对应于平移模型中使用的常规运动向量。 参数 h11 和 h22 控制垂直和水平轴上的比例因子,并与 h12 和 h21 一起决定旋转角度。

每个参考帧关联一个全局仿射模型,其中四个非平移参数的精度均为12位,平移运动矢量的编码精度为15位。一个编码块可以直接根据参考帧索引使用其仿射模型。

全局仿射模型捕获帧级缩放和旋转,主要关注整个帧的刚性运动设置。此外,编码块级别的仿射模型可以自适应地跟踪跨帧变化的非平移运动。然而,每个编码块发送仿射模型参数的开销成本也引入了额外的信息。因此,各种研究工作都集中在不增加额外开销的仿射模型参数估计上,AV1 采用一种基于空间相邻块的规则平移运动矢量的局部仿射参数估计方案。

编码块的局部仿射模型中的平移运动矢量 (h13, h23) 在比特流中显式传输。为了估计其他四个参数,假设局部尺度和旋转因子可以通过空间邻居的运动活动信息来反映。编解码器扫描编码块最近的相邻块,并根据运动信息使用和当前块相同参考帧的相邻块。最多允许八个相邻候选块。对于每个后选择的候选块,首先计算其中心位置和当前块中心位置的偏移,将该位置作为原始样本的位置,然后在该偏移的基础上,添加候选块和当前块间的运动矢量差,形成仿射变换后的目标样本的位置,对可用的原始和目标样本位置对进行最小二乘回归,计算仿射模型参数。

我们以上图为例来演示仿射参数估计过程。最近的相邻块由扫描顺序标记。对于Block k,其中心位置记为(xk, yk),运动矢量记为 mvk,其中当前编码块用 k = 0 表示。

假设,在这种情况下,相邻块 1、2、5和 7 与当前块使用相同的参考帧,选它们为参考块。原始样本位置形成为

式中k∈{1,2,5,7}。将运动矢量差进一步相加,得到相应的目标样本位置

为了构造最小二乘回归,我们将样本数据表示为

最小二乘回归计算出的 Affine 的参数为:

在实际中需要确保空间相邻块与当前块相关。因此,如果运动矢量差的任何分量的绝对值超过8个像素,我们就丢弃该参考块。此外,如果可用参考块的数量小于2,则最小二乘回归问题是病态的;因此,局部仿射模型被禁用。

二、Affine Motion Compensation

构建出 Affine 模型之后,进行Affine 模式的运动补偿。Affine 模型应用于 8x8 及以上的块大小。

一个预测块被分解成8 × 8个单元。首先由平移运动向量(h13, h23)确定每个 8×8 预测单元的中心像素,下图所示。下图中的绿色方格中位置(x, y)的其余像素,围绕中心像素(x1, y1)进行缩放和旋转,形成如下虚线中的仿射投影(x', y')

仿射投影允许 1/64 像素精度。设计了一组八抽头FIR滤波器(在某些情况下为六抽头)来进行亚像素插值。传统的平移模型在整个块上具有均匀的亚像素偏移量,这允许人们有效地“重用”大多数中间结果以减少总体计算。比如,要插值8 × 8块,首先应用水平滤波器从15 × 15 参考区域生成中间15 × 8数组。然后将垂直滤波器应用于中间的 15 × 8 数组,以产生最终的8 × 8预测块。因此,平移模型需要水平滤波进行(15×8)×8乘法运算,垂直滤波进行(8 × 8) × 8次乘法,共1472次乘法。

与平移模型不同,假设仿射模型中的每个像素由于旋转和缩放效应而具有不同的亚像素偏移是合理的。直接计算每个像素需要64 × 8 × 8 = 4096次乘法。然而,可以看到(7)中的旋转和缩放矩阵可以分解为两个剪切矩阵

其中右边的第一项对应于垂直插值,第二项对应于水平插值。这将构建仿射参考块转换为两个阶段的插值操作。
首先通过在15 × 15参考区域上的水平滤波得到一个15 × 8 的中间数组,其中水平偏移量计算为

然后中间数组进行垂直滤波以插值垂直偏移量

并生成8×8预测块。因此,它总共需要1472次乘法,与平移情况相同。然而,值得注意的是,仿射模型的实际计算成本仍然较高,因为每个像素的滤波系数都是变化的,而平移模型在水平和垂直方向分别使用固定的滤波器。

为了提高缓存性能,AV1要求 (9) 中的水平偏移量与 (x−x1) 的距离在1个像素以内,(10) 中的垂直偏移量与 (y−y1) 的距离在1个像素以内,这就限制了参考区域的距离在一个15×15像素数组内。考虑生成15 × 8中间像素数组的第一阶段。离其中心的位移为(x−x1)∈[−4,4],(y−y1)∈[−7,8]。

因此,我们对最大水平偏移量的约束为

同样,在第二阶段(x−x1)∈[−4,4]和(y−y1)∈[−4,4],从而导致

AV1中的有效仿射模型需要同时满足式(11)和式(12)中的条件。 

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

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

相关文章

“SelectDB 实时数据仓库解决方案”入围工信部“信息技术应用创新典型解决方案”

7 月 11 日,由工业和信息化部网络安全产业发展中心(工业和信息化部信息中心)主办的 2024 信息技术应用创新发展大会暨解决方案应用推广大会在天津落下帷幕,会上集中发布了一系列技术水平先进、应用效果突出、产业带动性强的信息技…

MySQL(5)表的查询

目录 1.表的查询 1.表的查询: 1.1创建表: 语法: create table 表名( 字段 类型 约束, 字段 类型 约束, ... 字段 类型 约束 ); 1.2 单行数据全行插入: 🌰 表的字段都插入数据: insert into student values(100, 1000, 唐三藏, null); 1.3 多行数据 指定列插入:…

【Java--数据结构】二叉树

欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 树结构 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合 注意:树形结构中,子…

Java爬虫安全策略:防止TikTok音频抓取过程中的请求被拦截

摘要 在当今互联网时代,数据采集已成为获取信息的重要手段。然而,随着反爬虫技术的不断进步,爬虫开发者面临着越来越多的挑战。本文将探讨Java爬虫在抓取TikTok音频时的安全策略,包括如何防止请求被拦截,以及如何提高…

HTTPS请求头缺少HttpOnly和Secure属性解决方案

问题描述: 建立Filter拦截器类 package com.ruoyi.framework.security.filter;import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.…

YOLOv8目标跟踪deepsort

原文:YOLOv8目标跟踪deepsort - 知乎 (zhihu.com) 一、YOLOV8 tracking 参考文章: Ctrl CV:YoloV5 + DeepSort1 赞同 0 评论文章 二、行人重识别(ReID) ——Market-1501 数据集 2.1、数据集简介 Market-1501 数据集在清华大学校园中采集,夏天拍摄,在 2015 年构建并…

儿时插画:成都亚恒丰创教育科技有限公司

儿时插画:穿越时光的色彩梦境 在记忆的长河中,总有一些画面如同璀璨星辰,不因岁月的流逝而黯淡,反而在心底愈发鲜明——那便是儿时插画中的世界。它们不仅仅是纸上的色彩与线条,更是通往纯真年代的秘密通道&#xff0…

前端框架入门之Vue的模版语法与数据单向绑定 数据双向绑定

目录 vue的模版语法 数据绑定 vue的模版语法 关于模版这个概念 root容器里面被称为模版 我们的语法分为插值语法和插值语法 这样就是实现了插值语法 接下来我们实现指令语法 首先我们写一个a标签 链一个超链接上去 <h1>指令语法</h1><a href"https:/…

[Linux+git+Gitee+Jenkins]持续集成实验安装配置详细

首先理解持续集成原理&#xff0c;看懂并理解图 1。 图 1 持续集成原理结构 图 1 中&#xff0c;版本控制服务器指远程代码仓库&#xff0c;本实验使用 GitEE 作为远程代码仓库&#xff1b;Jenkins 自动化部署服务器为虚拟机&#xff0c;操作系统为 Linux &#xff1b…

学习大数据DAY17 PLSQL基础语法6和Git的基本操作

目录 包 存储过程调试功能 作业 阶段复习作业 Git课程目录 什么是版本控制 没有版本控制的缺点 常见的版本工具 版本控制分类 1. 本地版本控制 2. 集中版本控制 3. 分布式版本控制 Git与SVN主要区别 Git软件安装及配置 Windows系统安装Git 安装Tortoise Git(乌龟…

Linux网络编程-socket套接字使用详解

1.概念 在Linux中&#xff0c;套接字&#xff08;socket&#xff09;是一种通信机制&#xff0c;用于实现不同进程之间或同一主机上的不同线程之间的数据交换。它是网络编程的基础&#xff0c;允许应用程序通过网络进行通信&#xff0c;也可以在同一台机器上的不同进程间进行通…

web自动化测试selenium的基本使用

目录 初始化浏览器并打开网页 定位网页元素 定位的方法 模拟键盘操作 模拟鼠标操作 xpath方法 xpath结点 路径表达式 轴 selenium是一个很流行的自动化测试的库&#xff0c;主要用于模拟浏览器的运行&#xff0c;是web应用测试的工具。 在使用selenium时&#xff0c;…

QSpice-(4) 层次化电路设计

QSpice-(4) 层次化电路设计 在电路规模日渐庞大的现在&#xff0c;单靠一个人把整个电路做完可能还有点麻烦&#xff0c;但也不是不可能&#xff0c;还是要怀揣着那种热情把电路做好,在电路规模比较大的时候我们通常会将电路放到子电路里面去&#xff0c;这个子电路相当于C代…

数据结构——线性表(C语言实现)

写在前面&#xff1a; 在前面C语言的结构体学习中&#xff0c;我提及了链表的操作&#xff0c; 学习数据结构我认为还是需要对C语言的数组、函数、指针、结构体有一定的了解&#xff0c;不然对于结构体的代码可能很难理解&#xff0c;特别是一些书籍上面用的还是伪代码&#xf…

Python 实现股票指标计算——RSI

RSI - 相对强弱指标 1 公式 1.1 第一种计算公式 假设A为N日&#xff08;N一般取值为6、14、21&#xff09;内收盘价的正数之和 B为N日内&#xff08;N一般取值为6、14、21&#xff09;收盘价的负数之和乘以&#xff08;-1&#xff09; 这样&#xff0c;A和B均为正&#xf…

小红书笔记怎么写才能上热门?

文末领取小红书电商开店运营教程&#xff01; 小红书作为一个拥有亿级用户的社交电商平台&#xff0c;无数人通过这里分享自己的生活点滴和购物心得。 你是不是也想让自己的小红书笔记上热门&#xff0c;获得更多的曝光和关注呢&#xff1f; 今天&#xff0c;我们就来揭秘一…

2024最新MidJourney设计Logo教程+提示词原理

你是否已经看过许多别人分享的 MJ 咒语&#xff0c;却仍无法按照自己的想法画图&#xff1f;通过学习 MJ 的提示词逻辑后&#xff0c;你将能够更好地理解并创作自己的“咒语”。本文将详细拆解使用 MJ 设计 Logo 的逻辑&#xff0c;让你在阅读后即可轻松上手&#xff0c;制作出…

应急靶场(2):Windows Server 2022 - Web1

目录 一、攻击者的shell密码 二、攻击者的IP地址 三、攻击者的隐藏账户名称 四、攻击者挖矿程序的矿池域名(仅域名) 五、有实力的可以尝试着修复漏洞 下载好靶场&#xff08;前来挑战&#xff01;应急响应靶机训练-Web1&#xff09;并搭建好环境&#xff0c;无需密码直接进入靶…

[Spring] Spring Web MVC案例实战

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【堆 优先队列 第k大】2551. 将珠子放入背包中

本文涉及知识点 堆 优先队列 第k大 LeetCode2551. 将珠子放入背包中 你有 k 个背包。给你一个下标从 0 开始的整数数组 weights &#xff0c;其中 weights[i] 是第 i 个珠子的重量。同时给你整数 k 。 请你按照如下规则将所有的珠子放进 k 个背包。 没有背包是空的。 如果第…