本系列主要介绍视频编解码芯片的设计,以HEVC视频编码标准为基础,简要介绍编解码芯片的整体硬件架构设计以及各核心模块的算法优化与硬件流水线设计。
本章首先介绍360°全景视频系统的架构,包括视频获取、动态传输和渲染显示的部分,简单介绍了几种现有的全景视频投影方案。接着本章提出了一种新型的基于立方体模型和像素渐变分布策略的球形投影方案ARcube投影。最后在实验分析中,ARcube表现优异,在均匀性,运行效率和比特率占用方面均优于现有的方案。
1
VR视频概述
随着信息时代日新月异的发展,人们不断地追求更新奇的感官体验。虚拟现实技术的概念近年来被互联网大范围地普及,而全景视频也逐渐进入了人们的视野。虚拟现实(Virtual Reality, VR),也称灵境技术,是指通过计算机软件、专用硬件,用视频/图像、声音或者其他信息来产生一个虚拟的三维空间的技术。虚拟现实技术提供给用户一种沉浸式的虚拟环境,让用户感觉仿佛身临其境,并且可以实时地、不加限制地在模拟的三维空间中进行互动、移动、控制等操作。
本章旨在研究VR技术中的360°全景视频系统,而非VR游戏系统。360°视频系统,也指360°全景视频的采集、编码、传输以及显示系统。该系统可以划分为四个部分:首先,由一个到多个摄像机组成的全景摄像机矩阵系统来进行全景图像或视频的获取;然后,将获取到的球形全景图投影为二维的矩形图像用以编码和传输;接着,将投影并编码好的视频流通过互联网或以太网传输到用户机器中;最后,将获取到的视频流解码并反投影为球形全景视频用以渲染现实。整个系统的流程图如下图所示。

01

360°视频的拍摄采集
360°全景视频采集的问题起源于计算机视觉领域的一个经典研究问题:图像拼接(Image Stitching)。下图阐释了OpenCV实现的图像拼接的一个流程图,并且也是OpenCV中的Stitch类所实现的模块图。这个流程图与Lowe的图像拼接论文[1]极为相似。
图像拼接不一定是用来生成全景图的。早期的图像拼接是用于大型文件的扫描和影印,或者大视角、高分辨率图形的生成。后来,图像拼接也被手机的“摄像”功能采用后,由用户进行手动的旋转拍摄操作后生成一个柱面全景图。然而,如果用图像拼接技术来生成360°全景图像或视频,则需要考虑其他方面的因素和难题。
例如,如果要覆盖全视角的360°×180°视场角(Field of View , FOV)的全景图,基于普通相机视场角较小的特性,一般需要使用几十个小视场角的普通相机且相机之间视场需要相互覆盖才能完成。如果使用鱼眼镜头,鱼眼镜头一般具有大于120°的大视场角,因此只需要最少两个,最多六个左右的鱼眼镜头即可实现360°全视角的覆盖。鱼眼镜头的焦距通常很短,在6-16毫米之间,视角可超过180°,甚至多达270°。鱼眼镜头可以根据不同的设计模型分为四种:体视投影、等距投影、等立体角投影和正交投影。这四种模型是根据其投影公式来区分的,其投影公式如下表所示:

360°全景视频采集的算法来源于静态的图像拼接算法。但是,要保持视频拼接的质量需要一组高度同步的多摄像机系统。视频拼接的首先条件是相机的相对位置保持不变,简单的算法也要求视频背景大致保持不变,然后经以下几个步骤进行视频拼接[2]:
(1) 用背景帧(第一帧)初始化拼接模板,初始化时间通常较长
(2) 用第一帧的模板(参数)直接处理后面的视频帧,加快计算速度
(3) 检测是否有前景物体经过融合区域,或经过缝合线(seam line)
(4) 如果有物体经过,更新缝合线和拼接模板,按新模板拼接
(5) 如果没有物体经过,按照前一帧的模板直接拼接
后来,视频拼接的主流方法是视频拼接和视频稳定一起做,具有代表性的工作是Heng Guo[3]。该工作以视频稳定为主,同时加入了视频拼接约束项,拼接速度比以往的工作快很多,文中称720p视频实时拼接可以达到2fps。

02

