AV1帧间预测(二):运动补偿
运动补偿(Motion Compensation,MC)是帧间预测最基础的工具,AV1支持两种运动补偿方式,一种是传统的平移运动补偿,另一种是仿射运动补偿。下面分别介绍这两种运动补偿方法。
平移运动补偿
平移运动补偿是最传统的运动补偿方式,H.264/H.265的运动补偿都是这种方式,待编码块根据运动向量(Motion Vector,MV)在参考帧中寻找预测块,这个过程便是运动搜索。
AV1的运动搜索支持1/8像素精度,对于非整像素位置使用可分离的插值滤波器生成子像素。

图1 子像素插值
子像素的生成过程如图1,首先进行水平插值,然后再进行垂直插值。对于插值滤波器,如果截止频率高则会更多的保留高频分量,如果截止频率低则会去除更多的高频分量。在VP9中,插值滤波器可以自适应的在3种8抽头滤波器中选择,每种滤波器对应不同的截止频率,选定一种滤波器后水平和垂直方向都使用该滤波器。AV1在VP9的基础上允许水平和垂直方向选择不同的滤波器,每个方向可以从3种滤波器中选择,截止频率由低到高分别为SMOOTH、REGULAR和SHARP。图2是水平和垂直方向选择各种滤波器的热力图。

图2 插值滤波器热力图
为了降低解码复杂度,SMOOTH和REGULAR使用6抽头滤波器,SHARP使用8抽头滤波器。三种滤波器对应的半像素插值的滤波系数如下,

为了降低最坏情况下的复杂度(所有块都划分到4x4),某一维度小于等于4的块只允许使用两种4抽头滤波器进行半像素插值且没有SHARP滤波器。

仿射运动补偿
仿射模型参数估计
除了平移运动,视频内容很可能还包含旋转、缩放等仿射运动,AV1支持仿射运动补偿,通过仿射变换模型将(x,y)处的像素投影到(x',y'),

(1)
其中h_ij是仿射变换系数,(h13,h23)是平移因子和平移运动中的mv作用相同,h11和h22控制着水平和垂直方向的缩放,h11、h12、h21、h22共同控制旋转。
AV1共有两种affine mode,一种是全局affine mode,和参考帧相绑定,编码块可以根据参考帧索引使用对应的全局模型。平移因子(h13,h23)使用15比特精度编码,4个非平移因子h11、h12、h21、h22使用12比特精度编码。全局模型主要捕获整体的旋转和缩放特征,更关注整体的运动。
另一种affine mode是编码块级的局部模型,然而如果对每个块都传输affine参数将会消耗大量码率,因此AV1使用空域相邻块的mv来估计affine mode参数。局部模型中平移因子(h13,h23)类似于mv在码流中显示传输,其他4个参数使用相邻块mv估计得到。编码器会扫描最近相邻块,寻找和当前块参考帧相同的块作为候选项(最多8个候选项),利用候选项的mv来计算仿射模型参数。对每个候选项计算它的中心坐标相对当前块中心坐标的偏移当作变换前的位置,这个偏移值加上两个块间的mvd作为变换后的位置,用最小二乘法计算变换前后位置即可求解出模型参数。

图3 局部仿射模型参数估计
以图3为例,(xi,yi)是第i个块的中心坐标,mvi是对应运动向量。按Blk1到Blk7的顺序遍历相邻块,选择和当前块参考帧相同的块,这里选中Blk1、Blk2、Blk5和Blk7。
首先计算中心坐标偏移值作为变换前的位置,

对应变换后为位置为,

由仿射变换公式(1)可得,

将4个块变换前后的坐标带入上面公式即可用最小二乘法求得仿射变换的非平移参数h11、h12、h21、h22。

注意,为了保证空域相关性若mvd任何一个分量的绝对值超过8个像素则不使用该参考块,同时如果有效参考块数量小于2则无法用最小二乘法求解则不能使用局部仿射模型。
仿射运动估计
得到仿射模型后便可以对编码块使用仿射运动估计,即通过仿射运动找到每个像素在参考图像中对应的坐标得到预测像素。仿射运动只对8x8及以上的块才能使用,对于大于8x8的块首先将其划分为8x8子块,对每个8x8子块的中心坐标通过平移运动因子(h13,h23)计算在参考图像中对应的坐标,如同4中当前块中心(x0,y0)在参考图像中对应的坐标为(x1,y1),块中其他像素(x,y)以(x1,y1)为中心进行旋转和缩放得到仿射变换后的坐标(x',y'),


图4 仿射预测
AV1中仿射预测是1/64像素精度,使用8抽头滤波器(角点位置使用6抽头滤波器)进行分像素插值。如图1所示,普通的平移运动可以复用子像素插值的中间结果从而减少计算量。对于8x8的块插值,首先利用15x15区域内的像素使用水平插值生成15x8的中间结果,然后在中间结果上使用垂直插值生成8x8块。水平插值需要(15x8)x8=960次乘法,垂直插值需要(8x8)x8=512次乘法,总共需要1472次乘法。
而仿射变换后的每个像素偏移值可能不同,导致无法复用中间插值结果,如果直接进行插值计算需要64x8x8=4096次乘法。为了减少计算量,仿射变换可以通过两次错切变换完成(关于错切的定义可自行百度),

上面式子的右边第一部分是垂直错切矩阵,第二部分是水平错切矩阵。对8x8块的仿射变换分为两个阶段,首先使用水平错切求得15x8的中间结果获得水平位置偏移值
![]()
然后在中间结果上使用垂直错切得到垂直偏移值
![]()
最终得到8x8的预测块,总共需要1472次乘法运算。
为了使插值使用的像素限制在15x15区域内,对仿射参数需要满足下面两个条件

