文 / Google 软件工程师 Mike Krainin、机器感知研究员 Ce Liu
2007 年,我们推出了 Google 街景,它让您可以从自己的浏览器或移动设备通过街区、地标和博物馆等的全景图探索世界。这些全景图的创建是一个复杂的过程,其中涉及从一个名为 Rosette 的多摄像头平台捕获图像,然后使用图像混合技术将这些图像小心拼接起来。
不过,许多因素都可能阻碍创建一个“成功的”全景图,例如 Rosette 摄像头几何的校准误差、相邻摄像头的计时差异和视差。尽管我们使用近似场景几何考虑视差和进行频繁的摄像头重新校准来尝试解决这些问题,图像重叠区域仍可能存在明显的接缝。
▲ 左侧:一台携带包含多个摄像头的 Rosette 的街景车。中间:Rosette 特写,包含 15 个摄像头。右侧:每个摄像头空间覆盖的可视化。相邻摄像头间的重叠用深灰色显示
▲ 左侧:悉尼歌剧院,其标志性白帆边缘存在拼接接缝。右侧:进行光流接缝修复后的同一个街景全景图
为了提供更加无缝的街景图像,我们基于光流开发了一种新的算法来帮助应对这些挑战。思路是轻微翘曲每一个输入图像,让图像内容在重叠区域内对齐。这需要小心操作,以免引入新类型的视觉伪影。方法还必须对不断变化的场景几何、光照条件、校准质量和许多其他条件表现出可靠性。为了简化对齐图像的任务和满足计算要求,我们将过程分成两步。
光流
第一步是为重叠的每对图像找到对应的像素位置。利用照片扫描仪文章中介绍的技术,我们计算从一个图像到另一个图像的光流。这样会产生平滑、密集的对应场。然后,为了保证计算效率,我们减少了对应采样。我们还舍弃了没有足够的视觉结构来保证光流结果可信度的对应。
▲ 来自 Rosette 摄像头平台、需要拼接起来的一对组成图像的边界
▲ 该对图像中的提取对应。对于左侧图像重叠区域中的每一个彩色点,右侧图像中都有对应的彩色点,这表明光流算法已将该点对齐。这些对应点对用作全局优化阶段的输入。请注意,重叠仅占每个图像很少的一部分
全局优化
第二步是翘曲 Rosette 的图像,同时将重叠区域中的所有对应点(如上图所示)对齐。拼合到全景图中时,翘曲图像集随后将正确对齐。这一步困难重重,因为重叠区域仅占每个图像很少的一部分,约束不足的问题随之出现。为了在整个图像上生成视觉美观的结果,我们通过空间正则化用公式将翘曲表示为样条式流场。样条参数使用 Google 的开放源代码 Ceres Solver 在非线性优化中求解。
我们的方法与 Shum 和 Szeliski 研究全景图“去伪影”的已发表论文有很多相似之处。主要不同在于,我们的方法可以估计密集、平滑的对应(而不是分片、独立的对应),我们可以求解非线性优化来进行最终翘曲。因此,与基于内核的方法相比,行为更加良好的翘曲引入新的视觉伪影的可能性要低。
▲ 左侧:未修复全景图的特写。中间:基于内核的内插的结果。这种方法可以修复不连续性,但是,由于图像重叠小和内核的大小有限,这样会产生强烈的摆动伪影。右侧:我们的全局优化的结果
这很重要,因为我们的算法需要对街景数十亿全景图中内容的多样性表现出可靠性。您可以在以下示例中看到这种算法的有效性:
▲ 伦敦塔桥
▲ 里约热内卢基督像
▲ 西雅图街道上的一辆 SUV
这种新算法最近已添加到街景的拼接流程中。现在,我们正使用它持续重新拼接现有的全景图。请留意您身边改进的街景!
查看全文及文中链接,请戳文末“阅读原文”。