英文原文:The Technology behind Hyperlapse from Instagram
Instagram 是全球知名的社交网络之一,用户数量高达数亿人。日前,Instagram 推出了一款新视频应用 Hyperlapse。它是一种延时摄影技术或功能,用户们可以利用该应用将长时间拍摄的视频压缩成一段很短的视频,从而创建出“高质量的延时视频”并导入 Instagram。
对于这样一款应用,很对业界人士认为它将很快被主流用户接受并对所有人乃至整个社会造成巨大的影响。很多人都会好奇,它是如何实现的?采用了哪些算法、技术原理?本文将为你一一揭秘!
译文如下:
8 月 27 号,Instagram 正式推出了能让手机进行高质量延时摄影的应用—Hyperlapse,目前推出的是 iOS 版本并且加入了可缓解轻微抖动的算法。星空轨迹、云海泛波这些以前只能在探索频道才能看到的大片,现在都可以通过自己的手机来“自嗨”一番了。对于一般用户来说,手持安全快门的极限基本是1/30~1/20 秒,对于动辄 10 多分钟乃至几小时的延时摄影来说,如何有效消除抖动,还原最清晰的图像是难点所在。
打开 Hyperlapse,它只有两个圆形按钮,一个用于对焦,一个用于开始录像,但是它真的就这样简单吗?它背后又藏有怎样的奥妙?延时摄影算法作者 Alex Karpenko(2013 年,Instagram 收购了初创公司 Luma)接下来将会从算法和技术原理的角度来为大家进行讲解。
影片稳定(Cinema Stabilization)
要想来一段流畅顺滑的视频,影片的稳定与否起着决定性作用。比方说电影拍摄,我们所看到的那些完美的第一人称视角运动影片,都是拍摄者戴着高端动作分离器来完成的,把多余的抖动从中分离然后计算,最后进行镜头补偿等专业处理。但是对于手机用户而言,最高端最便捷的设备就是手中的爱机了。因此我们为它开发了 Cinema 系统,利用的硬件是手机内建的陀螺仪,用来测量和消除抖动。陀螺仪的原理就是:一个旋转物体的旋转轴所指的方向在不受外力影响时,是不会改变的。因此如果 T2 时间的镜头方向(轴方向)与 T1 时间有差别,那么 T1T2 之间的影片就可能是抖动时产生的,我们要做的就是找出这些缺陷影片,进行去粗存精。
下面是 Cinema 稳定算法的示意图。
输入:
输出:
正确的镜头方向(镜头校正)。简单来说,就是排除抖动或外力震动等干扰因素后,得到的正确镜头方向数据(源方向)。
然后,去粗后的镜头方向数据会作为筛选条件,进入第二个处理环节-影片筛选(StabilizationFilter),该流程如下所示:
每个输入帧都会根据去粗镜头方向数据进行修正处理,然后输出稳定影片帧数据。
下面的这段视频说明了 Cinema 算法是如何进行镜头清抖处理的。在最终输出的影片中,外围白线范围内为可视区域,被拉伸变形的帧永远不会超出既定的白线边缘,因为我们的稳定算法在计算时,除了提供修正处理,还会考虑变形造成的过渡不连贯问题,避免在最终影片中出现诸如白边超界等突兀问题。我们采用的方法是拉伸修剪,简单说我们把一个图片旋转了某个角度,那么边角地方可能会出现留白情况,稳定算法就会计算这个留白位置,给出缓冲范围,然后把图片进行拉伸,把留白填满,从而变得“圆满”。
点英文原文查看视频
镜头方向计算采用离线计算模式,同时稳定筛选器将以 30fps 帧速率进行高速图像加成。此外,我们还混合使用了 FilterKit,它构建于 OpenGL 之上,在实时图像处理方面也进行了优化处理。
Hyperlapse回放稳定(Hyperlapse Stabilization)
在 Hyperlapse 中,提供了一个进行回放速率调整的滑块按钮。可调(快进)范围是 1X 到 12X 倍速。
在 Cinema 算法中,我们只会按需进行镜头重算,因此被重算的帧才会被进行拉伸补白处理。经过该有选择性的处理后,在更长延时摄影中,即使输入的不稳定视频帧数量可能会有所增加,最终输出的都是过渡自然、平滑的视频。具体可参见下面的示例影片:
点英文原文查看视频
自适应缩放(Adaptive Zoom)
如前所述,我们会利用图像放大来抵消图像转向的留白问题。一般情况下,这是以牺牲分辨率为代价的。然而,在 Cinema 中,会根据抖动量来进行智能放大处理。请看下面的示例:
点英文原文查看视频
左边的视频只出现了少量的抖动,因为是固定拍摄的。在该情况下,我们只需进行微调放大处理即可,杀鸡焉用牛刀嘛。右边的视频是行走状态下拍摄的,抖动就比较厉害了。因此,放大的缓冲量会有所增加以足够抵消抖动影响。由于放大后,可视范围变小,因此在分辨率和稳定变换之间需要作一个权衡。我们的战略是以分辨率为主。在高回放速率下(例如 12x),我们会考虑每个可提速的因素进行调整。
综合
台上 10 分钟,台下 10 年功。每当你进行滑块调整时,Hyperlapse 在背后默默地进行了如下处理:
以上步骤,都不会影响任何的播放体验,可以说是无声无息地完成的。
笔者之体验:
随即,笔者也下载了这款应用,试用后给我的感觉是简洁、方便。但心急吃不了热豆腐。使用时建议尽量延长录像时间(2 分钟以上),并且选择动静变化较大的场景,例如:晚上熙熙攘攘的十字路口、川流不息的商业街道,最后得到的效果会令人赞叹。否则,如果在办公室那样安静的环境,录取了几十秒就迫不及待地去看效果,那么结果是会平淡甚至稍感失望的。
如果还想更多了解它对抖动帧的处理,不妨在录像时故意进行大幅度抖动或平移,然后选取几个原场景参照物(如灯管边缘,马路边缘)作为参考。对比下,最后输出的视频里,视野与抖动之间是什么关系,抖动与最后输出的平滑视频又有怎样的差别。