CodingFlow:Enable video coding for video stabilization翻译总结
@[TOC](CodingFlow:Enable video coding for video stabilization)翻译
总结
先上个人总结:
- 利用所涉及的视频编码来恢复相机运动。直接从编码视频比特流中提取基于块的运动向量
- 然后对其进行操作,使其仅引用其先前的相邻帧。从被操纵的运动向量中估计一个新的编码流。
- 从而得到一个稀疏的运动场来描述空间变化的运动为一个高质量的视频稳定。
通过协议H264的编码过程中的计算量来恢复相机运动,这个想法还是比较新颖,在实际应用中可以提高计算效率,避免特征点匹配耗时。但是一般底层芯片将编码封装了,较难获得这些值。且与应用底层相关,因此适用性有限,后面还是精读MeshFlow。
摘要
视频编码关注视频的数据量。视频稳像在于消除运动相机的抖动。本文中,我们基于视频编码应用中的运动向量通过重建相机运动,使得视频编码用于视频稳像。现有的方法以来大量的图像特征恢复摄像机运动。然而,特征跟踪耗时且容易出错。另一方面,几乎所有捕获的视频在任何进一步处理之前都已经被压缩过了,并且这种压缩产生一组丰富的基于块运动向量。这些运动向量集可以用于估计摄像头的运动。
更具体的,视频稳像需要相邻两帧之间的摄像机运动。然而,从视频编码提取的运动向量可能涉及非相邻帧。我们首先表明,这些非相邻运动可以被转换成相邻运动这样在一帧内的每个编码块包含一个关于他相邻之前的帧的运动向量。我们规范化这些运动向量以在每帧产生空间平滑的运动场,命名CodingFlow,针对空间变量运动补偿进行了优化。
基于CodingFlow,我们最终设计了一个基于网格的2D方法用于完成视频稳像。我们的方法以效率和稳像质量来评价,同时定量和定性。评价表面,我们的方法对比sota (基于特征)方法达到了最高质量结果。
关键词:CodingFlow, video stabilization, video coding,
1. 介绍
通过运动设备捕获的视频,例如手持相机或者安装在车辆上的相机往往遇到较强的抖动,这种抖动严重的损害观看体验。视频稳像尝试改进视频质量通过移除不需要的摄像头运动,因此用在时域呈现平滑过渡的视频。现有的视频稳像方法大量依赖于图像特征用于恢复摄像头运动。一些方法,相邻两帧的图像特征匹配,其他的在特定帧范围(例如连续30帧)跟踪这些特征。特征匹配和跟踪非常耗时。例如他们占据了整个稳像系统的70%-80%运行时间。
更进一步,它们对摄像头的运动类型和场景内容敏感。例如,在快速相机运动的视频帧(快速摆动或缩放)经常导致低质量特征,因此特征匹配的数量或运动跟踪的长度受限。无纹理区域是干扰高质量特征检测的另一个挑战。另一方面,一些方法依赖陀螺仪用于恢复摄像头运动。然而,陀螺仪仅能平滑旋转运动,留下平移运动不能补偿。此外,陀螺仪没有应用于所有等级的摄像头。
视频编码目的在于移除空间(帧内编码模式)和时间(帧间编码模式)的冗余在原始视频数据中。几乎所有捕获的视频在存储和分发之前都已经被压缩。因为一个无压缩的视频很容易达到数十千兆字节。在帧内编码模式,图像块的运动向量通过多帧被估计出来。我们发现这些运动向量不仅仅连接相似内容的图像块,还提供揭示摄像机运动的强特征。然而,这些有价值的运动线索在所有现有基于特征的视频稳像被完全被忽略。本文,我们建议从视频编码中提取运动向量。因为所有于图像特征相关的处理(特征检测,特征匹配和特征跟踪)不再需要,我们提出的方法可以提供一个低得多的计算复杂度。同时,我们讲展示我们的方法可以提供一个与其他基于特征方法相比具有竞争性的表现。
早期的稳像方法,处理全局的运动,可以通过一个简单参数变换建模(放射或者单应性),不过,视频包含视差和深度变换往往需要空间变换的运动表达。帧的部分位置可以不同的被平滑,产生较少的运动残差。因此,我们对解决空间变化运动的方法更感兴趣。一般,这些方法可以分为2类,平滑长特征跟踪,和平滑多缓缓模型。如果是长特征跟踪,全3D或者部分3D结构可以被恢复,平滑这些可以产生高质量稳像。然而,长特征跟踪一般在用户视频中很难获得。特别的,跟踪长度和数据在相机快速旋转和缩放是会掉非常快。
两一方面,平滑多转换模对不同摄像头运动类型更鲁棒,因为它只需要相邻帧之间的特征匹配。这里,单帧常常分为几个部分和对每个部分估计局部变换模型,因此产生多仿射、单应性,或者甚至非参数稠密流代表了空间变化运动。本文,我们遵循多变换方法,但是通过从视频编码中提取的运动向量替换特征匹配。
注意,在视频编码中提取的运动向量可能不会必然对应摄像机运动,因为不是为估计摄像头运动设计的。事实上,事实上,一个视频编码中的运动矢量是指产生最低剩余补偿。在大量的实验之后,没有惊喜,我们已经发现大多数运动向量与摄像头运巧合的一致。这就是,如果一个图像块运动到一个位置,根据摄像头运动(光流或者块)这个地方也有一个高概率导致最小残差。当然,我们也注意到一小部分例外,违反摄像头运动,这些在我们方法被规范化。
本文中,我们提出一个新的用于视频稳像的运动模型,命名为CodingFlow,它是由视频编码过程中估计的运动向量构建的。CodingFlow是一个空间平滑和稀疏的运动描述相邻帧之间摄像机运动。对于P帧(预测帧)和B帧(双向参考),我们设计了两个递归算法来操作图像块的帧内运动在第t帧,使每一个只有关于它的前一个坐标系t−1。然后,一个规则的网格网格放置在每一帧上。每个网格的运动向量传播到它的网格顶点。值得注意的是,一个网格顶点可以接收多个运动矢量。CodingFlow是由通过中值给每个顶点分配一个唯一的运动向量空间平滑过滤器。接下来,路径优化是在顶点轮廓上进行,顶点轮廓是运动向量随着时间的推移在同一顶点位置收集。由于空间平滑性强,顶点配置文件可以独立优化,以便路径优化可以并行进行,以改进效率。最后,对稳定帧进行渲染到平滑的顶点位置。总结,主要我们的工作贡献是:
操纵帧间运动矢量的方法这样每一帧的这些被操纵的运动向量只指与它相邻的前一个坐标系。
CodingFlow,一个稀疏的运动场,由视频编码生成,用于空间变化的运动表示和稳定。
本文的其余部分组织如下。第二节概述了相关工作。第三节详细讨论了如何提取运动矢量,然后对p帧和b帧进行操作。第四节给出了CodingFlow的估计。第五节讨论了如何稳定CodingFlow以实现视频稳定。第六节从几个方面讨论了我们的方法。给出了实验结果。在第七节中与以前的方法进行比较。最后,第八部分对本文进行了总结。
相关工作
相关工作
A视频编码
视频编码的重点是通过删除原始视频数据冗余来减小数据的大小。有两种类型的
原始视频数据中的冗余:空间冗余时间冗余。前者指的是
在一个单一的相邻像素之间的结构相似性框架和后一个代表内容的相似性跨越
几个相邻的帧。在经典视频编码中,有两个编码方式,即内编码和间编码;
是为了消除这两种类型的冗余相应的行动。更具体地说,删除冗余视频帧是逐块执行的。在这两个编码方式,离散余弦变换(DCT)[18],量化和熵编码通常用于压缩每个图像块。在去冗余过程中,DCT起着相当重要的作用,它将图像块从像素域转换到频域,使块的能量更紧凑地压缩到几个系数中。最近,一些新的转换,如定向DCT (directional DCT, DDCT)[19]、[20]以及一些新颖的酉变换[21]等方法被提出来进一步提高性能。同时,为了支持基于硬件的实现,已经开发了整数DCT[22]。此外,在视频编码中引入了率失真优化(rate-distortion optimization, RDO)[23]原理,以平衡压缩过程中的比特消耗和编码失真。同时,长期以来已经证明,通过所谓的运动补偿预测(motion-compensated prediction, MCP)来去除时间冗余会变得更加有效[24],[25]。因此,所有的视频编解码器都采用了MCP来构建互编码模式。在MCP中,运动矢量(MV)用于从先前编码的帧中识别当前块的预测块。寻找最佳MV的过程称为运动估计(ME)。找到最优MV的最直接方法是进行穷举搜索。然而,这种搜索策略的代价很高。为了解决这个问题,人们提出了大量的快速搜索算法。目前被广泛认可的算法有三步搜索(TSS)[26]、新三步搜索(NTSS)[27]、四步搜索(4SS)[28]和菱形搜索[29]。
B 视频稳像
视频稳定方法可以大致分类成3 d [2], [9], [30], [31], 2 d [1], [5] - [7], [16]2.5D[3],[11]方法
模型。
Liu等人提出了一种基于全三维重建的三维方法[2]。Liu等[30]和Smith等[31]采用深度相机和光场相机进行鲁棒三维恢复。此外,为了更好地正则化,可以引入平面约束[9],[32]。同时,还采用陀螺仪进行三维方位的高效恢复[12],[13]。Jia和Evans在路径平滑过程中对三维旋转进行了约束[33]。一般来说,由于跟踪失败和场景退化,这些全3D重建是脆弱的
为了解决这一问题,一些2.5D方法可以将全三维重建的要求放宽到部分三维信息。例如,Liu等人提出在子空间中平滑特征轨迹以保持稳定过程中的三维关系[3],Goldstein和Fattal使用极几何来保持三维相干性[11]。这些部分3D信息被嵌入到长特征轨迹中。然而,由于相机的快速运动,在许多消费者视频中很难获得长特征轨道。
相比之下,二维方法只匹配相邻帧之间的特征。因此,它们对不同类型的相机运动更鲁棒。早期的二维方法估计每一对相邻的两帧之间的单个单应性,然后在可以连接它们后平滑所有估计的单应性,称为二维相机路径,用于稳定[1],[4]。最近,Grundmann等人估计了两个相邻帧之间的单一单应性,并采用电影规则进行摄像机路径设计[7]。然后,将单个单应性分成一个单应性阵列进行滚动快门校正[8]。同时,Liu等人采用“尽可能相似”的图像扭曲进行空间变运动估计[5],对捆绑的摄像机路径进行近似和平滑以实现稳定。用户交互可以进一步提高性能[34]。Liu等人估计了两个相邻帧之间密集且空间平滑的光流,并将原始流升级为空间平滑的定流以实现稳定[6]。最近,针对在线处理,根据图像特征匹配将密集流简化为稀疏流[35]。在这项工作中,我们采用了类似的想法,但使用从视频编码中提取的运动向量来估计空间平滑的稀疏流。
III.I NTER M OTION M ANIPULATION
虽然最新的视频编码标准是H.265/HEVC,但我们选择基于H.264/AVC框架来描述我们的帧间运动操作,因为它的结构没有H.265/HEVC复杂。
请注意,完全相同的处理适用于H.265/HEVC。在H.264/AVC中,每帧以大小为16 × 16的宏块为单位进行处理。每个宏块都可以采用帧内模式或帧间模式进行编码,前者旨在利用当前帧中的样本重建帧,后者则使用来自一个或多个参考帧的运动补偿预测。在这项工作中,我们重点研究了帧间模式。
在H.264/AVC中,支持树形结构的运动补偿策略,其中每个宏块可以进一步划分为更小的尺寸,包括16 × 8、8 × 16、8 × 8、8 × 4、4 × 8和4 × 4。该分割由编码器根据率失真优化(RDO)进行。例如,一帧中的一些图像区域由于其均匀性被划分为16 × 16,而另一些图像细节丰富的区域则可能对应较小的尺寸。
在接收到压缩的比特流后,我们可以很容易地提取出所有的运动向量。更重要的是,我们知道当前帧中运动向量对应的是哪个块,块大小是多少,以及运动向量表示的是哪个参考帧。在我们的运动间操作中,我们将处理单元的大小固定为4 × 4。也就是说,如果一个块有更大的大小,它的运动向量被复制并分配给所有块
块中的处理单元(大小为4 × 4)。例如,一个8 × 16块被分成8个4 × 4处理单元,所有单元共享相同的运动矢量。
一般来说,视频编码器使用4:2:0 YUV格式进行运动预测,其中亮度分量Y是高度和宽度的两倍,作为两个亮度分量U和v。在这项工作中,我们只从亮度分量中提取运动矢量用于运动操作。生成的CodingFlow根据色度组件相应地调整大小。
视频编码中有三种帧,即I、P、B帧。i帧被认为是关键帧。它是由p -帧和b -帧指代的基础帧。在我们的例子中,第一帧被设置为i。一个p帧可以引用它之前编码的帧(不一定是相邻的帧)来进行运动预测。一个b帧可以引用一个过去和一个未来的编码帧(同样,不一定是相邻的帧)。
A. Manipulation of P-Frame

