AVS3:DMVR

AVS3中引入了解码端运动矢量修正(DMVR,Decoder side Motion Vector Refinement)技术,AVS3中的DMVR技术和G.266/VVC类似,它可以在解码端生成运动参数从而减少传输运动参数的码率开销。它的基本思想是将skip/direct模式生成的前后向mv作为初始mv,然后使用双向匹配修正初始mv。修正过程又分为整像素搜索和分像素搜索两个部分。

DMVR


avs3中DMVR只能用于双向预测且为skip或direct模式,它首先获取skip/direct的前向mv0和后向mv1,然后将mv0和mv1调整到整像素精度。在双向预测中根据mv0和mv1分别从L0和L1的参考帧中获取预测块,但是需要拷贝的预测块尺寸为(W+7)*(H+7)作为搜索区域,其中W和H分别是块的宽和高。搜索区域等于或略大于硬件MC模块原有需要的缓冲区的大小(MC需要的额外像素数为滤波器阶数8),可复用硬件MC模块原有缓冲区。

将当前预测单元的亮度图像块划分为不重叠且位置相邻的16x16的子块, 其中子块的宽度subW和高度subH通过下式计算:

subW = W<16 ? W : 16

subH  = H<16 ?  H : 16

所有子块的初始mv均为mv0和mv1。对于每个子块,以初始mv0和mv1所对应的位置为中心,开始寻找周围[-2,2]范围内21个位置中前向和后向预测块之间SAD最小的位置。21个搜索位置如图1所示(蓝色位置为中心位置)。

mv0' = mv0 + mv_offset

mv1' = mv1 - mv_offset

图1 DMVR整数搜索点

只有图2中黄色三角形所在的整数点为最优点时,才进行亚像素估计。亚像素位置的计算使用整数位置最优位置、其左侧、其右侧、其上方、其下方共五处的模板匹配失真值,估计整数位置最优位置附近的二次失真平面,计算得到失真平面中失真最小的位置作为亚像素位置。使用其左侧、其右侧和中间像素估计水平亚像素位置,使用其上方、其下方和中间像素估计垂直亚像素位置:

水平亚像素位置 = (sad_left - sad_right)*精度N/((sad_right+sad_left-2*sad_mid)*2)

垂直亚像素位置 = (sad_btm - sad_top)*精度N/((sad_top+sad_btm-2*sad_mid)*2)

其中精度N在最高1/4时为4,在最高1/16时为16。

图2 最优整数搜索点

如果最优MV非零,对于原有缓冲区外扩2行像素。接着对于每个子块,利用整数和亚像素相对位置,利用原有8抽头滤波器进行MC操作,取得预测块。DMVR中更新后的MV不需存储,当前块的MV仍为未更新的MV。

DMVR技术使用在skip/direct编码块上,对于从空域或时域临近块直接获得skip/direct运动矢量进行精细化改良来提高预测精度。在当前块满足以下条件时才能使用DMVR:

  • 当前块为双向预测块;

  •  当前块为跳过模式SKIP或者是直接模式DIRECT模式;

  • 当前块不使用仿射模式AFFINE;

  • 当前块不使用仿射模式UMVE;

  • 当前块所在的帧在时间顺序上位于两个预测所在参考帧之间;

  • 当前块所在的帧在时间顺序上位于两个预测所在参考帧与当前参考帧时域距离相同;

  •  当前块宽度和高度大于等于8时;

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

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

相关文章

Swagger使用详解

目录 一、简介 二、SwaggerTest项目搭建 1. pom.xml 2. entity类 3. controller层 三、基本使用 1. 导入相关依赖 2. 编写配置文件 2.1 配置基本信息 2.2 配置接口信息 2.3 配置分组信息 2.3.1 分组名修改 2.3.2 设置多个分组 四、常用注解使用 1. ApiModel 2.A…

BS EN 12104-2023 软木地砖检测

软木地砖是指含有烧结成分的软木制成的块状砖&#xff0c;可用于地面覆盖物&#xff0c;装饰层等&#xff0c;具有脚感柔软舒适&#xff0c;防滑性能好&#xff0c;静音等性能&#xff0c;同时也其耐磨性较差&#xff0c;不易清洁。 BS EN 12104-2023软木地砖测试 测试项目 测…

Linux 指令心法(七)`cat` 查看、合并和创建文本文件

文章目录 命令的概述和用途命令的用法命令行选项和参数的详细说明命令的示例命令的注意事项或提示 命令的概述和用途 cat 是 “concatenate” 的缩写&#xff0c;它是一个 Linux 和 Unix 系统中的命令&#xff0c;用于查看、合并和创建文本文件。cat 主要用于以下几个方面&…

MongoDB-索引Index

索引Index 索引-Indexa) 概述b) 索引的类型b.1) 单字段索引b.2) 复合索引b.3) 其他索引 c) 索引的管理操作c.1) 索引的查看c.2) 索引的创建c.3) 索引的移除 d) 索引的使用d.1) 执行计划d.2) 涵盖的查询 索引-Index a) 概述 索引支持在MongoDB中高效地执行查询。如果没有索引&…

IDEA的使用(三)Debug(断点调试)(IntelliJ IDEA 2022.1.3版本)

编程过程中如果出现错误&#xff0c;需要查找和定位错误时&#xff0c;借助程序调试可以快速查找错误。 编写好程序后&#xff0c;可能出现的情况&#xff1a; 1.没有bug。 使用Debug的情况&#xff1a; 2.运行后&#xff0c;出现错误或者异常信息&#xff0c;但是通过日志文件…