相关文章:
AV1帧间预测(二):运动补偿
运动补偿(Motion Compensation,MC)是帧间预测最基础的工具,AV1支持两种运动补偿方式,一种是传统的平移运动补偿,另一种是仿射运动补偿。下面分别介绍这两种运动补偿方法。 平移运动补偿 平移运动补偿是最传统的运动补偿方式,H.26…...
数学建模(5)——逻辑回归
一、二分类 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklea…...
【C++高阶】:深入探索C++11
✨ 心似白云常自在,意如流水任东西 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 Ǵ…...
6. 自定义Docker镜像
如何自定义Docker镜像:从基础到实践 Docker作为一个容器化平台,使得应用的打包、分发和运行变得更加高效和便捷。本文将详细介绍如何自定义一个Docker镜像,包括镜像的构成、分层原理、创建自定义镜像的具体步骤,并演示如何打包和…...
「12月·长沙」人工智能与网络安全国际学术会议(ISAICS 2024)
人工智能与网络安全国际学术会议(ISAICS 2024)将于2024年12月20日-2024年12月22日在湖南长沙召开。会议中发表的文章将会被收录,并于见刊后提交EI核心索引。会议旨在在为国内与国际学者搭建交流平台,推进不同学科领域的融合发展,就当今人工智能与网络安全范畴内各学…...
【技术支持案例】使用S32K144+NSD8381驱动电子膨胀阀
文章目录 1. 前言2. 问题描述3. 理论分析3.1 NSD8381如何连接电机3.2 S32K144和NSD8381的软件配置 4.测试验证4.1 测试环境4.2 测试效果4.3 测试记录 1. 前言 最近有客户在使用S32K144NSD8381驱动电子膨胀阀时,遇到无法正常驱动电子膨胀阀的情况。因为笔者也是刚开…...
第二期:集成电路(IC)——智能世界的微观建筑大师
嘿,小伙伴们!👋 我是你们的老朋友小竹笋,一名热爱创作和技术的工程师。上一期我们聊了聊AI芯片,这次我们要深入到更微观的层面,来探究集成电路(IC)的世界。准备好一起探索了吗&#…...
基于物联网的区块链算力网络,IGP/BGP协议
目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…...
每日一题~960 div2 A+B+C(简单奇偶博弈,构造,观察性质算贡献)
A题意: N 长的数组。 一次操作: 最开始的mx 为零。 选出一个数(使得这个数>mx) ,之后将mx 更新为这个数,将这个数置为零。 不能做这个操作的,输。 问是否有先手赢的策略。有的话,输出yes 否则no 当时一…...
音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程
音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...
Aboboo一些操作
常用快捷键⌨ 快捷键/操作方式 功能 鼠标中键/Esc 进入/退出全屏 空格/Tab 暂停/恢复播放 左/右箭头 快退/快进 Ctrl-左/右箭头 30秒快退/快进 Alt-左/右箭头 60秒快退/快进 Ctrl-Alt-左/右箭头 播放速率调节 PageUp/PageDown 上一句/下一句 上下箭头/滚轮 …...
获取行号LineNumberReader
(每日持续更新)jdk api之LineNumberReader基础、应用、实战-CSDN博客...
python数据结构与算法
0.时间复杂度和空间复杂度 快速判断算法时间复杂度:算法运行时间 1.确定问题规模n 2.循环减半 logn 3.k层关于n的循环 n^k 空间复杂度:评估算法内存占用大小 使用几个变量 O(1) 使用长度为n的一维列表 O(n)…...
大数据学习之Flink基础(补充)
Flink基础 1、系统时间与事件时间 系统时间(处理时间) 在Sparksreaming的任务计算时,使用的是系统时间。 假设所用窗口为滚动窗口,大小为5分钟。那么每五分钟,都会对接收的数据进行提交任务. 但是,这里有…...
C++基础语法:友元
前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 以<C Prime Plus> 6th Edition(以下称"本书")的内容开展学习 引入 友元提供了一种特别的方式,访问对象私有数据. 友元有三…...
【大模型系列】Video-LaVIT(2024.06)
Paper:https://arxiv.org/abs/2402.03161Github:https://video-lavit.github.io/Title:Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional TokenizationAuthor:Yang Jin, 北大&#x…...
【总结】nacos作为注册中心-应用启动失败:NacosDiscoveryProperties{serverAddr=‘127.0.0.1:8848‘……
问题现象 启动springboot应用时报错,能够读取到nacos配置,但是使用nacos作为注册中心,应用注册到nacos失败。 应用配置bootstrap.properties如下: # 应用编码,安装时替换变量 spring.application.namedata-center #…...
C语言——数组和排序
C语言——数组和排序 数组数组的概念数组的初始化数组的特点 排序选择排序冒泡排序插入排序 二分查找 数组 数组的概念 数组是一组数据 ; 数组是一组相同类型的数据或变量的集合 ; 应用场景: 用于批量的处理多个数据 ; 语法&…...
QEMU 新增QMPHMP指令【原文阅读】
文章目录 0x0 QEMU原文0x10x11 How to write monitor commands0x12 Overview0x13 Testing 0x20x21 Writing a simple command: hello-world0x22 Arguments 0x30x31 Implementing the HMP command 0x40x41 Writing more complex commands0x42 Modelling data in QAPI0x43 User D…...
【Linux】全志Tina配置屏幕时钟的方法
一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\device\config\chips\c200s\configs\F1C200s\sys_config.fex 二、文件内容 三、介绍 在此处可以修改屏幕的频率,当前为21MHz。 四、总结 注意选择对应的屏幕的参数,sdk所支持的屏幕信息都在此文件夹中…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