图1显示了p帧的运动间操作示例。在这个例子中,我们在五个连续的帧中展示了五个具有相同空间位置的块,其中第一帧是i帧,其余是p帧。除了第一个,其他4个块都是指之前的一帧运动预测,其中运动向量用实箭头表示。具体地说,第一、第二块是指第一帧,第三块是指第二帧,第四块是指第一帧。请注意,这些引用是由视频编码器自动生成的,因为它们提供了最佳的编码性能。
我们在这里的工作是为第四个块导出所需的运动向量,它需要引用第三帧(如红色箭头所示)。我们将运动向量表示为v1,j,其中i和j是帧索引,从i指向j。对于图1所示的示例,第2块、第3块和第4块的运动向量分别表示为v2,0, v2,2和v1。一般来说,两个运动矢量可以相加:


实际上,期望的相邻运动向量v1,i−1总是可以通过操作可用的运动向量来获得。操作算法总结为算法1。

B. Manipulation of B-Frame
我们遵循分层编码结构,其中p帧在b帧之前编码。p -帧可以引用先前的p -帧或i -帧,但不能引用b -帧。一个b帧可以指两个方向或这两个方向中的任何一个来进行运动预测。图2显示了在两个b帧、两个p帧和一个i帧中具有相同空间位置的五个块的示例。同样,所有的方向都指的是
帧类型是由视频编码器决定的,因为它们提供了最好的编码性能。在这里,我们的工作是找到运动向量v3,2,由红色箭头表示,在第三帧。
在本例中,有两个候选项可用:

