基于陀螺仪的视频稳定非线性滤波器
Abstract
我们提出了一种对移动设备上捕获的视频进行视频稳定和滚动快门校正的方法。该方法使用来自机载陀螺仪的数据来跟踪相机的角速度,并且可以在相机捕获期间内实时运行。我们消除了由于手抖动引起的小抖动和滚动快门失真,营造出在三脚架上拍摄的视频的效果。
Introduction
大多数中高端移动设备包含一个多核 CPU 复合体、一个图形处理单元 (GPU) 和一个带有 3 轴陀螺仪的惯性测量单元 (IMU)。 在本文中,我们解决了在此类设备上执行视频稳定的挑战,使用陀螺仪进行运动跟踪。 与大多数稳定方法不同,它们作为捕获视频的后处理步骤运行,我们的方法可以作为相机捕获的一部分实时运行。
Background and Prior Work
视频稳定消除了视频中的抖动,它本质上是一个三阶段过程,包括运动估计阶段、平滑测量运动的滤波阶段和生成新视频序列的重新合成阶段。
当深度变化引起像素运动时,基于图像的跟踪方法会受到影响,视差,单应性不容易建模。此外,滚动快门成像传感器可以引入非刚性的帧到帧对应关系,不能简单地通过全局帧到帧运动模型进行建模。为了解决滚动快门问题,Baker 等人 [8] 使用低频光流的时间超分辨率估计和去除相机的高频抖动。Grundmann 等人 [3] 开发了一个基于混合单应性的模型,该模型跟踪帧内运动并生成具有校正滚动快门失真的稳定视频。 Liu 等人 [6] 采用基于网格的空间变化运动表示,结合自适应时空路径优化,可以处理视差并校正滚动快门效应。
Karpenko [1] 和 Hanning 等人 [11] 描述了使用内置陀螺仪跟踪相机方向的移动设备的视频稳定技术,将线性低通滤波器应用于陀螺仪输出。Karpenko 等人 [1] 使用高斯核,而 Hanning 等人 [11] 应用可变长度的 Hann 窗口来自适应地平滑相机路径。相比之下,我们引入了一种非线性滤波方法,该方法可以完全平坦化小运动,而不管频率如何,并在虚拟摄像机必须移动以将裁剪窗口保持在输入帧内时执行低通平滑。当相机几乎静止时,我们的虚拟相机被固定,消除所有抖动。移动时,我们的方法就像一个可变 IIR 滤波器,以平滑输出的方式将输入速度与虚拟相机速度混合,同时保证它跟踪输入,以便裁剪窗口永远不会离开输入帧。
Algorithm Description
从概念上讲,可以通过创建一个裁剪矩形来实现视频稳定,该矩形在相机四处晃动时随场景内容逐帧移动。如图
1 所示
Camera Tracking Using the Gyroscope
我们将相机运动建模为全局坐标系中的旋转。陀螺仪提供了一系列带有时间戳的离散角速度测量值,我们将其积分以生成描述相机方向的时间函数。 理论上,我们还可以通过使用设备的加速度计测量平移来更精确,但实际上这很困难且价值有限。如果相机距离平面场景 3 米,那么 1 厘米平移引起的图像运动相当于旋转 0.19 度。 此外,平移的使用需要了解场景中物体的深度。
为了修复卷帘快门失真,我们需要知道特定行曝光时相机的方向。 给定帧
其中
我们可以通过计算其对应的行时间戳并从已知样本中插入相机方向来找到与图像中点
x
对应的设备方向。由于硬件和软件延迟,帧时间戳和陀螺仪时间戳之间存在小的偏移,我们假设这个偏移
我们使用具有焦距 f 和投影中心 (cx, cy)
的投影相机模型;这三个参数定义了相机固有矩阵 K。这些参数使用 OpenCV
库进行离线校准。在已知 K
矩阵的情况下,滚动快门传感器在旋转运动下捕获的两个不同帧上的对应点
其中旋转矩阵
其中
Motion Model and Smoothing Algorithm
我们在每一帧用相机的方向和角速度参数化相机路径。我们用四元数
我们的平滑算法创建了一个新的相机路径,当测量到的运动足够小以表明实际意图是保持相机静止时,该路径使虚拟相机保持静止,否则遵循测量运动的意图,角速度平滑变化
. 作为第一步,我们通过设置假设虚拟相机的新方向。
and
这里
如果假设裁剪多边形的任何部分位于内部区域之外,我们将更新虚拟摄像机的角速度以使其更接近物理摄像机的变化率:
这里
其中
该算法运行良好,但当裁剪矩形突然碰到边缘时,它有时必须快速改变速度。
如果帧在处理之前可以在相机流水线中缓存一小段时间,那么可以检查更大的陀螺仪数据时间窗口,并且可以抢先避免急剧变化。
在本节的其余部分,我们扩展了我们的算法以使用来自前瞻缓冲区的数据来计算更平滑的路径。
我们可以通过将虚拟相机的方向及时向前投射并将其与“未来”时间的实际方向进行比较来跨越更大的帧窗口。让 a 是向前看的帧数,并假设:
然后,我们可以计算
其中 γ 是一个混合因子,它定义了我们应该将多少前瞻角度变化与当前角度变化混合。 使用接近 1 的 γ 值提供了在正确方向上的先发制人的推动,而不是硬约束。 请注意,我们不会在没有前瞻的情况下更新我们计算的虚拟摄像机位置,我们只会更新我们将用于下一帧的虚拟摄像机速度
图 3 显示了一系列前瞻距离(以帧为单位)的路径比较。 较大的前瞻值会产生更平滑的路径,因为它们可以有效地“预测”较大的运动并轻轻地导致输出开始移动。但需要注意的是,我们的算法可以在没有前瞻的情况下工作并且仍然产生良好的结果。
Output Synthesis and Rolling-Shutter Correction
一旦我们计算了虚拟摄像机的新方向,我们就可以通过将裁剪多边形从视频输入投影到虚拟摄像机来合成输出。我们的裁剪多边形本质上是一个裁剪矩形,在垂直边缘上有多个拐点,如图
4
所示。拐点允许我们对多边形的每个切片使用不同的变换并修复滚动快门失真。对于每个切片,我们根据等式
2 计算单应矩阵。 我们将旋转矩阵
Parameter Selection
最重要的参数是输出裁剪多边形的大小以及分配给内部和外部区域的填充量。裁剪大小是平滑和图像质量之间的权衡:较大的裁剪多边形保留更多的输入图像,但留下较少的填充来平滑运动。填充分配是完全去除运动和剩余运动的平滑度之间的权衡。 如图 5 所示,较大的内部区域(绿色)能够使较大的运动(例如步行)变平,但当裁剪窗口接近框架边缘时必须更突然地移动。
Gyroscope and Camera Calibration
我们使用为此目的开发的校准程序来求解时间偏移
陀螺仪测量中任何静态偏移的积分将导致估计的方向缓慢偏离地面实况。然而,我们的稳定算法不受这种漂移的影响,因为它平滑了方向的相对变化。 我们在一到五帧的窗口内测量方向变化,在如此短的时间跨度内,积分漂移可以忽略不计。
Results
我们的源视频、结果和补充材料视频可在 https://research.nvidia.com/publication/non-linearfilter-gyroscope-based-video-stabilization 获得。
参考文献
< A Non-Linear Filter for Gyroscope-Based Video Stabilization >