【编者按】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在背后默默地进行了如下处理:
- 来自解码器的视频帧会工作于新的回放速率。
- Cinema稳定器会即刻工作于一后台线程,根据新的回放速率和放大量进行智能放大计算和镜头方向重算。
- 在当前速率下,镜头重算数据和球形插值一起工作,输出修正后的帧。
- 一旦出现新的镜头方向数据,旧的数据会被替换。
以上步骤,都不会影响任何的播放体验,可以说是无声无息地完成的。
笔者之体验:
随即,笔者也下载了这款应用,试用后给我的感觉是简洁、方便。但心急吃不了热豆腐。使用时建议尽量延长录像时间(2分钟以上),并且选择动静变化较大的场景,例如:晚上熙熙攘攘的十字路口、川流不息的商业街道,最后得到的效果会令人赞叹。否则,如果在办公室那样安静的环境,录取了几十秒就迫不及待地去看效果,那么结果是会平淡甚至稍感失望的。
如果还想更多了解它对抖动帧的处理,不妨在录像时故意进行大幅度抖动或平移,然后选取几个原场景参照物(如灯管边缘,马路边缘)作为参考。对比下,最后输出的视频里,视野与抖动之间是什么关系,抖动与最后输出的平滑视频又有怎样的差别。
英文出自: Instagram-engineering
1 楼 deific 2014-09-03 17:38