可以选择路径最短的或者残差最小的。前者提供最小的位移,而后者评估运动矢量的质量。为了计算残差,我们需要从编码残差层中提取残差并计算平方差(SSD)误差,这非常耗时。因此,我们选择路径最短的候选项。在这个例子中,


第一个候选人将被选中。注意,p帧通常由b帧分隔。因此,在计算了所有b帧的相邻运动后,为p帧建立桥梁,使所有帧都可以指向它们之前的相邻帧。处理b帧的算法概括为算法2。图3显示了我们的动作操作的一个示例。最初,b帧中的每个块可以用不同的帧间隔指向任意一个方向。在操作之后,所有块都引用它们相邻的前一帧。
C. Motion Tracking vs. Motion Profile

在我们继续讨论摄像机运动的估计之前,我们想澄清运动跟踪和运动轨迹之间的区别。运动跟踪起源于图像特征,在一帧上检测特征,并跟踪到后续的帧[10]。对于图像块,跟踪将导致块在不同帧的不同位置。图4(顶部)显示了一个示例,其中块根据其运动移动。注意,有些块可能会移动到帧外,从而终止跟踪。另一方面,运动轨迹总是在同一空间位置收集运动,导致整个帧在空间和时间上都密集覆盖。运动积累最早是在SteadyFlow[6]中引入的,其中光流为两个相邻帧之间的估计和像素轮廓是通过收集像素位置随时间的运动而产生的。文献[6]表明,在假设跟踪与像素轮廓内对应的运动在同一位置开始的情况下,像素轮廓中记录的运动与相应的特征跟踪得到的运动非常相似。在这里,我们借用类似的思想,通过收集上述运动操作后获得的所有运动向量来构建运动轮廓。
IV. C ODING F LOW E STIMATION
CodingFlow是一个稀疏但规则的运动网格,具有很强的空间平滑性,通过操纵从压缩视频比特流中提取的运动向量而生成。在本节中,我们将讨论如何估计和正则化CodingFlow。被操纵的运动间矢量是原始运动矢量(图3中的红色箭头)。这些原始运动矢量通常不适用于视频防抖,因为它们可能包含与摄像机运动不一致的“误差”。请注意,这些“错误”的动作在视频编码的背景下实际上是好的动作,因为它们产生的最小值残留。在视频防抖的背景下,我们认为它们是误差,因为它们不显示摄像机的运动。发生这些错误有几个原因。首先,在动态物体上提取的运动肯定与摄像机的运动不一致。其次,对于无纹理的区域,如蓝天、大海、白墙、道路等,不存在可微纹理。在这些区域进行运动估计的块匹配算法没有很好的约束,因此随机位置可能提供最佳匹配。第三,重复结构的存在可能会混淆块匹配。重复结构已被用于三维重建[36]、图像超分辨率[37]和图像编辑的补丁匹配[38]。它们在视频编码中是首选的,因为它们在运动预测期间提供了额外的候选。然而,这些区域的运动通常与摄像机的运动不一致。在视频防抖中应该排除错误的运动:否则平滑它们会引入严重的伪影。
重要的是要指出,我们的大量实验表明,大多数匹配确实遵循相机的运动,而只有一小部分遭受不一致。因此,我们可以用正确的运动来纠正这些错误的运动。该正则化过程包括两个步骤,一个是拒绝异常值的全局预处理,另一个是在CodingFlow估计期间提供进一步正则化的局部细化。
A. Global Motion Correction
我们使用全局单应性来识别异常值。参考图5(左),可以使用全局单应性识别和校正无纹理区域中的异常值。特别是,使用原始运动通过RANSAC异常值去除[39]来估计全局单应性F(t)。然后,利用估计的全局单应性计算所有块的全局运动向量。具体来说,我们通过单应性变换每个块的中心坐标,块的全局运动矢量是变换后的中心与原中心的差。值得注意的是,整个帧共享一个全局单应性,但它们的全局运动向量是不一样的。例如,如果一个帧进行顺时针平面内旋转,则左上角的块将向右上角方向移动,而右下角的块将向左下角方向移动。因此,每个顶点都有两个运动向量,一个是全局的,一个是局部的。计算它们之间的夹角。如果角度很小,我们保持局部运动;否则我们用全局运动代替局部运动。图5(右)为运动校正后的结果。值得注意的是,在进行稳定之前覆盖有问题的运动是特别重要的。图6显示了两个例子:有和没有全局运动校正。第一个例子包含一些重复的结构(背景上的窗口)。对于给定的窗口,块匹配算法可能会选择一个相似但不同的窗口,从而产生无法显示相机运动的运动。在第二个例子中,天空有更少的纹理来约束块匹配。这些区域的局部运动与相机运动不一致。
因此,平滑这些错误的运动将导致严重的内容扭曲,正如稳定的结果所证实的那样。具体来说,我们为图6所示的每个示例在一帧内提取了14080个运动向量。对于第一个和第二个例子,我们分别修正了23%和34%的运动。根据经验,校正的百分比取决于场景,范围在10% ~ 40%之间。更多的讨论将在实验部分给出。