全景视频的投影编码
现有的视频编码技术如HM(HEVC Test Model)或x265都只能对平面的矩形视频进行编码。由上一节可知,由360°摄像机采集到的360°视频本质上是位于球面的视频,如果要360°视频进行编码传输从而能够上传到互联网上,则必须要将球面视频转换为平面的矩形视频,才能利用现有的编码器编码。这种球到平面的映射过程(Sphere-Plane Mapping)就称为360°视频的投影。因此一个关键的问题是选择怎样的投影方法将球面的内容投影到平面上,才能实现不产生过多的畸变和失真,同时也希望不发生过多的信息丢失或信息冗余,还要保证图像的连续性、编码器友好性较高呢?如何巧妙地选择一种投影方式能够兼顾以上列出的一些性质是至关重要的。
① 均角度立方体投影EAC
均角度立方体投影(Equi-angular cube mapping,EAC)是由谷歌工程师提出的一种受到渐变映射启发的投影方式,其投影示意图如下图所示。
EAC的投影坐标变换公式与Unicube非常类似,与Unicube不同的是它的着眼点在于投影后的角度间隔而非距离间隔,因此取得了相比Unicube更均匀的整体像素分布密度。但是其存在的问题是边缘处有很明显的像素密度畸变。它的重分布计算公式如下:
② 正八面体投影OHP
正八面体投影(Octahedron projection format,OHP)使用了八个正三角形来组成正八面体模型,并以其作为球面的外接形状进行投射投影的方式,模型如下图所示。更多的面数使其相对CMP有了很多的像素均匀性。
但是由于每个面是正三角形,并不能直接展开成矩形,所以需要使用特殊的方式来实现矩形输出。有两种思路:第一种是将正三角形延展成直角三角形,然后两两拼接成小的矩形之后,将四个小矩形最终拼接成为一个大的矩形输出;另一种方式是将其中的两个正三角形分割成两半,并分别摆放在上方与下方,组成矩形。
③ 球面条带投影SSP
球面条带投影(Segmentedsphere projection,SSP)[4]的思路是将球面上接近赤道的区域剥离成条带状,而将两级区域的像素投影成圆形,如下图展示的就是赤道双条带+两极圆形的投影方式。在实际使用中可以灵活调整,可以根据实际情况调整不同条带内的投影方案。一种策略是靠近赤道区域的观看可能更大的区域采取计算量更大的均匀性更高的投影方案,而两极区域由于观看可能性不高,所以考虑使用高效但质量一般的投影方案,并且划分条带数目也能够自由调整,在观看质量和计算复杂度之间寻找平衡。
④ 金字塔棱台投影TSP
金字塔棱台投影(Truncated square pyramidprojection format,TSP)[5][6]模型如下图所示。其投影模型为正方形棱台,并不是传统的每个面都是相同形状,这样的做法是为了在受到传输带宽限制之时,能够将视场内的图像以高画质传输,即适用于视区切换方案。
棱台底面为用户的视区(正前方),该区域中的像素以原分辨率进行采样和投影;而棱台侧面为有可能接下来被看到的区域(左右以及上下),以原分辨率进行采样投影,并形变成梯形,并与底面一起填充一个大正方形面;而顶面为用户接下来几乎不可能被看到的区域(背面),因此以最低的分辨率进行投影,在360Lib[7]中的做法是用了4倍下采样正方形面。这样的灵活投影采样率策略能够最大程度地在保证用户观看质量的同时减轻带宽压力,只要用户的观看视角移动没有超过某个阈值,该方法能够提供质量相对稳定的观看体验。

03

