谷歌地图可以说是谷歌最受欢迎的应用了,而其中的街景功能则是它受人喜爱的原因之一。很多人已经习惯了用谷歌地图查询地址,用街景功能查看地点实景图,甚至可以把附近的街道全景看个遍,可以说是非常实用的功能。
雷锋网了解到,谷歌的街景是由无数的全景图拼接形成的。而拍摄工作则是由一辆专业拍摄车完成。车顶装载有由 15 部相机组成的叫做 rosette 的装置。谷歌的工作人员开车在各个街道上进行拍摄,并利用软件将照片拼接成全景图的形式,最终成为我们在应用中看到的实时街景。
但因为谷歌使用多个摄像头来捕捉每个图像,因此可能会出现一些问题。比如相机几何尺寸的校准误差,15 个相机之间的时差或视差。这些问题可能导致图像被撕裂或无法对齐。下面这张悉尼歌剧院的街景图就是一个典型的例子。但是,据雷锋网(公众号:雷锋网)了解,谷歌现在正在利用一种新的软件算法解决这类问题。
光流算法(Optical Flow)
所以,谷歌是如何解决问题的呢?尽管把图片对齐似乎是件简单的事情,但谷歌必须在处理过程中计算大量变量。比如,上述提到的视差问题是因为 rosette 装置中的每一个相机在空间位置上有一些轻微的差异导致的。相机位置的不同会让每张图片有些许的不同,而这些不同的角度就使得图片拼接变得比较困难。
另一个问题在于时间点。rosette 是一个 15 台相机组合的一套设备,但所有的相机必须保证在同一时刻按下闪光灯。想象一下:你坐在一辆行驶速度 35km/h 的车上,左右手分别拿了两个相机,两个手分别按下相机快门,大概左右手快门前后也得相差半秒。又因为车子在不断移动,所以两个相机拍到的画面是不同的。那么谷歌的 15 台相机一起工作的话,差距结果可想而知。
上面提到的只是在绘制街景全景图时会遇到的两个问题(当然还有其他问题),为了解决这些问题谷歌开始使用一种全新的光流算法(Optical Flow)。光流的意思是指,分析照片的软件可以在重叠的图像中发现对应的像素点,一旦找到这些重叠的像素点,软件就可以纠正它找到的偏移量。
几何问题
在解决了这些图像差异的校准后,还必须确认在校准过程中,没有出现更多的差异。因为在移动图像一部分时,也会影响到图像剩余部分的排列方式。所以为了解决这个问题,谷歌需要改变整个场景得到几何排布,以确保整个图片依然完整而正确。
谷歌的做法是,对图像的其他部分进行拉伸和压缩,保证所有内容的一直排列。它使用在光流算法处理过程中找到的像素点作为参考点,找到需要拉伸或压缩的位置。这个过程其实并没有那么容易,但是谷歌会对照片进行采样,来减轻算法的计算压力。
最终,这个新的处理方法将会减少全景图中出现的误差影像,并改善图片整体的几何形状。虽然这个新算法仍不是完美的,但谷歌现在已经可以在整合全景图的每个部分时做得更好了。同时,因为改进软件的原因,谷歌也不用再重新拍摄一次所有街景来提升图片质量了。
谷歌已经将这个新的软件技术应用在已有的街景图像中了。如果你有时间的话,可以去谷歌地图中找找看一些著名地点全景图的变化。谷歌去年联合 HTC Vive 打造了一款 VR 应用 Google Earth VR,并且将街景也加入其中,我们可次从第一视角查看世界。而街景全景图的提升,想必也将改善 VR 体验。
via androidauthority.com