B. CodingFlow Motion Model Estimation
CodingFlow在每一帧产生。图7显示了在一帧上生成CodingFlow的示例。具体来说,在每一帧上都放置了一个规则的网格。块(图7(a))的运动被传播到附近的网格顶点(图7(b))。每个块都可以为其周围的网格顶点贡献运动向量。因此,一个网格顶点从附近的块接收多个运动向量。
然而,每个顶点都需要一个唯一的运动向量,这是通过对所有候选运动应用中值滤波器来实现的(图7©)。中值滤波是密集光流估计中常用的一种方法。它被认为是高质量光流估计的秘密[40]。它不仅可以消除误差,还可以增强空间的平滑性。这里,我们对稀疏运动借用了类似的思想正则化。最终的CodingFlow是通过对所有顶点应用中值过滤器生成的,其中每个顶点被分配一个运动向量(图7(d))。CodingFlow描述相邻帧之间的摄像机运动。值得注意的是,CodingFlow的所有动作都来自视频编码。CodingFlow的估计过程包括全局单应性估计、一些运动分配和中值滤波,这些都是非常有效的。不涉及计算成本高的操作,如特征检测和匹配[41],密集光流[6],或“尽可能相似”的网格扭曲[5]。

V. VIDEO STABILIZATION
在本节中,我们将介绍如何稳定视频后
获取每一帧的CodingFlow。为了完整起见,我们首先描述平滑单个相机路径的方法,方法[1],[7]中也报道了类似的方法。然后,我们描述了如何平滑多路径以实现空间变运动补偿。
A. Stabilizing Global Camera Path
在前一节中,估计了两个相邻帧之间的单应性F(t)用于全局运动校正。实际上,F(t)编码了相邻帧的全局摄像机运动。传统的二维稳像方法[1],[5],[7]是根据图像特征来估计的。在这里,它是通过操纵从视频编码中获得的运动向量来获得的。在第t帧处的相机路径被定义为所有这些相邻的同形异义词的连接:


