AV1技术学习:Affine Motion Compensation

一、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.rhkb.cn/news/381377.html

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

相关文章

Spring后端框架复习总结

之前写的博客太杂,最近想把后端框架的知识点再系统的过一遍,主要是Spring Boot和Mybatis相关,带着自己的理解使用简短的话把一些问题总结一下,尤其是开发中和面试中的高频问题,基础知识点可以参考之前写java后端专栏,这篇不再赘述。 目录 Spring什么是AOP?底层原理?事务…

【HarmonyOS NEXT】网络请求 - 分页加载

分页加载关键字:onReachEnd 一、申请网络权限 在 module.json5 文件中,添加网络权限: {"module": {..."requestPermissions": [{"name": "ohos.permission.INTERNET","usedScene": {&qu…

K8S实战进阶

title ‘K8S实战进阶’ date 2024-04-02T16:57:3608:00 draft true 一、搭建Kubernetes集群 1.1 搭建方案 1.1.1 minikube minikube 是一个工具, 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机(包括 Windows、macOS 和 Linux PC&…

图像生成(Text-to-Image)发展脉络

这篇博客对 图像生成(image generation) 领域的经典工作发展进行了梳理,包括重要的一些改进,目的是帮助读者对此领域有一个整体的发展方向把握,并非是对每个工作的详细介绍。 脉络发展(时间顺序&#xff0…

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换

WGS84经纬度坐标 GCJ02火星坐标 BD09百度坐标互相转换 背景:uniapp做的微信小程序,使用到了相机拍照并获取位置坐标信息;在腾讯地图上展示坐标点位置信息; 由于业务需要我们的PC端用的不是腾讯地图,需要使用WGS84坐标或…

uniapp判断h5/微信小程序/app端+实战展示

文章目录 导文使用条件编译的基本语法常见的平台标识符示例实战展示使用场景举例注意事项 导文 这里是导文 当你在开发Uni-app时,需要根据不同的平台(比如App端、H5端、微信小程序等)来执行不同的代码逻辑,可以使用条件编译来实现…

03 Git的基本使用

第3章:Git的基本使用 一、创建版本仓库 一)TortoiseGit ​ 选择项目地址,右键,创建版本库 ​ 初始化git init版本库 ​ 查看是否生成.git文件(隐藏文件) 二)Git ​ 选择项目地址&#xff0c…

Redis分布式系统中的主从复制

本篇文章主要对Redis的主从复制进行讲解。主要分析复制的原理,包括:建立复制、全量复制、部分复制、全量复制、心跳检测等。希望本篇文章会对你有所帮助。 文章目录 一、主从复制简介 二、配置主从复制模式 断开主从复制 安全性 只读 传输延迟 三、拓扑结构 四、主…

Java开发之Java容器

#来自ゾフィー(佐菲) 1 总览 1.1 List ArrayList: Object[]数组Vector:Object[]数组LinkedList: 双向链表,JDK1.6 之前为循环链表,JDK1.7 取消了循环 1.2 Set HashSet:无序&#xf…

mybatis 报CannotGetJdbcConnectionException

目录 报错起因 报错截图 运行环境 数据库配置 解决思路 报错起因 在web项目上拉取代码启动web服务抛CannotGetJdbcConnectionException。 报错截图 运行环境 windows idea maven tomcat springMVC mybatis 数据库配置 urlxxx driverClassNamexxx usernamexxx pass…

docker compose 容器 编排分组

遇到问题:执行docker compose up -d 后docker compose 创建的容器们 在desktop-docker 中都在docker下一堆 搜索想着能不能把这个docker名字改一下,但是都没有找到这样的一个方案; 最后发现,我执行docker compose up -d 命令所在…

【数据结构】二叉树OJ题_对称二叉树_另一棵的子树

对称二叉树 题目 101. 对称二叉树 - 力扣(LeetCode) 给你一个二叉树的根节点 root , 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true示例 2: 输入:root [1,2…

Linux文件和目录常用命令

1.操作命令 查看目录内容 ls 切换目录 cd 创建和删除操作 touch rm mkdir 拷贝和移动文件 cp mv 查看文件内容 cat more grep 其他 echo 重定向 > 和 >> 管道 | 1.1 终端实用技巧 1>自动补全 在敲出 文件/目录/命令 的前几个字母之后,按下…

git实操之线上分支合并

线上分支合并 【 1 】本地dev分支合并到本地master上 # 本地dev分支合并到本地master上# 远程(线上)分支合并# 本地dev分支合并到本地master上# 远程(线上)分支合并#####本地和线上分支同步################ #### 远程创建分支,拉取到本地####-远程创建分支&#…

FPGA:频闪灯设计

1、需求 若在FPGA上实现LED灯一秒闪烁一次,先进行计算,1秒闪烁一次,即周期为1秒,开发板XC7A35TFFG-2的基本时钟输入由板载 50MHz 有源晶振提供,即频率为f 50MHz 。 则一个周期为 T 1 f 1 50 M H z 20 n s T\frac{…

git使用、git与idea结合、gitee、gitlab

本文章基于黑马程序javase模块中的"git"部分 先言:git在集成idea中,不同版本的idea中页面显示不同,操作时更注重基于选项的文字;git基于命令操作参考文档实现即可,idea工具继承使用重点掌握 1.git概述 git是目前世界上最先进的分布式文件版本控制系统 分布式:将…

FastAPI(六十六)实战开发《在线课程学习系统》接口开发--用户注册接口开发

在前面我们分析了接口的设计,那么我们接下来做接口的开发。 首先,我们先设计下pydantic用户参数的校验: """ -*- encodingutf-8 -*- Time: 2024/7/19 16:48 Author: lc Email: 15101006331163.com File: schemas.py "&…

基于单片机的智能医疗监护系统设计

1.简介 随着社会的发展,智能化电子设备成为了人们生活中不可或缺的一部分,尤其是在人们对于身心健康更加注重的今天,智能医疗监护系统应运而生。本套电子监护设备集体温测量、心电采集、心率监测、血氧监测于一体,带有语音播报模块…

Thinkphp开发文档二次整理版

基础部分 安装 环境要求 ​ *php>7.1.0 命令下载 通过Composer进行下载,操作步骤下载软件 phpstudy --->点击软件管理 --->安装Composer --->再点击网站 --->点击管理 --->点击Composer --->复制如下命令代码: ​ 稳定版&…

甄选范文“论面向方面的编程技术及其应”,软考高级论文,系统架构设计师论文

论文真题 针对应用开发所面临的规模不断扩大、复杂度不断提升的问题,面向方面的编程(Aspect Oriented Programming,AOP)技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序,通常要把程序进行功能划分和封装。一般系统中的某些通用功能,如安全性、持续性、日…