GoogleJump是在GoogleI/O2015上亮相的一款360°全景摄像装置,它是由镜头组、自动整合和处理素材的软件、播放平台3部分组成。它可以使用户实现360度全景拍摄。拍摄的原始视频经过JUMP应用转换后,会生成非常逼真的3D虚拟现实视频。JUMP由谷歌和GoPro联合开发完成。被外媒称之为“完整的虚拟现实录制生态系统”。
让我们仔细分析下其中最有趣的东西(至少我认为!):Jump虚拟现实拍摄装置。我们来解析下这个玩意儿,看和之前各种拼接的什么环视啊什么360°啊到底有什么不同。
首先,Jump是一个GoPro阵列,外形上看和各种VR影像公司提供的东西没什么不同,不过是摄像头数量的多寡而已。Google的产品副总监、VR/AR部负责人ClayBavor称这个东西通过自己去买到的些部件就能拼起来。Google自己不卖这玩意儿,但他们会放出CAD图纸让任何想搞的人去生产售卖。如下图所示:
而且,他们也依旧拿纸糊了一个(8000美金的摄像头以及8块钱的纸板)。但在你雄心勃勃地想要自己去生产这个玩意儿开始创业,上市老总,成为妖股,迎娶白富美,走向人生巅峰之前,你要晓得GoPro是要打算从今年开夏卖这个东西的。GoPro卖这个了粗粮岂能坐视不管?不过总之吧,如果你想要个性化颜色什么的还是可以自己去做吧,塑料版淘宝上肯定马上能有的啦。不过要注意的就是这个结构的松紧,因为摄像头的位置是非常重要的。
一眼瞄过来,这个圆形阵列并没有朝上或朝下的摄像头,如果按照GoPro4Black的规格,这个阵列能捕捉水平360°的画面,但垂直只有120°。因此,顶上脚下都会丢失60°的可视角度。此外,Jump乍一看像非立体的单眼摄像机,每个相机都对着不同方向。多数3DGoPro相机有两个摄像头对准某个方向,类似这样:当有两个摄像头对准某个方向后,你在这个方向上就能给每只眼以不同的画面,这样就有了视角差和立体效果。画面也会有拼接痕迹,因为某个方向的“左”摄像头离另一个方向的“左”摄像头有点远(显然,如果不管立体效果,平面相机的)。围绕着对于降低拼接痕迹的各种方式,诞生了一个小微行业。
而这一点就是Google这个解决方案的大牛之处:这个看起来像平面相机组的摄影阵列实际上是立体的。每个摄像头拍摄的画面并不是给左眼或者右眼的,这些数据可以给两眼都使用。3D效果是通过计算机图形学来得到相对的立体位置,再重新映射到你的眼中,因此根本没有拼接痕迹(理论上)。非常屌,因为这种不到1W美金的半专业设备能捕捉流畅的360°3DVR影片的话,是一个非常大的突破。
Google Jump工作原理是这样的:
因为软件知道每两个摄像头之间的相对距离、位置,因此只要它能计算出两个摄像头之间的场景像素,就能得到场景中某个点的深度。使用这些立体数据,你可以通过扭曲某个画面来得到所谓的“立体垂直”视野:基本上,每个摄像头拍到的画面都是正确的视差点(对于以前的那些针对双目的立体拍摄设备,只有在双眼的摄像头之间的拍摄画面才有正确的视角差,也就是说越往边上去,立体感越差)。当然,这需要大量的计算,不过谁让Google自己电脑多呢。
当你从某个摄像头的画面过度到另一个摄像头的捕捉画面时,视角会稍微偏一点点。为了连接画面(或建立3D模型),你从邻近的摄像头离找到相匹配的区域,比如你从A摄像头找到一组像素,然后在B摄像头也去找同样的一组(这个一组指的是同一个相关部位,比如同一片树叶,不同位置摄像头拍出来的画面会稍有不同),实际上你是能知道往哪找的(相邻摄像机拍出来的图像差别不会太大),比起那些未校准的相机也会极大提升处理速度。目前已存在的拼接软件比如Videostitch或者Kolor(早前被GoPro收购了)由于是通用软件,会对你的拍摄设备结构做一些猜测,但如果是类似Google这种校准过的摄像头,就只需要通过严密的数学算法解决。
当你找到匹配的区域,同时也知道在图片上这些区域的距离差,你就能计算出相机阵列和这个区域实物之间的距离。如果物体,比如说天空是在无限远,那么两个相邻相机照出来的图片天空部位会非常接近。当物体离相机很近时,物体在画面上会变大,同时两个相邻相机拍出来的图像也会有较大距离偏差。具体的偏差完全由物体离摄像阵列的距离决定,因此你可以得到非常精确的物体位置。
更准确一点,你是在右边寻找这条对极几何线。由于GoPro镜头扭曲得很厉害,这条线实际上是弯的。不过基于这种方式的高效算法也仅只有几年时间而已。
当有了3D模型后,你甚至能得到一定的四处看、头部跟踪的范围。不过只有一小部分,而且你没有任何的垂直视角差。图像的点理论上都有正确的深度信息,但后面的背景信息你是没有的,在你垂直移动时会出现问题。(通过差值来填补像素并非完全不可能,但复杂度也会大很多,而且目前来看也没这个必要)
这么说起来,好像前景分外光明一片大好啊,但现在问题来了,计算机图形并不是灵丹妙药。当通过以上算法来计算差别时,我们默认相邻两幅图是相似的,像素是能互相对应的。对于没有镜面反射的不光滑表面来说,OK没有问题(技术用语是朗伯表面),但只要有发光闪烁就会出现问题。Google视频中的演示是静态的,但对于自然界光线复杂时,对于算法的要求就高了,可能会弄出各种奇怪的或是撕裂或是扭曲变形的图像状况。
另外一种明显的会搞晕你算法的状况就是重复的图形,因为算法可能会识别到错误的区域(砖墙啦锁链栏杆啦都是这类技巧的灾星,当然也有一些绕过去的技巧)。此外透明的玻璃啦、没有纹理的白墙之类的东西啦也不好搞。还有无中生有的一些东西,比如电话线中间的空间:电话线绕了一圈,背景是白墙,那么对于算法来说咦这两组像素好像啊,肯定是一个物体。但其实什么也没有,只是电话线圈出来的虚空。压缩也会带来高频错误:GoPro是即时把数据压成H.264的,而压缩质量也参差
关注天下网吧微信,了解网吧网咖经营管理,安装维护:
本文来源:vr186 作者:佚名