第一项强制稳定的视频保持接近原始摄像机路径,以避免一些伪影,如过度裁剪和抖动。第二项鼓励路径的平滑度。稳定帧是通过使用变换B(t)对输入视频帧进行扭曲生成的,定义为B(t) = C−1 (t)P(t)[5]。
每帧的加权系数λ t对抑制伪影起着重要的作用。如果λ t对所有t都= 0,则最优路径等于原始路径。因此,输出视频等于输入视频,导致没有作物和没有摆动。[5]的方法采用迭代细化的方法,对每一帧寻找λ t的最优值。最初,所有λ t都被设为1,并且Eq.(4)被最小化。然后,对每一帧的裁剪进行评估。如果某些帧不满足预要求,即空白区域不超过一帧的20%,则相应的λ t减小一步,例如0.1,并重新运行优化。直到所有帧满足前置要求,进程才终止。
使用全局摄像机路径的缺点是它不能处理空间变化的运动,这是高质量稳定非常需要的特性,特别是对于具有深度变化的场景。下面给出了一个改进的解决方案。
B. Stabilizing CodingFlow
图8显示了CodingFlows在几个视频帧中的示例。像素轮廓是通过收集同一像素位置的运动随着时间的推移而产生的[6]。在这里,我们在网格顶点位置生成像素轮廓。图8显示了在四图像角。内部顶点的轮廓不显示在这个例子中。摄像机路径定义为:
四图像角。内部顶点的轮廓不显示在这个例子中。摄像机路径定义为:

