基于matlab使用点特征匹配稳定从抖动平台捕获的视频(附源码)

一、前言

此示例演示如何稳定从抖动平台捕获的视频。稳定视频的一种方法是跟踪图像中的显著特征,并将其用作锚点以消除与其相关的所有扰动。但是,此过程必须了解第一个视频帧中这种显着特征的位置。在此示例中,我们探索了一种无需任何此类先验知识即可工作的视频稳定方法。相反,它会自动搜索视频序列中的“背景平面”,并使用其观察到的失真来校正摄像机运动。

此稳定算法包括两个步骤。首先,我们使用应用于两个图像之间的点对应函数来确定视频序列的所有相邻帧之间的仿射图像转换。其次,我们扭曲视频帧以实现稳定的视频。

二、第 1 步。从影片文件中读取帧

在这里,我们读取视频序列的前两帧。我们将它们读取为强度图像,因为稳定算法不需要颜色,并且因为使用灰度图像可以提高速度。下面我们并排显示两个帧,并生成红青色复合来说明它们之间的像素差异。两个框架之间显然存在较大的垂直和水平偏移。

三、第 2 步。从每一帧中收集突出点

我们的目标是确定一个能够纠正两帧之间失真的变换。作为输入,我们必须为这个函数提供两个帧之间的一组点对应关系。为了生成这些对应关系,我们首先从两个帧中收集兴趣点,然后选择它们之间可能的对应关系。

在此步骤中,我们为每个帧生成这些候选点。为了最好地使这些点在另一帧中具有相应的点,我们需要围绕突出的图像特征(如角)的点。

从两个帧中检测到的点如下图所示。观察其中有多少个覆盖了相同的影像要素,例如沿树线的点、大型路标的拐角和汽车的拐角。

四、第 3 步。选择点之间的对应关系

接下来,我们选择上面派生的点之间的对应关系。对于每个点,我们提取一个以它为中心的快速视网膜关键点(FREAK)描述符。我们在点之间使用的匹配成本是汉明距离,因为 FREAK 描述符是二进制的。帧 A 和帧 B 中的点假定匹配。请注意,没有唯一性约束,因此帧 B 中的点可以对应于帧 A 中的多个点。

匹配在当前帧和前一帧中找到的特征。由于 FREAK 描述符是二进制的,因此 matchFeatures 函数使用汉明距离来查找相应的点。下图显示了上面给出的相同颜色合成,但添加了来自 A 帧的点(红色)和来自帧 B 的点(绿色)。在点之间绘制黄线以显示通过上述过程选择的对应关系。其中许多对应关系是正确的,但也存在大量异常值。

五、第 4 步。从噪声对应估计变换

在上一步中获得的许多点对应都是不正确的。但是我们仍然可以使用 M 估计器 SAmple 共识 (MSAC) 算法得出两个图像之间几何变换的可靠估计,该算法是 RANSAC 算法的变体。MSAC 算法在estgeotform2d 函数中实现。当给定一组点对应时,此函数将搜索有效的内在对应关系。然后,它将从这些中得出仿射变换,使第一组点的内在与第二组的内在最匹配。此仿射变换将是以下形式的 3×3 矩阵:

参数一个定义变换的比例、旋转和切变效果,而参数t是翻译参数。此变换可用于扭曲图像,以便将其相应的要素移动到相同的图像位置。

仿射变换的一个限制是它只能改变成像平面。因此,它不适合找到3D场景拍摄的两帧之间的一般失真,例如从移动的汽车拍摄的视频。但它确实在我们将稍后描述的某些条件下起作用。

下面是一个颜色合成,显示帧 A 与重新投影的帧 B 叠加,以及重新投影的点对应关系。结果非常好,内在对应关系几乎完全重合。图像的核心都对齐良好,因此红青色复合在该区域几乎变成纯黑白。

请注意,内在的对应关系都在图像的背景中,而不是在前景中,前景本身没有对齐。这是因为背景要素足够远,以至于它们的行为就像在无限远的平面上一样。因此,即使仿射变换仅限于改变成像平面,这里也足以对齐两个图像的背景平面。此外,如果我们假设背景平面在帧之间没有移动或显着变化,那么这种转换实际上是在捕捉相机运动。因此,纠正此问题将稳定视频。只要摄像机在帧之间的运动足够小,或者相反,如果视频帧速率足够高,则此条件将保持不变。

六、第5步。变换近似和平滑

我们通过拟合上述获得的转换来展示下面的转换过程H具有刻度-旋转-平移等效物,HsRt.为了表明转换转换的误差最小,我们使用两种转换重新投影帧 B,并将下面的两个图像显示为红青色合成。由于图像显示为黑白,显然不同重新投影之间的像素差异可以忽略不计。

七、第 6 步。在完整视频上运行