全景视频的动态传输
在过去的几年中,随着计算机网络技术的高速发展,网络中视频的分辨率越来越高,并且,除了早期流行的PTZ(pan-tilt-zoom)的网络公开课视频以外,近些年来360°全景视频越来越频繁地成为高分辨率视频的代名词。同时360°视频是本章的研究重点,传输这种超高分辨率的360°视频需要非常高的网络带宽连接。但是,和利用PTZ相机采集的可以进行平移-放缩的讲课视频(以下简称为PTZ视频)一样,360°全景视频的一个特点是通常服务器端不需要传输整个视频,而可以根据用户的实时视角信息(用户FOV)只传输用户所观看的部分。因此,只传输用户需求的FOV(通常只占完整视频的五分之一左右)的这种方法可以节省大量的传输带宽,从而减轻网络的带宽压力,等价于在限定带宽下传输所需视角内最好的视频质量,给用户最优的体验感。通常说来,优化360°视频传输的目标可以总结为以下两个方向:
(1) 在保证用户FOV内视频质量情况下,降低传输的码率(StreamedBR)
(2) 在给定的带宽限制下,提高用户的体验(QoE, Quality-of-Experience)
解决这些问题的方法可以大致分为三个方法:
(1) 可变图像分辨率投影:根据用户的FOV获取偏好,对视频的不同区域编成不同分辨率或不同质量的视频,例如被用户频繁获取的部分以高分辨率来编码,而其余部分以低分辨率来编码,从而降低传输码率;
(2) 基于感兴趣区域的动态传输:以特殊的编码方式如基于tile的编码方式来处理源视频,因此可以根据用户的实时FOV位置信息只传输用户能看到的部分而不传输其余部分,从而降低传输的码率;
(3) 运动模式预测:在“基于感兴趣区域的动态传输”方法中,由于有传输延时,因此不能很好地获取用户的实时位置。这时根据用户以前的运动轨迹对当前的位置进行预测是十分重要的,这种预测模型的准确度也会大大影响传输的码率和用户体验感。

04

全景视频的渲染显示
单目360°视频可以直接在应用程序或一些多媒体社交服务平台如YouTube或Facebook中观看。当然YouTube和Facebook也提供了平面到球的投影渲染,提供三维的虚拟空间观看体验,使读者能够获得动态的VR视频体验过程。已经编码的平面360°视频一般采用等距圆柱投影格式(ERP)以方便观看,因此可以直接在视频播放器如VLC中解码播放。但是,VLC不具有360°视频的渲染功能,因此要获得360°视频的三维投影建模,必须使用一些图形渲染工具如OpenGL(Open Graphics Library)。
OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序接口(API, Application ProgrammingInterface),可以用来从简单的图形比特绘制复杂的三维景象。另一种功能相似的程序接口是仅用于Windows系统上的Direct3D。由于OpenGL具有很好的跨平台性,因此常用于虚拟现实构建、科学可视化程序和电子游戏开发等。如果想进行简单的VR编程实验,可以利用OpenCV和OpenGL进行C/C++语言编程实现。
当前发行的前沿头戴式显示设备如Samsung Gear VR、Sony PlayStation VR、Oculus Rift、HTC Vive等可以准确地追踪用户的头部运动轨迹,据此来提供相应的动态高质量FOV来实现沉浸式体验。并且这些先进的头戴显示设备通常可以提供立体的双目360°视频,实现高达110°FOV、2K分辨率和90Hz的刷新率,能够带来非常震撼和逼真的用户体验。
2

新型投影方式ARcube

由于现有的全景视频投影方式都存在着图像质量和投影效率之间相互掣肘的问题,因此本节提出了一种新型的基于立方体模型的投影方式,命名为ARcube(Average Ratio Cube Mapping Projection),它的创新点和性能提升体现在角度均匀性上。下面详细介绍ARcube的实现方式。

01

ARcube从球面到立方体的投影
ARcube与其他的投影方式最大的不同是它用到了“角度均匀性”的概念。传统的投影方法往往只是简单地通过生成插值像素来填补格式转换过程中产生的“真空”区域,这些无中生有的像素点不仅占用了额外的带宽,而且还会对后续的反投影过程产生影响,对图像质量进行二次损失。
为了实现球面和平面上不同均匀性定义的相互转化,ARcube使用了名叫“等角度投影”的策略。该策略能有效提升投影后图像的质量保持度。
为了简化问题,我们使用一个单位球和一个边长为两个单位的立方体来进行问题描述。投影效果如下图所示,其中P0(x0,y0,z0)是球面上的待投影点,而P'(x',y',z')是依照CMP格式得到的投影点,而P(x,y,z)是通过ARcube投影得到的像素点位置,如下图(b)所示,此处的P(u,v)和P'(u',v')转化为了平面中的坐标表示。为了能看得更直观,我们取出截面O1EFO2来进行分析,如下图(c)所示。
首先采用的是和CMP相同的步骤,即先得到立体坐标中的绝对值最大者,它表征了目前处理的像素点落于立方体六个面中的哪一个上:
然后使用它来对坐标做正则化,得到相应的CMP转化结果:
在这里,不失一般性地,我们认为|z0|是三者中最大的。并且我们可以注意到,在计算投影坐标的时候,横纵坐标u, v是相互独立无耦合的,因此我们可以单独拿出其中一个来进行分析,此处以u轴坐标作为分析对象。在图中有一个距离量D,它表示了投影结果所在位置的垂直线距离球心的距离,这个距离将随着待投影像素点位置的变化而变化。
首先计算线段EC对应的圆心角θ,这个值代表了在该投影位置下能够分到的最大角度:
而P'对应的圆心角为:
因此我们可以得到一个比例α'/θ,可以用它来指导我们投影后平面上满足等角度投影点的位置,所以我们可以得到ARcube从球面到立方体面的坐标转换公式如下:
相应的反变换公式,即从某个立方体面到球面的投影变换公式如下(同样在认为|z0|是三者中最大值的情况下):

