Facebook 新算法:如何让 360 度视频体验不再眩晕和抖动
本文由 ARinChina( www.arinchina.com )原创,转载请联系 ARinChina(微信 ID:arinchinaservice)
从专业相机到消费者手持摄像机,目前市面上已有数十款可以拍摄 360 度视频的机器,规格和质量也各有千秋。随着这些相机的普及,360 度视频内容的范围和容量也在不断扩大,人们开始在各种场合和环境中拍摄 360 度视频。
然而,拍摄时却很难避免晃动、保持相机稳定,特别是用手持相机拍摄运动对象(如骑山地自行车和徒步旅行)的时候。到目前为止,大多数视频稳定技术都是为窄视场视频设计的,如用手机拍摄的传统视频,但这些技术在拍摄 360 度视频时却不怎么好用。
因此,Facebook 决定为 360 度视频的拍摄,开发一项新的视频稳定技术。目前,这项技术已在测试中,预计将支持 Facebook 和 Oculus 平台。
Facebook 将这项新技术命名为 “变形旋转”运动模型 ,混合 3D-2D 技术用于优化模型参数,让 360 度视频更流畅。在视频质量相同的情况下,它能有效减少 10%~20% 的比特率,提高效率。在通信和计算机术语中,比特率表示在单位时间内可以传输多少数据。
在标准机器上,这项新技术能以每帧小于 22 毫秒的速度稳定 360 度视频。事实上,这个稳定速度比正常播放视频的速度更快。
除此之外,Facebook 的新技术还让 360 度视频也能快进,把一段冗长的视频(如长时间骑车)用更快、更好玩的方式播放。
为了达成这一功能,Facebook 在主体稳定算法之外,又开发了一个 360 度延时摄影算法。随着时间的推移,它改变了视频帧时间戳的定时,以平衡摄像机的速率。
下面,就让我们深挖一下 Facebook 新算法吧!
( 腾讯视频 )
创建一个新的算法结构:混合 3D-2D + 变形旋转模型
目前的视频稳定算法大多使用相同的结构:跟踪视频中的运动,寻找适配的运动模型,使运动变得更平稳,产生稳定的输出帧。算法之间主要的区别在于——如何为视频中运动建模。
大多数算法都是为窄视场视频设计的,用的是单一参数化二维运动模型,如全画幅视角(单应)扭曲。全画幅指的是相机里的感光元件的尺寸,跟原来的一张胶片大小一样,为 36*24mm。
虽然这些方法简单有效,但过于简单的模型无法描述复杂的运动,例如前景和背景的视差和抖动。
更先进的算法则采用更灵活的运动模式,但还只存在于学术出版物中。而这些先进算法,虽然能处理更复杂的运动,但又限制了视频拍摄的灵活性,以避免产生可见的几何变形。
另一类算法在三维环境下操作。通过重建摄像轨迹和场景的几何模型,并在三维环境中推理出稳定视频。因为采用了更准确的模型,这些算法具有更高的平稳能力。但三维重建方法操作起来比较慢,而且不稳定。
因此,Facebook 这次的混合 3D-2D 稳定架构,正式结合以上两类算法的优点。该架构只在关键帧的几秒间隔之内使用三维分析,并不是完全重建,只估算相对运动,因而更容易解决操作稳定性问题。
三维算法的用处体现在,它能够分辨出被拍摄的物体,究竟是在做旋转运动,还是平移运动。
对于内部帧(关键帧之间的剩余帧),Facebook 采用二维方法优化,采用了一种新的“变形旋转”模式,让视频运动尽可能的平稳。
“变形旋转”模式类似于一个全局循环,但允许轻微局部变形。Facebook 优化了模型参数,使其可以处理并撤消一定程度的平移抖动(如拿着相机走动时带来的上下摆动)、滚动快门伪影(rolling shutter artifacts)、快门变形(lens deformations)和拼接赝像(stitching artifacts)。
因此,来认识下混合 3D-2D 结构的优势:
- 精度: 比纯粹的二维方法更准确,因为使用了更强大的三维分析以稳定关键帧。
- 鲁棒性(Robust): 比纯三维方法更稳定,因为 Facebook 采用三维分析估算相对旋转,而无需完全重建。所谓“鲁棒性”,是指控制系统在一定(结构,大小)的参数摄动下,维持某些其它性能的特性。
- 正则化: 固定关键帧为内帧二维优化提供了一个正则参数,可以限制变形旋转运动模型,避免摆动伪影。
- 速度: 混合架构的性能比单纯进行三维分析或二维优化速度更快。
如何工作?
与现有的稳定算法类似,Facebook 也从视频中的运动特征点开始追踪。特征点既是一个点的位置辨识,同时也说明它的局部邻域具有一定的模式特征。
由于 Facebook 输入的视频采用的是等量矩形投影,因而画面两端高度扭曲,于是把帧数转换成不那么扭曲的立方体贴图(采用 256×256 分辨率),让运动跟踪能够顺利进行。
由于追踪产生的灰度图像质量很高,Facebook 得以在视频亮度平面上直接执行,避免因 YUV 到 RGB 的转换而浪费时间(YUV 和 RGB 为色彩编码方法)。
Facebook 采用 KLT 跟踪算法追踪关键点,并采用了一个重要概念—— 关键帧 。关键帧非常重要,可以用来估计被拍摄物体的相对旋转,为二维优化提供正则参数。关键帧散布在视频的不同位置,有些地方更密集,有些则较少一些。
然后,Facebook 采用五点算法估计连续关键帧之间的相对转动,来估算两个摄像机之间的相对旋转和平移。五点算法是指,当摄像机在两幅图像之间的运动为纯平移运动时,给定 5 对图像对应点,则可以线性确定本质矩阵。
用 3D 感知算法来估计旋转的优势在于,它能够区分平移运动和旋转运动。完成对所有关键帧旋转的预估后,把它进行逆变换,与视频的第一帧对齐。
现在,所有的关键帧已经稳定下来,就把它们锁定,而后把注意力放到中间帧的旋转上。
正如前文所述,对中间帧采用的是二维优化的方法,而不是三维分析法。优化的目的是让非关键帧的轨迹尽可能的平稳。由于中间帧的旋转已经固定了,提供的正则参数可以用来收敛非关键帧的轨迹。
在解决相机抖动问题的时候,往往会残余一定量的抖动,如前文提及的少量平移、滚动快门、次优镜头校正和拼接赝像。Facebook 的目的是增加一些灵活的运动模型,用来适应和撤销轻微的图像变形。
在“变形旋转”模型中,Facebook 用 6 个散落在不同位置的局部旋转代替全局单旋转,让局部低频偏差从纯旋转变成数据。
这一点至关重要,因为可以防止因运动模型太灵活而造成的漂移。Facebook 希望解决问题用的是引入更多数据,而非单纯的删除伪影。
优化速度、性能和效率
Facebook 开发这一新算法的目的,是让用户可以观看流畅稳定的 360 度视频,毕竟用户也不想把时间浪费在等待视频上传。因此,即便这一算法适用于 GPU,Facebook 也希望能在 CPU 上运行。
所以,Facebook 的做法是:选取一个 8*8 像素区域,用传统的包围盒算法计算其坐标,其他区域用双线性差值运算。
这种新算法比包围盒算法运算速度更快,与单纯用包围算法进行计算相比,显示效果差不多,但大大提高的运算效率。包围盒算法是用一个简单的图形代替复杂形状的算法。
下图总结了各算法阶段的性能,测量的是单个帧输入 / 输出 1080p 分辨率和时间。
事实上,Facebook 新算法的稳定速度,是比正常播放一段视频要快的:
播放视频的时候,显示每一帧大约需要 30 毫秒,而稳定一帧只需 20 毫秒。通过改进算法,Facebook 可以让直播的 360 度视频每一帧都不发生抖动。
除了速度之外,Facebook 还对效率进行了优化。
因为 360 度视频并不裁剪任何拍摄到的画面,所以可以被还原到最初的版本,因此稳定算法可以提高 360 度视频的比特率(比特率越高,传送数据速度越快)。但对于视频播放不会有任何影响,因为体验过 360 度视频的人大多已经习惯了旋转的视图。
稳定算法能够有效节省比特率,下图分析了通 x264 库(一个免费的软件库)把视频编码为 H.264/MPEG-4 AVC 格式时比特率的消耗,橙色代表滑雪,蓝色代表停下来休息。
如图所示,比特率的节省概率在 10%~20% 之间,取决于编码器的设置。
延时摄影算法
由于 Facebook 的新算法让 360 度视频看起来非常平滑,所以可以用来创建加速延时视频。创建一个延时摄影 360 度视频只需删掉一些内容,但每帧序列都应该能连接起来。
然而,延时摄影拍摄的一个共同点是平稳的平衡相机速率。例如,在拍摄一个滑雪视频时,滑雪者时而加快速度,时而停下休息,相机速率也在不断变化。
为了模拟一个不断移动的延时摄影镜头,需要暂时地平衡速度,并跳过休息的部分。
要做到这一点,首先用二维近似和平均运动矢量,估计每一帧的相机速率。然后,用时间中位数和低通滤波器把视频二次处理一下。低通滤波器是容许低于截止频率的信号通过、但高于截止频率的信号就不能通过的电子滤波装置。
通过相机预估速率,就可以改变原视频的时间戳。这样一来,就可以创建加速视频,把冗长的视频缩短。
下一步
Facebook 表示,这项新算法还在测试当中,希望能够得到用户的反馈。用户现在可以试着上传 360 度视频,把高质量,且观感更舒适的视频与朋友们分享。
接下来,Facebook 将致力于改进延时摄影算法,希望在不久的将来,能用到实时 360 度视频中。
本文编译自 Facebook Code,原文标题为 360 video stabilization: A new algorithm for smoother 360 video viewing 。
题图来源: qz