Google是如何提供“無縫”的街景全景圖的?

谷歌開發者_發表於2017-11-22

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


文 / Google 軟體工程師 Mike Krainin、機器感知研究員 Ce Liu


2007 年,我們推出了 Google 街景,它讓您可以從自己的瀏覽器或移動裝置通過街區、地標和博物館等的全景圖探索世界。這些全景圖的建立是一個複雜的過程,其中涉及從一個名為 Rosette 的多攝像頭平臺捕獲影象,然後使用影象混合技術將這些影象小心拼接起來。


不過,許多因素都可能阻礙建立一個“成功的”全景圖,例如 Rosette 攝像頭幾何的校準誤差、相鄰攝像頭的計時差異和視差。儘管我們使用近似場景幾何考慮視差和進行頻繁的攝像頭重新校準來嘗試解決這些問題,影象重疊區域仍可能存在明顯的接縫。


640?wx_fmt=png&wxfrom=5&wx_lazy=1

▲ 左側:一臺攜帶包含多個攝像頭的 Rosette 的街景車。中間:Rosette 特寫,包含 15 個攝像頭。右側:每個攝像頭空間覆蓋的視覺化。相鄰攝像頭間的重疊用深灰色顯示


0?wx_fmt=png

▲ 左側:悉尼歌劇院,其標誌性白帆邊緣存在拼接接縫。右側:進行光流接縫修復後的同一個街景全景圖    


為了提供更加無縫的街景影象,我們基於光流開發了一種新的演算法來幫助應對這些挑戰。思路是輕微翹曲每一個輸入影象,讓影象內容在重疊區域內對齊。這需要小心操作,以免引入新型別的視覺偽影。方法還必須對不斷變化的場景幾何、光照條件、校準質量和許多其他條件表現出可靠性。為了簡化對齊影象的任務和滿足計算要求,我們將過程分成兩步。



光流

第一步是為重疊的每對影象找到對應的畫素位置。利用照片掃描器文章中介紹的技術,我們計算從一個影象到另一個影象的光流。這樣會產生平滑、密集的對應場。然後,為了保證計算效率,我們減少了對應取樣。我們還捨棄了沒有足夠的視覺結構來保證光流結果可信度的對應。


0?wx_fmt=jpeg

▲ 來自 Rosette 攝像頭平臺、需要拼接起來的一對組成影象的邊界

 

0?wx_fmt=png

▲ 該對影象中的提取對應。對於左側影象重疊區域中的每一個彩色點,右側影象中都有對應的彩色點,這表明光流演算法已將該點對齊。這些對應點對用作全域性優化階段的輸入。請注意,重疊僅佔每個影象很少的一部分



全域性優化

第二步是翹曲 Rosette 的影象,同時將重疊區域中的所有對應點(如上圖所示)對齊。拼合到全景圖中時,翹曲影象集隨後將正確對齊。這一步困難重重,因為重疊區域僅佔每個影象很少的一部分,約束不足的問題隨之出現。為了在整個影象上生成視覺美觀的結果,我們通過空間正則化用公式將翹曲表示為樣條式流場。樣條引數使用 Google 的開放原始碼 Ceres Solver 在非線性優化中求解。


我們的方法與 Shum 和 Szeliski 研究全景圖“去偽影”的已發表論文有很多相似之處。主要不同在於,我們的方法可以估計密集、平滑的對應(而不是分片、獨立的對應),我們可以求解非線性優化來進行最終翹曲。因此,與基於核心的方法相比,行為更加良好的翹曲引入新的視覺偽影的可能性要低。


0?wx_fmt=png

▲ 左側:未修復全景圖的特寫。中間:基於核心的內插的結果。這種方法可以修復不連續性,但是,由於影象重疊小和核心的大小有限,這樣會產生強烈的擺動偽影。右側:我們的全域性優化的結果


這很重要,因為我們的演算法需要對街景數十億全景圖中內容的多樣性表現出可靠性。您可以在以下示例中看到這種演算法的有效性:


0?wx_fmt=png

▲ 倫敦塔橋    


0?wx_fmt=png

▲ 里約熱內盧基督像


0?wx_fmt=png

▲ 西雅圖街道上的一輛 SUV    


這種新演算法最近已新增到街景的拼接流程中。現在,我們正使用它持續重新拼接現有的全景圖。請留意您身邊改進的街景!


檢視全文及文中連結,請戳文末“閱讀原文”。


0?wx_fmt=gif

相關文章