现在我们应用上述步骤来平滑视频序列。在每一步,我们计算转换H在当前帧之间。我们将其拟合为 s-R-t 变换,描述了自第一帧以来的所有摄像机运动。平滑视频的最后两帧在视频播放器中显示为红青色合成。

在计算过程中,我们计算了原始视频帧和校正帧的平均值。这些平均值在下面并排显示。左图显示了原始输入帧的平均值,证明原始视频中存在大量失真。然而,右侧校正帧的平均值显示了几乎没有失真的图像核心。虽然前景细节变得模糊(这是汽车向前运动的必要结果),但这显示了稳定算法的有效性。

八、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序下载:基于matlab使用点特征匹配稳定从抖动平台捕获的视频资源-CSDN文库

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

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

相关文章

亚马逊云科技中国峰会聚焦生成式AI等前沿科技,探讨当下时代的挑战与机遇

6月27日,“2023亚马逊云科技中国峰会”在上海世博中心盛大启幕! 亚马逊全球副总裁、亚马逊云科技大中华区执行董事张文翊全面阐述了在当下这个挑战与机遇并存的时代,面对生成式AI等前沿科技带来的新挑战和新机遇,企业需要“面向未…

使用 Docker 高效搭建本地开发环境(详细教程)

Docker本地开发环境的好处 试错 对开发者而言,每天会催生出的各式各样的新技术都需要尝试,然而开发者却不太可能为他们一一搭建好环境并进行测试。时间非常宝贵,正是得益于 Docker,让我们有可能在一条或者几条命令内就搭建完环境…

阿里巴巴开源Chat2DB v1.0.11 初体验

阿里巴巴开源Chat2DB v1.0.11 初体验 前言什么是Chat2DB下载安装安装配置Chat2DB初体验配置数据源准备测试数据认识几个功能菜单开始测试自然语言转SQLSQL解释SQL优化 使用总结后续功能结语 前言 作为一名阿里巴巴开源项目的拥护者,从Chat2DB开源至今都有关注这个开…

Spring 项目过程及如何使用 Spring

文章目录 1.创建 Spring 项目步骤1.1 创建 Maven 项目1.2添加 Spring 框架支持1.3 添加启动项2.如何使用 Spring2.1 存储 Bean 对象2.1.1 创建 Bean对象2.1.2 将 Bean对象注册到容器中 2.2 获取并使用 Bean对象2.2.1 使用 ApplicationContext 获取对象2.2.2 使用 BeanFactory 获…

【裸机开发】GPT 定时器(三) —— 使用GPT实现高精度延时

延时最简单粗暴的方式就是使用空循环来延时,依赖的是时钟主频(默认是396M)来计数,一旦修改了 6ull 的时钟主频,延时效果就会存在偏差。 因此我们可以使用 EPIT 或者 GPT 的计数功能实现高精度延时,EPIT 是…

探索MediaPipe的人像分割

MediaPipe是Google开源的计算机视觉处理框架,基于TensorFlow来训练模型。图像分割模块提供人像分割、头发分割、多类分割。本文主要探索如何实现人像分割,当然在人像分割基础上,我们可以做背景替换、背景模糊。 目录 一、配置参数与模型 1…

【AIGC】BaiChuan7B开源大模型介绍、部署以及创建接口服务

模型介绍 baichuan-7B是由百川智能开发的一个开源的大规模预训练模型。基于Transformer结构,在大约1.2万亿tokens上训练的70亿参数模型,支持中英双语,上下文窗口长度为4096。在标准的中文和英文权威benchmark(C-EVAL/MMLU&#x…

探索思维导图:提升思维能力与效率的利器

思维导图作为一种强大的思考工具,已经被广泛应用于各个领域,从学习、工作到创意思维和项目管理。 本文将为您介绍思维导图的基本概念、使用方法以及它对思维能力和效率提升的价值。通过学习和掌握思维导图,您将能够更系统地组织和表达您的思…

M3 architecure

using one picture from arm document . 1. 3级别流水线哈弗架构 采用三级流水线,为了简单,常见的流水线5级,对于带有OOOB的12级较为常见,足可见M3的架构简化了很多 2. thumb 加ARMV7-M ISA 指令集就是硬件和软件的中间交互规则…

群载波应急广播主机的应用

一、 概述 群载波主机是专为山洪灾害预警、气象预警、地质灾害预警设计的一款智能IP群载波主机。该群载波主机可通过网络实现与控制中心通讯,用户可实时远程控制功放的开关机状态以及检测设备的主要信息。群载波主机主要用于接收网络信号,与控制中心通讯…

剑指 Offer 33. 二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 观察数组我们可以得到一些初始数据。 数组的最后一位元素为根。根的左子树小于根数据,右子树…

Java面试题及答案整理( 金九银十最新版,持续更新)

最近可能有点闲的慌,没事就去找面试面经,整理了一波面试题。我大概是分成了 Java 基础、中级、高级,分布式,Spring 架构,多线程,网络,MySQL,Redis 缓存,JVM 相关&#xf…