使用点特征匹配稳定从抖动平台捕获的视频

简介: 使用点特征匹配稳定从抖动平台捕获的视频。

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

此稳定算法包括两个步骤。首先,我们使用应用于两个图像之间的点对应函数来确定视频序列的所有相邻帧之间的仿射图像转换。其次,我们扭曲视频帧以实现稳定的视频。
二、第 1 步。从影片文件中读取帧
在这里,我们读取视频序列的前两帧。我们将它们读取为强度图像,因为稳定算法不需要颜色,并且因为使用灰度图像可以提高速度。下面我们并排显示两个帧,并生成红青色复合来说明它们之间的像素差异。两个框架之间显然存在较大的垂直和水平偏移。
1.png
2.png

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

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

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

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

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

5.png

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

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

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

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

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

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

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

8.png

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

目录
相关文章
|
5月前
|
弹性计算 负载均衡 网络协议
这种情况可能是由于阿里云的API服务出现了短暂的故障或者网络波动导致的
【2月更文挑战第20天】这种情况可能是由于阿里云的API服务出现了短暂的故障或者网络波动导致的
127 1
|
5月前
网络延迟导致终端卡顿
网络延迟导致终端卡顿
|
机器学习/深度学习 自然语言处理 算法
|
5月前
|
安全 调度
影响RTOS实时性的因素
影响RTOS实时性的因素
|
11月前
|
缓存 网络协议 数据挖掘
如何使用弱网环境来验证游戏中的一些延迟问题
如何使用弱网环境来验证游戏中的一些延迟问题
|
存储 监控 数据可视化
01.崩溃捕获设计实践方案
01.崩溃捕获设计实践方案
176 3
|
数据采集 监控 前端开发
网络抖动对重复提交的影响与解决方案
网络抖动对重复提交的影响与解决方案
367 0
|
数据采集 缓存 算法
m基于多属性决策判决算法的异构网络垂直切换matlab性能仿真,对比网络吞吐量,网络负载,平均切换次数,阻塞率,回报值
m基于多属性决策判决算法的异构网络垂直切换matlab性能仿真,对比网络吞吐量,网络负载,平均切换次数,阻塞率,回报值
207 0
|
程序员 C++ 开发者
C++异常和错误处理机制:如何使您的程序更加稳定和可靠
在C++编程中,异常处理和错误处理机制是非常重要的。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C++中的异常处理和错误处理机制。
109 0