查看原文
其他

计算机视觉方向简介 | 阵列相机立体全景拼接

sixgod 计算机视觉life 2019-06-22

   坚持原创,点击上方蓝字关注我


有什么用?

全景相机(详见《5分钟了解全景相机》)现在在日常生活中已经比较常见,不同的全景相机外观、性能、价格等差别还是挺大的(详见《全景相机哪家强?》)。消费级全景相机主要用于生活自拍、个人直播等,而专业级全景相机可用于专业全景直播、专业VR内容制作、影视拍摄等。


其中,基于阵列相机的立体全景拼接无疑站在全景相机生态链的顶端。普通的全景相机只能生成二维全景图像,而立体全景图是由两张具有一定视差的左右全景图组成,因此合成的全景图是具备深度信息的,用VR头显观看这样的立体全景图/视频时,就像用3D眼镜观看360° x 180°环绕的沉浸式巨型屏幕,身临其境的感觉就像在真实的物理世界一样。


目前具备这样功能的设备主要有两种:Google Jump和Facebook Surround 360(详见《最牛全景相机——Facebook Surround360原理解析》)。本文以Google Jump为例介绍。如下图所示:(a) 是Jump的阵列相机圆盘(b) 通过16个相机拼接好的立体全景视频。


什么原理?

先来看看硬件设计方案。主要有如下两种设计方案:(a)切向设计和(b)径向设计。切向设计中一半相机负责立体全景图中的左视图,一半负责右视图。径向布局设计中每个相机同时负责左右视图中的一部分。径向设计只需要在相邻图像间进行插值,而切向设计需要间隔一个相机进行插值,这使得基线增大一倍,难度也更高。因此,径向设计更适合大圆盘半径而切向设计更适合于小圆盘半径。


相机的数目和参数如何选择?


我们知道硬件设计是非常重要的,好的硬件平台可以极大方便算法的开发和调试,避免走弯路。这对于视觉效果要求极高的立体全景设备而说,有过之而无不及。阵列圆盘的半径、相机数目、视场角有严格的约束关系。


硬件设计完成后,就到了最重要的环节:立体全景拼接算法。拼接算法流程图如下图所示:


1、首先需要对所有的相机进行标定,得到每个相机的内参和外参。


2、稠密光流场计算。该算法将水平方向的光流近似作为深度的倒数(视差)。该光流算法可以保持较清晰的边缘,如下图所示。(a)、(b)是输入的两帧,(c)是该方法得到的保持边界清晰的光流场。对(d)中(第1帧图)的一个小区域,在(e)中(第2帧图)较大范围内进行搜索并计算得到一个归一化的误差平方和(f)。根据块光流及其置信度图(g),从而得到用色彩、饱和度、明度表示的初始的光流(h),最后经过双边滤波等后处理方法得到最终边界清晰的光流场(i)。


3、曝光校正。为了能够得到较大的曝光范围,该阵列全景相机都设置为自动曝光模式。但这会带来一个严重的后果,就是相邻的相机因为朝向不同,曝光量可能会差距特别大(能够达到3倍)。这不仅会造成拼接困难,还会因为左右眼曝光差异过大给3D效果带来极大的不适感。如下图所示,(a)、(b)、(c)中上半部分表示立体全景图中的左视图,下半部分表示右视图。(a)是未进行曝光校正的结果,左右图曝光差别较大(b)是HDR校正结果,可以看到校正后出现了过曝,(c)是本算法校正后的结果。


4、融合。融合方法比较复杂,这里不再赘述,详见最后的参考资料。最后对每个像素进行了基于间隔的融合,我们得到了两张全景图,一张对应左眼一张对应右眼。


效果怎么样?

Google Jump官方的立体全景视频在VR设备上观看还是很震撼的,由于具备了深度信息,真实感特别强。感兴趣的读者可以用VR眼镜(调整到上下3D模式)观看如下视频感受一下:

https://v.qq.com/txp/iframe/player.html?vid=l1331027chc&width=500&height=375&auto=0

该方法也并不是尽善尽美,在一些情况下会出现比较明显的拼接问题。下图列举几个例子:


(a) 物体距离镜头特别近时,拼接会出错,图中大猩猩距离镜头大概15cm。(b) 细长的物体在光流计算中很容易被遗漏,这会导致图中麦克风杆的鬼影效果。 (c) 半透明的物体表面会产生变形. (d) 少部分情况下重复纹理区域的光流会出现误匹配。


运行时间:


输入16个2704 × 2028帧率为 30 FPS的视频流,输出是 8192 × 8192的视频流,其中左右眼(左眼在上右眼在下)各对应一个 8192 × 4096的全景图。


经过优化,一个小时的视频流输入在1000多个核上并行计算时间约为10个小时。


虽然两张图光流计算只需5s,但是一次同时输入16张图,前后向光流需要各算一次,所以主要的时间耗费在光流的计算上了。每张立体全景图平均处理时间分布如下图所示:


有什么参考资料?

Google Jump 原理

Anderson R, Gallup D, Barron J T, et al. Jump: virtual reality video[J]. Acm Transactions on Graphics, 2016, 35(6):198.


Facebook Surround360的开源硬件设计和代码: 

https://github.com/facebook/Surround360 


注:本公众号陆续推出一系列计算机视觉细分方向的简要介绍,包括基本原理、效果、应用、论文,不涉及技术细节,敬请关注。欢迎投稿(simiter@126.com)。

相关阅读

计算机视觉方向简介 | 从全景图恢复三维结构

注:原创不易,转载请注明来源,侵权必究。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存