1. 程式人生 > >計算機視覺方向簡介(四) | 深度相機室內實時稠密三維重建

計算機視覺方向簡介(四) | 深度相機室內實時稠密三維重建

本文首發於公眾號:計算機視覺life。原文連結點這裡

有什麼用?

室內場景的稠密三維重建目前是一個非常熱的研究領域,其目的是使用消費級相機(本文特指深度相機)對室內場景進行掃描,自動生成一個精確完整的三維模型,這裡所說的室內可以是一個區域,一個房間,甚至是一整棟房屋。此外,該領域注重(一般是GPU上)實時重建,也就是一邊掃描就可以一邊檢視當前重建的結果。如下所示。
這裡寫圖片描述

主要的應用包括室內的增強現實遊戲、機器人室內導航、AR傢俱展示等。

這裡寫圖片描述

什麼原理?

在介紹原理前,先簡單瞭解一下歷史發展。

1、發展歷史

在消費級深度相機出現之前,想要採用普通相機實現實時稠密三維重建比較困難。微軟2010年釋出了Kinect之後,基於深度相機的稠密三維重建掀起了研究熱潮。早期比較有代表性的工作是2011年微軟的Newcombe(單目稠密重建演算法DTAM 的作者)、Davison等大牛發表在SIGGRAPH上的KinectFusion演算法,算是該領域的開山之作。KinectFusion演算法首次實現了基於廉價消費類相機的實時剛體重建,在當時是非常有影響力的工作,它極大的推動了實時稠密三維重建的商業化程序。下圖所示是幾款消費級深度相機。

這裡寫圖片描述

KinectFusion之後,陸續出現了Kintinuous,ElasticFusion,InfiniTAM,BundleFusion等非常優秀的工作。其中2017年斯坦福大學提出的BundleFusion演算法,可以說是目前基於RGB-D相機進行稠密三維重建效果最好的方法了。本文主要以該演算法為基礎進行介紹。值得一提的是,目前室內三維重建和語意理解結合的研究越來越多,這方面暫不做介紹。

2、基本原理

BundleFusion是目前效果最好的開源演算法框架,其概覽圖如下所示。

這裡寫圖片描述
我們先來看一下輸入輸出是什麼。

  • 輸入:RGB-D相機採集的對齊好的color+depth的資料流,這裡使用的是structure
    sensor+iPad輸出的30Hz,解析度為640x480的序列影象。

  • 輸出:重建好的三維場景。

輸入的color+depth的資料流首先需要做幀與幀之間的對應關係匹配,然後做全域性位姿優化,將整體的漂移校正過來(上圖下方所示),整個重建過程中模型是在不斷動態更新的。

上面只是一個概括的介紹,我們深入看一下。演算法具體流程圖如下:

這裡寫圖片描述
雖然看起來很複雜,其實思想還是非常直觀的。下面分別介紹一下。

在匹配方面,這裡使用的是一種sparse-then-dense的並行全域性優化方法。也就是說,先使用稀疏的SIFT特徵點來進行比較粗糙的配準,因為稀疏特徵點本身就可以用來做loop closure檢測和relocalization。然後使用稠密的幾何和光度連續性進行更加細緻的配準。下圖展示了sparse+dense這種方式和單純sparse的對比結果。

這裡寫圖片描述
在位姿優化方面。這裡使用了一種分層的 local-to-global 的優化方法,如下圖所示。總共分為兩層,在最低的第一層,每連續10幀組成一個chunk,第一幀作為關鍵幀,然後對這個chunk內所有幀做一個區域性位姿優化。在第二層,只使用所有的chunk的關鍵幀進行互相關聯然後進行全域性優化。為什麼要分層這麼麻煩呢?或者說這樣分層有什麼好處呢?因為可以剝離出關鍵幀,減少儲存和待處理的資料。並且這種分層優化方法減少了每次優化時的未知量,保證該方法可擴充套件到大場景而漂移很小。
這裡寫圖片描述

在稠密場景重建方面。一個關鍵的點在於模型的對稱型更新:若要增加更新的一幀估計,需先去掉舊的一幀,然後在新的位姿處重新整合。這樣理論上來說,隨著幀越來越多,模型會越來越精確。