其中{p I (t)}为顶点位置I的优化轮廓。
在所有顶点上优化概要文件会产生优化的CodingFlows。每个顶点的更新运动向量b i (t)计算为:b i (t) = p i (t) - c i (t),将其应用于所有顶点在每帧产生新的网格。通过网格引导下的图像翘曲,可以得到稳定的视频。
在这里,所有配置文件都是独立优化的。因此,它们可以并行处理以提高效率。在捆绑路径方法[5]中,局部摄像机路径通过时空优化进行优化,其中强制执行相邻局部路径之间的相似性约束。很容易理解,如果估计的流动在空间上是平滑的,那么邻近的局部轮廓非常相似。因此,没有必要强制执行额外的空间相似性。下一节将给出更多的讨论。所有的轮廓对于每一帧都有相同的λ t。同样,采用迭代细化方法。以前,基于同形性的相机路径被用于图像作物的评估。在这里,四个角的四个像素轮廓用于评估。具体来说,在对Eq.(6)进行优化后,取四角轮廓进行计算它们的更新向量b i (t)。在每一帧中,四个角变换后形成一个新的矩形,这使我们能够近似作物。如果作物不满足,则放宽相应的λ t
VI. D ISCUSSIONS
A. Interference of Intermediate I-Frames
第一帧是i帧,并且总是使用intra模式进行编码。然而,其他中间i帧会引起一些麻烦,因为每个i帧都与其前一帧隔离,因此无法从编码的比特流中提取运动向量。在这种情况下,我们回到使用传统的方法,即检测中间i帧与其前一个相邻帧之间的图像特征。然后,通过由全局单应性引起的运动估计其CodingFlow。
B. Interference of Intra Mode
在视频编码中,P帧或B帧的某些块可能会选择帧内编码模式,即不需要运动补偿,也就是说没有运动矢量可用。相应的块称为内部块。由于这些内部块,一些顶点没有接收到任何运动向量。在这种情况下,将分配全局运动。如果帧中的大部分块(例如,超过50%)是内部块,CodingFlow估计将变得不准确。然后,这个帧将被视为一个中间i帧。从我们的实验来看,一帧内块的比例通常在10%以内。
C. Flow Comparisions
我们将CodingFlow与一些现有方法进行比较,以验证其有效性。我们在图9中展示了两个示例:第一个示例是动态的,第二个示例是静态的。我们展示了bundle -paths5、steadyflow6、MeshFlow35、
以及我们的CodingFlow(图9(e)),其中bundle -paths, MeshFlow和CodingFlow已被插值到密集的运动场中进行视觉比较。我们还显示了SSD方面的翘曲错误,标记在每个流的左上角。直接平滑原始光流会造成畸变,特别是在不连续运动边界处。
视频稳定方法更倾向于空间平滑的流场,而不是具有丰富运动细节和运动边缘的流场。关于稳定运动场的详细讨论可以在[6]中找到。可以看到,与其他方法相比,我们的CodingFlow非常相似。也得到了类似的结果
几乎在我们所有的实验中。虽然我们的方法产生的运动场的空间变化在一定程度上得到了平滑,但它既不依赖于图像特征,也不依赖于昂贵的密集光流,因此便于各级便携式硬件的实现。