go的面向对象学习

文章目录 面向对象编程(上)1.问题与解决思路2.结构体1》Golang语言面向对象编程说明2》结构体与结构体变量(实例/对象)的关系的示意图3》入门案例(using struct to solve the problem of cat growing) 3.结构体的具体应用4.创建结构体变量和访问结构体字段5.struct类型的内存分…

vue3 组件v-model绑定props里的值,修改组件的值要触发回调

很早之前就写了&#xff0c;一直没写篇博客记录下 <select v-model"typeVal" />const emit defineEmits([update:type]); const props defineProps({type: { type: String, default: }, });const typeVal computed({get() {return props.type;},set(value…

Docker-compose创建LNMP服务并运行Wordpress网站平台

一、部署过程 1.安装Docker #关闭防火墙 systemctl stop firewalld.service setenforce 0#安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 #设置阿里云镜像源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/d…

17基于matlab卡尔曼滤波的行人跟踪算法,并给出算法估计误差结果,判断算法的跟踪精确性,程序已调通,可直接运行,基于MATLAB平台,可直接拍下。

17基于matlab卡尔曼滤波的行人跟踪算法&#xff0c;并给出算法估计误差结果&#xff0c;判断算法的跟踪精确性&#xff0c;程序已调通&#xff0c;可直接运行&#xff0c;基于MATLAB平台&#xff0c;可直接拍下。 17matlab卡尔曼滤波行人跟踪 (xiaohongshu.com)

如何设计一个安全的对外接口?

转载 https://blog.csdn.net/weixin_46742102/article/details/108831868?spm1001.2101.3001.6650.1&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-108831868-blog-125359890.235%5Ev38%5Epc_relevant_anti_t3_base&depth_1-utm_…

Java中的枚举是什么?

Java枚举详解 枚举&#xff08;Enum&#xff09;是Java编程语言中的一种特殊数据类型&#xff0c;它用于表示一组具名的常量。枚举提供了一种更加类型安全和易于理解的方式来表示常量值&#xff0c;使代码更加清晰和可维护。 为什么需要枚举&#xff1f; 在介绍Java枚举的具…

你知道npm、yarn、pnpm的区别吗?

npm 嵌套的 node_modules 结构 npm 在早期采用的是嵌套的 node_modules 结构&#xff0c;“node_modules” 文件夹通常包含项目依赖的模块。在项目中使用多个依赖并且这些依赖本身也有它们自己的依赖时&#xff0c;就会出现嵌套的 “node_modules” 结构。 嵌套的 “node_mo…

【Redis学习1】Redis持久化机制详解

Redis持久化机制详解 一、Redis为什么需要持久化机制 Redis一般用作缓存&#xff0c;其数据存储在内存中&#xff0c;当Redis宕机后&#xff0c;内存中的数据将会丢失。因此使用缓存的时候&#xff0c;我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中…

Jetpack:004-如何使用文本组件

文章目录 1. 概念介绍2. 使用方法2.1 通用参数2.2 专用参数 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack组件在布局中的对齐方式&#xff0c;本章回中主要介绍文 本组件的使用方法。闲话休提&#xff0c;让我们一起Talk Android Jetpack吧 1. 概念介绍 我们在本章…

YOLOv7改进:SPD-Conv,低分辨率图像和小物体涨点明显,涨点神器!!!

💡💡💡本文属于原创独家改进:SPD-Conv,优势:处理低分辨率图像和小物体等更困难的任务时性能更优 SPD-Conv | 亲测在多个数据集实现暴力涨点,尤其是小物体检测你值得拥有,强烈推荐,独家首发; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨…

基于ffmpeg给视频添加时间字幕

FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序&#xff0c;我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕&#xff0c;字幕的内容为视频所播放的时间&#xff08;故需要安装ffmpeg&#xff0c;具…

Stream 流式编程创建及其常用操作方法

目录 Stream 对象如何创建 Stream 常用的操作方法 1.过滤&#xff08;Filter&#xff09; 2.映射&#xff08;Map&#xff09; 3.扁平映射&#xff08;FlatMap&#xff09; 4.截断&#xff08;Limit&#xff09; 5.跳过&#xff08;Skip&#xff09; 6.排序&#xff08…

ssti 前置学习

python venv环境 可以把它想象成一个容器&#xff0c;该容器供你用来存放你的Python脚本以及安装各种Python第三方模块&#xff0c;容器里的环境和本机是完全分开的 创建venv环境安装flask #apt install python3.10-venv #cd /opt #python3 -m venv flask1 #cd /opt 选…

吃透底层:从路由到前缀树

前言 今天学到关于路由相关文章&#xff0c;发现动态路由中有一个很常见的实现方式是前缀树&#xff0c;很感兴趣这个算法&#xff0c;故进行记录。 前缀树 Trie&#xff08;又被叫做字典树&#xff09;可以看作是一个确定有限状态自动机&#xff0c;尽管边上的符号一般是隐含…

Netty通信在中间件组件中的广泛使用-Dubbo3举例

Netty是一个高性能异步IO通信框架&#xff0c;封装了NIO&#xff0c;对各种bug做了很好的优化解决。所以很多中间件底层的通信都会使用Netty&#xff0c;比如说&#xff1a;Dubbo3&#xff0c;rocketmq&#xff0c;ElasticSearch等。 比方说&#xff0c;我们使用dubbo作为rpc跨…