02

参数D的最佳取值
上述的坐标变换公式和反变换公式中都出现了参数D,它的几何含义是投影球的中心到当前投影的立方体面上的格栅之间的距离,称为垂直投影距离。这个距离将会随着待计算的点在球面/立方体面上位置的变化而变化,总体的趋势是自立方体面中心到边缘变化时该距离会越来越大。垂直投影距离的计算公式如下所示:
公式里的δ为当前选择的格栅线段与立方体面中心线段之间的夹角。
由于处于不同格栅上的像素点都有着不同的垂直投影距离,如果在进行投影变换公式的计算时,对每个像素点都用其对应的D值带入,那将会大大增加计算量;同时还会产生在坐标轴的x和y方向上的计算耦合,因为在横向格栅上进行基于每个像素点的特定投影距离的渐变分布计算时将会改变像素点的竖向格栅位置,导致后续的计算陷入到无尽循环之中。因此对每个像素点都用其对应的D值进行计算显然不是一个好主意。
所以本节采取的方法是固定参数D的值,即选择一个最佳的D值来作为上述变换和反变换公式中的参数。为了寻找最佳的D值,我们进行了实验,通过在一个合适区间范围内对取各个固定D值时的投影后图像E2E-SPSNR值进行分析,发现得到的D值-图像质量曲线有且只有一个明显的峰值,位于1.06和1.07之间,说明确实存在理论上的最佳D值。曲线如下所示:
由于再提高步长精度对于提升图像质量的帮助已经几乎微不可见,所以最终取定变换公式中的D值如下:
3
实验测试与结果分析

01

角度均匀性
ARcube实现了更均匀的像素分布,这意味着在用户观看视野内的图像失真程度更低,从而改善了用户的观看体验。由于与用户观看视野内的图像质量直接相关的是投影球面等角度像素覆盖的一致性,因此我们进行实验来对ARcube投影后的角度均匀性进行验证。
如上图,不失一般性的,我们首先把立方体面的中线A1B1(对应投影到球面1/4赤道弧线A1'B1')线段10等分,取出位于最中间1/10位置处的弧线对应的一对像素(记为pair a)和位于最外侧1/10位置处的弧线对应的一对像素(记为pair b),在球面上这两对像素对应的圆心角是相同的,而它们在反投影回平面后的线段宽度将会不同。pair a在平面上的长度就是(面中心线段的)中心间隔,pair b在平面上的长度就是(面中心线段的)边缘间隔。同理,对面边缘线段A2B2进行相同的操作就能得到(面边缘线段的)中心间隔和(面边缘线段的)边缘间隔。角度偏差就是比较上述的间隔之间的差值大小,差值越小说明该种投影方式在均匀性和图像保持力度方面的表现越好。
结果如下表所示。CMP的等角度保持能力最差,有严重的失真问题。Unicube在中心偏差和边缘偏差上的严重程度都超过18.00%,而EAC最大可能地消除了中心偏差,但是代价是边缘偏差极其严重,这会令观看者感觉到画面边缘有严重畸变。而ARcube在中心和边缘角度的均匀性保持上都有着不俗的表现,说明它能够以很好的效果实现球面和立方体面之间的像素投影过程。

02

像素分布均匀性
为了能够直观地比较ARcube在提升观看体验上的功能,我们进行了像素分布均匀性实验。
首先,我们分别根据Unicube,EAC,CMP和ARcube的投影原理对同一个均匀分布的正方形面进行投影。我们在立方体的面上标记了三个相同大小的圆形区域来表征需要保持形状的纹理内容。然后我们观察它们投影到球体上后的结果来直观地比较像素分布均匀性。实验结果如下图所示。
通过观察球体上圆形区域的变形,我们可以直观地确定每种投影方法的形状保持能力。CMP,Unicube和EAC在中央和边缘区域之间具有严重的纹理变形,而ARcube极大地抑制了这种不均匀性,并从中心区域到拐角区域都很好地保持了纹理形状的一致性。