VII. E XPERIMENTS
我们在一台配备Intel i7 2.5GHz CPU和16G RAM的笔记本电脑上运行我们的方法。我们在稳定化中记录组件的速度。对于分辨率为720×480和网格分辨率为16 × 16的帧,我们未优化的c++实现可以在大约18ms内处理一个帧。具体来说,我们分别花费3ms, 2ms, 2ms, 8ms和3ms进行运动操作,全局运动校正,编码流估计,平滑和帧渲染。
表1显示了用于比较的其他一些方法的速度。Epipolar和捆绑方法的瓶颈是图像特征的跟踪。SteadyFlow所需的密集光流估计在计算上也是非常昂贵的。另一方面,MeshFlow和我们的方法可以实现相似的速度,这是很多得更快。虽然MeshFlow在PC上非常有效地实现了特征跟踪,但MeshFlow中涉及的许多功能/处理不容易转移到其他平台(例如嵌入式平台)以保持相同的质量和效率。相反,视频解码已经成为几乎所有视频相关应用的必修课。到目前为止,在不同平台上实现视频解码的各种功能/处理已经付出了很多努力。因此可以直接在我们的CodingFlow中使用。最后,请注意,我们没有计算表1中视频解码的运行时间,因为如果输入视频以编码格式给出,那么这里比较的所有方法都需要相同的解码。

我们进行了各种实验来证明我们方法的有效性和强度。视频示例(共28个视频片段)来自[5]-[7],[11]收集的公共数据集。图10显示了这些视频剪辑的缩略图。我们进行了两种类型的实验来评估CodingFlow的内在属性,然后根据一些客观指标来评估稳定性的质量。
A. Number of Motion Accumulations
我们之前提出的运动操作需要在运动之间累积,包括运动加法和减法,这样一帧中所有块的运动都只参考其相邻的前一帧。值得注意的是,累积的数量是至关重要的。数量大可能会引入一些漂移误差,导致精度不高。没有任何操作,这个数字是1。一个加减法将使数字增加1。表2总结了每个示例中所有帧中所有块的平均数量。可以看到,这个数字非常小,这表明编码器倾向于搜索相邻的相邻帧来进行运动间预测,这对于我们的运动操作来说是一个非常好的属性。
B. Valid Inter Motions
一个内部运动只要通过了全局运动校正,就被认为是一个有效的运动。换句话说,如果一个运动向量对Codingflow的估计有贡献,它被视为一个有效的运动,尽管它可能被中值滤波器丢弃。全局运动校正剔除与摄像机运动完全不一致的误差,中值滤波平滑噪声以提高精度。我们总结了表三中28个例子的有效交互动作的百分比。在每个示例中,我们记录每一帧的有效性,并取所有帧的平均值作为最终值。效度从60%到85%不等,例8的效度最低为62%,例13和例21的效度最高为85%。注意,例8包含了很大一部分阶梯这种重复的结构会混淆块匹配算法;而例13和21则充满了有助于块匹配的可微分纹理。相比之下,缺乏丰富的纹理会导致低百分比,如例22(冰地)和7(蓝天)。在例22中,除了糟糕的纹理,急剧移动的背景进一步降低了运动的有效性。注意,图10中的缩略图可能不会保留视频的足够信息。请参考项目页面的这些视频与更全面的印象。
C. Warping Errors
我们根据扭曲误差来评估运动估计的质量。在这里,我们根据第t帧的CodingFlow将t帧向t- 1帧扭曲。在两帧之间计算SSD的平均错误。我们跳过帧边界以排除任何黑色区域。我们对每个示例中所有帧的所有SSD错误取平均值。表4总结了SSD的平均错误。我们还计算了bundledpaths[5]、SteadyFlow[6]和MeshFlow[35]的扭曲误差进行比较。如表4所示,我们的性能与这些现有方法相当。SteadyFlow的性能略好于其他软件。bundle -paths方法采用SURF特征实现尽可能相似的网格扭曲,SteadyFlow计算密集光流作为运动源,MeshFlow跟踪图像特征。我们的CodingFlow是轻量级的,既不需要外部运动计算,也不需要最小化网格刚度正则化的最小二乘,但在配准质量方面产生可比较的结果。