作為純視覺的演算法,其魯棒性非常重要,因此該演算法在特徵匹配對篩選方面還是做了不少工作。特徵點對需要經歷如下三種考驗才能通關:

第一種是直接對關鍵點本身分佈的一致性和穩定性進行考驗。如下圖所示,綠色部分才是符合一致性的對應關係。
這裡寫圖片描述

第二道關卡是對特徵匹配對跨越的表面面積進行考驗,去掉特別小的,因為跨越面積較小的的話很容易產生歧義。第三道關卡是進行稠密的雙邊幾何和光度驗證,去掉重投影誤差較大的匹配對。如下圖所示兩個同樣的顯示屏導致了左右的錯誤匹配,是通不過這道關卡的。
這裡寫圖片描述

此外在chunk內外如何進行區域性和全域性的處理,以及具體的位姿優化能量函式方面的細節就不介紹了,可以參考文末給出的論文和程式碼。

效果怎麼樣?

1、演算法優點

先來總結下演算法的優點:

  • 使用持續的local to global分層優化,去除了時域跟蹤的依賴。

  • 不需要任何顯示的loop closure檢測。因為每一幀都和歷史幀相關,所以其實包含了持續的隱式的loop closure。

  • 支援在GPU上實時魯棒跟蹤,可以在跟蹤失敗時移動到重建成功的地方進行relocalization,匹配上後繼續跟蹤。

2、重建效果

實驗表明該方法確實是目前該領域效果最好的方法,口說無憑,看圖說話。下圖是和其他方法的對比,方框內是細節的對比,重建優勢還是很明顯的。

這裡寫圖片描述
具體看一下重建細節如下圖所示,還是挺精細的。
這裡寫圖片描述

另外在loop closure方面該演算法做的也不錯,在紋理比較豐富的情況下誤差基本都能校正回來。如下圖所示。
https://img-blog.csdn.net/20180609230212827?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2VsZWN0ZWNoNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70” alt=”這裡寫圖片描述” title=”” />fill/I0JBQkFCMA==/dissolve/70)

3、執行速度

關於執行速度,目前可以做到在兩塊GPU上實時。在演示視訊中,structure sensor是卡在iPad上,將採集到的資料通過無線網路傳給桌上型電腦(帶GPU),匹配、優化和重建工作都是在臺式機上執行,重建的結果再通過無線網路傳到iPad上顯示。下圖是使用兩塊GPU(GTX Titan X + GTX Titan Black)的執行時間分配。
這裡寫圖片描述

下圖是使用一塊GPU的執行時間分配。

4、問題及改進方向

  • 由於成像感測器存在噪音,稀疏關鍵點匹配可能產生小的區域性誤匹配。這些誤匹配可能會在全域性優化中傳播,導致誤差累積。
  • 上述效果圖片都是在作者提供的公開資料集上的效果,該資料集採集的場景紋理比較豐富,光照也比較適中。而實際重建時效果和所使用深度相機的效能、待重建場景的紋理豐富程度關係很大。對於辦公室這種簡潔風格的場景效果會下降很多,還有很多可改進的地方。
  • 目前演算法需要兩塊GPU才能實時執行,演算法的優化和加速非常有意義。

有什麼參考資料?

專案網址:

http://graphics.stanford.edu/projects/bundlefusion/

code:

https://github.com/niessner/BundleFusion

放一個彩蛋。最近在中國科技大學舉辦的GAMES(計算機圖形學與混合現實研討會)2018大會上,MSRA的童欣研究員系統梳理了室內三維重建和理解方面的研究現狀,感興趣的可以點選這個視訊學習

彩蛋2:溫馨提示:本文中提到的論文我都給你準備好了,在“計算機視覺life”公眾號選單欄回覆“室內重建”即可獲取。

彩蛋3:另外,計算機視覺life公眾號關聯的知識星球上線了,完全免費,微信一鍵登入!星球內所有成員都可以釋出問題、解答問題,支援上傳檔案、點贊、留言、讚賞、收藏、匿名等功能,互動交流更方便!所有內容都可以沉澱,能分類可檢索,詳情見“計算機視覺life”公眾號選單欄《知識星球》,長按下圖識別二維碼加入吧!