03

综合验证
在本章的最后我们对投影方式的性能进行了综合验证。实验平台搭建在在配备Intel Core i7-7700CPU @ 3.60GHz,双GTX 1080 Ti,64GB RAM和Samsung 850EVO 1TBSSD的计算机上。
由于360Lib仅收录了CMP投影,因此我们通过修改相关的代码实现了将Unicube,EAC和ARcube内嵌到360Lib内来进行实验。360Lib接收ERP格式的全景视频作为输入,并支持多种客观的全景视频专用质量指标。在我们的实验中,选择了由JVET发布的十个全景通用测试序列作为参考序列。所有序列均为ERP格式,具有相同的分辨率4096×2048,并且每个序列帧率为30帧/s。在编码后文件带宽占用率的比较上,在常见测试条件[8]中指定的四个量化参数值(即17、22、27、32)下计算BD率并取平均,选择CMP作为BD速率计算的基准方法。由于OHP和TSP的图像排列不同于CMP,因此与CMP进行BD速率比较是没有意义的。最终的综合评估结果如下表所示。
同时由于像素分布均匀性比较是专门为基于立方体的投影方法设计的,因此表中没有OHP和TSP在这方面的相关实验结果(中心偏差,边缘偏差和最大偏差)。下表的结果表明,基于立方体模型的投影方式相对于其他方案来说确实有着明显的优势,而ARcube在图像质量方面超过了其他所有的投影方案。在BD率这一项上的实验结果表明,ARcube能够在带宽有限的情况下提供更高质量的图像观看效果,又或者在保持同等图像质量的情况下节约更多的传输带宽。在时间开销上,ARcube相对于CMP并没有明显的耗时增加,完全处于能够接受的程度,因此它的综合性能十分均衡。
同时在不同分辨率的输入视频下重复上述实验得到的结果如下图所示,能够发现ARcube在不同的视频分辨率情况下具有很强的鲁棒性,并且随着分辨率的增加,它在保持图像质量上相对别的投影方案的优势不断增加。
参考文献:
[1]M. Brown and D. Lowe.Automatic panoramicimage stitching using invariant features[J].International Journal of ComputerVision 74, 2007(1):59-73.
[2]He B, Yu S. Parallax-robustsurveillance video stitching[J].Sensors, 2016, 16(1):7.
[3]H. Guo, S. Liu, T. He, S. Zhu, B. Zengand M. Gabbouj.Joint video stitching and stabilization from moving cameras[J].IEEE Transactions on Image Processing, 2016, 25(11): 5491-5503.
[4]Pei Qikai, Guo Juan, Lu Haiwen, MaGuilong, Li Wensong, Zhang Xinyu.COP: A New Continuous Packing Layout for 360VR Videos[A]. Virtual Reality[C].IEEE, 2018:18-22.
[5]G. Van der Auwera, M. Coban, H. Fnu, M.Karczewicz.AHG8: Truncated Square Pyramid Projection (TSP) for 360 VideoContent[A]. Joint Video Exploration Team of ITU-T SG16 WP3 and ISO/IECJTC1/SC29/WG11[C].JVET-D0071, 2016.
[6]C. Zhang, Y. Lu, J. Li, Z. Wen.AhG8:Segmented Sphere Projection (SSP) for 360-degree Video Content[A]. Joint VideoExploration Team of ITU-T SG16 WP3 and ISO/IEC JTC1/SC29/WG11[C].JVET-E0025,2017.
[7]J. Boyce, E. Alshina, A. Abbas, and Y.Ye.JVET common test conditions and evaluation procedures for 360 degreevideo[A]. Joint Video Exploration Team of ITU-T SG16 WP3 and ISO/IECJTC1/SC29/WG11[C].JVET-D1030, 2017.
[8]K. Sühring and X.Li.“JVET common test conditions and software referenceconfigurations[A].document ITU-T SG16 WP3, ISO/IEC JTC1/SC29/WG11[C].JVET-B1010,2016.

关 注 我 们 
实验室网站:http://viplab.fudan.edu.cn/
OpenASIC官方网站:www.openasic.org
知乎专栏:http://zhuanlan.zhihu.com/viplab
微信公众号:OpenASIC
继续阅读
阅读原文