D. Objective Evaluations
为了评价稳像质量,我们采用了三个客观指标:裁剪率、失真和稳定性,这些指标在文献[5]中提出。为了获得好的结果,这些指标应该接近于1。为了完整起见,我们首先在下面简要地描述这些指标。
1)裁剪比:评价裁剪掉黑色边界后的有效面积。更大的比例意味着更少的裁剪。它是通过在每个输入帧和输出帧之间找到一个单应性来估计的。利用单应性的尺度分量估计每帧的裁剪比例。取最小的比例作为最终的裁剪比例。
2)失真评分:评估稳定帧的抖动失真。类似地,估计输入帧和输出帧之间的单应性。然后,根据单应性的各向异性尺度估计失真分数。
特别地,它是由仿射部分的两个最大特征值的比值来计算的。同样,采用最差分数作为失真分数。
3)稳定性评分:评价稳定后视频的平滑度。从稳定的视频中提取顶点轮廓进行评价。具体来说,我们在频域中分析每个顶点轮廓。我们取几个最低频率(第2到第6)并计算能量
全频率百分比(无直流分量)。最终得分是通过对所有剖面进行平均得到的。我们从28个例子中选择了12个(图10),并将我们的方法与[3]、[5]、[6]、[11]的方法进行比较。其他方法的结果要么从他们的项目页面收集,要么由我们自己生成。对于不提供结果的视频,我们将其留空。如图11所示,与这些最先进的稳定方法相比,我们的方法可以产生相当的,有时甚至更好的结果。最重要的是,除了我们的方法,所有其他方法都依赖于图像特征来进行运动估计。另一方面,我们的方法有效地利用了所涉及的视频编码,自动提供必要的运动向量。因此,它几乎完全避免了对所有帧(除了中间的i帧和一些不好的P帧或B帧)进行特征检测、匹配和跟踪的耗时过程。
E. Failure Cases
当与相机运动相对应的交互运动数量不足时,我们的系统可能会失败。一般来说,运动间有效性百分比需要保持在50%以上才能成功稳定。虽然非常低的有效性很少发生,但它确实存在于一些极端情况下,例如拍摄纯白色的墙壁或戏剧性地摇晃。图12为三种失效情况。第一个是在一个有三堵白墙的走廊里拍摄的。第二张是在一架飞行中的无人机上拍摄的,背景没有纹理。第三个周期包含突然剧烈震动的时期。所有这些例子都会产生不良的相互运动,稳定会导致摆动扭曲(前两种情况)和不稳定的运动(第三种情况)。
VIII. C ONCLUSION
我们提出了一种视频稳定方法,利用所涉及的视频编码来恢复相机运动。在我们的方法中,直接从编码视频比特流中提取基于块的运动向量,然后对其进行操作,使其仅引用其先前的相邻帧。从被操纵的运动向量中估计一个新的编码流,从而得到一个稀疏的运动场来描述空间变化的运动为一个高质量的视频稳定。进行了大量的实验和定量评估,并与几种最先进的方法进行了比较,表明了我们提出的方法的有效性
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
