Google是如何提供“無縫”的街景全景圖的?
文 / Google 軟體工程師 Mike Krainin、機器感知研究員 Ce Liu
2007 年,我們推出了 Google 街景,它讓您可以從自己的瀏覽器或移動裝置通過街區、地標和博物館等的全景圖探索世界。這些全景圖的建立是一個複雜的過程,其中涉及從一個名為 Rosette 的多攝像頭平臺捕獲影象,然後使用影象混合技術將這些影象小心拼接起來。
不過,許多因素都可能阻礙建立一個“成功的”全景圖,例如 Rosette 攝像頭幾何的校準誤差、相鄰攝像頭的計時差異和視差。儘管我們使用近似場景幾何考慮視差和進行頻繁的攝像頭重新校準來嘗試解決這些問題,影象重疊區域仍可能存在明顯的接縫。
▲ 左側:一臺攜帶包含多個攝像頭的 Rosette 的街景車。中間:Rosette 特寫,包含 15 個攝像頭。右側:每個攝像頭空間覆蓋的視覺化。相鄰攝像頭間的重疊用深灰色顯示
▲ 左側:悉尼歌劇院,其標誌性白帆邊緣存在拼接接縫。右側:進行光流接縫修復後的同一個街景全景圖
為了提供更加無縫的街景影象,我們基於光流開發了一種新的演算法來幫助應對這些挑戰。思路是輕微翹曲每一個輸入影象,讓影象內容在重疊區域內對齊。這需要小心操作,以免引入新型別的視覺偽影。方法還必須對不斷變化的場景幾何、光照條件、校準質量和許多其他條件表現出可靠性。為了簡化對齊影象的任務和滿足計算要求,我們將過程分成兩步。
光流
第一步是為重疊的每對影象找到對應的畫素位置。利用照片掃描器文章中介紹的技術,我們計算從一個影象到另一個影象的光流。這樣會產生平滑、密集的對應場。然後,為了保證計算效率,我們減少了對應取樣。我們還捨棄了沒有足夠的視覺結構來保證光流結果可信度的對應。
▲ 來自 Rosette 攝像頭平臺、需要拼接起來的一對組成影象的邊界
▲ 該對影象中的提取對應。對於左側影象重疊區域中的每一個彩色點,右側影象中都有對應的彩色點,這表明光流演算法已將該點對齊。這些對應點對用作全域性優化階段的輸入。請注意,重疊僅佔每個影象很少的一部分
全域性優化
第二步是翹曲 Rosette 的影象,同時將重疊區域中的所有對應點(如上圖所示)對齊。拼合到全景圖中時,翹曲影象集隨後將正確對齊。這一步困難重重,因為重疊區域僅佔每個影象很少的一部分,約束不足的問題隨之出現。為了在整個影象上生成視覺美觀的結果,我們通過空間正則化用公式將翹曲表示為樣條式流場。樣條引數使用 Google 的開放原始碼 Ceres Solver 在非線性優化中求解。
我們的方法與 Shum 和 Szeliski 研究全景圖“去偽影”的已發表論文有很多相似之處。主要不同在於,我們的方法可以估計密集、平滑的對應(而不是分片、獨立的對應),我們可以求解非線性優化來進行最終翹曲。因此,與基於核心的方法相比,行為更加良好的翹曲引入新的視覺偽影的可能性要低。
▲ 左側:未修復全景圖的特寫。中間:基於核心的內插的結果。這種方法可以修復不連續性,但是,由於影象重疊小和核心的大小有限,這樣會產生強烈的擺動偽影。右側:我們的全域性優化的結果
這很重要,因為我們的演算法需要對街景數十億全景圖中內容的多樣性表現出可靠性。您可以在以下示例中看到這種演算法的有效性:
▲ 倫敦塔橋
▲ 里約熱內盧基督像
▲ 西雅圖街道上的一輛 SUV
這種新演算法最近已新增到街景的拼接流程中。現在,我們正使用它持續重新拼接現有的全景圖。請留意您身邊改進的街景!
檢視全文及文中連結,請戳文末“閱讀原文”。
相關文章
- 無縫輪播圖的一種方式原理
- ShardingSphere如何完成與Spring家族無縫整合的?Spring
- 如何無縫的將Flutter引入現有應用?Flutter
- jQuery圖片無縫滾動效果jQuery
- react無縫滾動輪播圖React
- android基礎知識:Google提供的高效載入大圖方案AndroidGo
- VR全景檢視 Google VrPanoramaViewVRGoView
- jQuery 間歇的無縫滾動jQuery
- 邏輯難理解版本的輪播圖(實現無縫滾動)
- Google S2 中的 CellID 是如何生成的 ?Go
- 有間隙卡片縮放/無縫CollectionViewBanner無限輪播圖View
- jQuery 圖片列表垂直間歇無縫滾動jQuery
- JavaScript圖片橫向無縫滾動詳解JavaScript
- JQuery實現圖片輪播無縫滾動jQuery
- 無縫輪播
- 如何無縫遷移 SpringCloud/Dubbo 應用到 ServerSpringGCCloudServer
- 如何從 InfluxDB/OpenTSDB 無縫連線到 TDengineUX
- 讀Google是如何做軟體測試的Go
- 如何開發一款 60fps 的“無縫滾動”外掛
- js無縫滾動JS
- 如何快速實現一個無縫輪播效果
- Google程式設計師的一天是如何度過的?Go程式設計師
- selenium提供的截圖功能
- Memsource 與 Gridly 傾力合作,為遊戲工作室提供無縫銜接的本地化工作流遊戲
- Postman for Mac — 無 縫測 試API的首 選工具PostmanMacAPI
- 如何無縫遷移 SpringCloud/Dubbo 應用到 Serverless 架構SpringGCCloudServer架構
- 如何將企業資料無縫過渡到雲端
- fasterWhisper和MoneyPrinterPlus無縫整合AST
- 2022 RPA全景圖
- Google 搜尋演算法是如何越來越懂你的?Go演算法
- ENVI無縫鑲嵌、拼接柵格資料的方法
- 資料無界:大型企業如何實現多區域檔案安全傳輸的無縫體驗?
- iOS開發如何在google地圖上顯示自己的位置iOSGo地圖
- AVPlayerde 無縫快進和倒放.
- CSS水平無縫滾動效果CSS
- js-字幕無縫滾動JS
- JavaScript無縫滾動 記錄JavaScript
- 原生JS實現一個無縫輪播圖外掛(支援vue)JSVue
- [譯]Google新logo是如何縮減13000位元組的Go