李帥
(四川大學計算機學院,成都610065)
現在深度相機的使用已經變得越來越普遍,例如VR/AR、機器人導航、影視動畫、室內裝修設計、公安系統現場保留等。利用深度相機可以直接獲取三維場景數據,例如人體模型或者空間物品。與之前傳統的三維重建不同,在現在需求是更強調實時性,而且也不需要太多的前置條件和數據的后置加工再處理。已經有一些相關的工作,如Newcombe[1]團隊于2011 年首先提出基于RGB-D 傳感器Kinect1 進行室內實時三維重建算法KinectFusion[1],開啟動了實時三維重建的一條新思路,打開了一個新的局面,后續的Kintinuous[2]、Voxel Hasing[4]、ElasticFusion[3]、BundleFusion[5]等各種不同的室內場景重建算法。所有上面的算法都是在剛性變換的條件下進行的,最初的三維重建都是利用深度信息進行位姿估計來對相機進行定位,并且利用GPU(Graph?ics Processing Unit)的高速并行的特點來對矩陣和圖形的計算進行加速,不同于一般的SLAM[12]算法,Kinect?Fusion[1]算法基于體素塊函數TSDF(Truncated Signed-Distance Function)[1]進行描述三維場景,首次實現了基于深度相機的室內場景重建,并加入了最近點迭代算法ICPA(Iterative Closet Point Algorithm)[10]以及使用光線投影的技術,實驗表明,在局部且只具有少數回環的場景下重建效果比較好,但是其具有一定的局限性:①基于TSDF 的重建模型,因為是空間體素塊,很多空間的范圍并沒有實際的點,但是該算法卻要求都要被計算在內(因為光線投影算法需要按照一定的尺度進行遍歷),另外,空間體素塊過大會導致存儲空間利用率很低,甚至很多稍微大點的場景就無法用體素塊進行表示,進一步的,范圍較大則也就出現建圖效果不可逆轉的情況。甚至無法完成,或者建圖有大量的破洞;②因為是使用ICPA[10]算法進行相機位姿的估計,這非常受限于場景中幾何特征的復雜度以及外界光照環境的影響,導致估計位姿失效或者偏差交大;③因為整個重建過程沒有回環檢測,也就不能實現基于閉環的場景融合優化策略;④第二和第三點中因為定位失敗,導致很多時候無法進行重定位,誤差就會逐步累加,導致從異常時間節點開始后的所有場景的重建一直失敗。為了解決存在的問題,后來的研究者們進行了其他的一系列嘗試和研究工作。包括如下:①為了實現回環檢測,就是要查找關鍵幀之間的相似率,就要進行位姿圖的優化,提出用詞袋法DBoW(Distributed Bag of Words)檢測回環幀,實質就是將關鍵幀抽象成一個單詞向量進行對比;②為了減小因為使用TSDF 模型帶來的大量空間中不需要進行融合而帶來的時間開銷和空間開銷成本,提出了只讓被渲染的場景跟隨相機進行融合計算的參與,目的是為了減少開銷;③比較備受關注的一個是彈性融合[3],因為這可以滿足在一個大規模的三維場景下,舍棄基于網格空間中必須要占用的大量的空間資源,使用的一種基于面元(surfel[7-8,11])數據結構的模型,每一個數據都包含空間位置、法向量、紋理信息以及對應的時間戳,然后將這些信息直接作用于面元上,而不是像直接通過位姿圖作用于三維網格那樣。
就像其他的基于RGB-D 算法一樣,彈性融合也借鑒了KinectFusion 算法,主體思想和流程大致相同,但是采取的是不同的數據存儲模型和渲染模型。后文將詳細說明。另外,KinectFusion 實現的是一個稠密的視覺SLAM,在盡可能發揮GPU 的計算能力的前提下,讓計算速度達到實時性,渲染效果呈現出一個近視真實場景的畫面。彈性融合使用的是基于面元模型surfel的數據結構,也同樣發揮出GPU 的最大計算能力,彈性融合使用的位姿估計并不是簡單的ICP 算法做配準,因為要考慮到場景中的閉環情況,需要通過ICP 配準檢測局部回環和隨機蕨(Random Ferns)來檢測全局回環,同時可以有效解決小的區域內的循環往復的運動情況,也就是重影的情況。原來的算法框架如圖1所示。

圖1 融合算法流程
如上所示,整個流程可以分為以下三個主要部分:①使用RGB-D 數據計算位姿,包括幾何位姿和光度位姿;②如果誤差大于給定的閾值,就要進行重定位算法,如果小于一定閾值就進入下一環節;③利用隨機蕨數據庫(Random Ferns Databases)進行全局回環檢測,如果存在全局回環,就要加入新的幀到隨機蕨數據庫,如果不存在就直接進行融合。
彈性融合采用ICP 進行配準點云并聯合求解最小化光度誤差,求出變換位姿,然而室內存在很多的平面的場景,例如:桌子、地面、天花板、沙發;一種很普遍的情況,例如天花-桌面、桌面-沙發。當發生大尺度的切換而且又是場景變化又比較大的時候,雖然在每一局部內變化平穩,但是關鍵幀之間會出現位姿突變的情況,與實際不符,就直接導致這個配準過程失敗。而且彈性融合的位姿跟蹤過程中,總是將當前得到的幀對齊到上一個關鍵幀,這很容易把幀匹配的誤差傳遞下去,導致后面的幀出現錯亂,并出現建模出錯的情況。
圖2 是改進的聯合位姿框架圖。

圖2 改進的聯合位姿框架
(1)深度和彩色信息位姿估計

(2)位姿的深度估計




圖3 點到平面之間的距離

其中ωr=0.1。
(4)改進的聯合位姿估計
因為場景的復雜性,深度信息和彩色信息都有不同的比重,一方面,深度信息的缺乏也會帶來很大的問題。所以要綜合考慮權重因子,不能把ωr當做一個定值,而是要自適應的變化,隨著環境的變化而變化,于是就要考慮因素動態的權重因子,一方面既要跟深度數據有關,又要跟彩色信息有關;另一方面,既要跟深度數據的總匹配點數有關,又要跟彩色數據的總匹配數有關,因為在實際的場景中,都要綜合考慮深度和彩色數據的比例已經匹配總數情況來綜合計算權重因子。于是修改ωr聯合位姿權重,將定值改為配準的總紋理除以總紋理然后求解根號值,具體值要根據配準的彩色圖數據來定,這種光度一致性的聯合位姿估計中,是采取了動態的計算方法,計算最終所得權重,貼近實際場景中真實的情況。
(1)隨機蕨算法介紹
輸入一幅RGB-D 圖,可以根據隨機蕨(Random Ferns)[6,9,11]算法求得一個編碼值,每一幀都有一個編碼值,我們稱之為Blocks,根據當前幀的Blocks 可以求得和之前的已經求得的幀list 之間的相似性,然后根據相似度和之前預先設定的閾值進行比較,判斷是否加入關鍵幀或是重新定位計算相機的姿態。每幅圖有m 個blocks 編碼,每個block 有n 個fern,在本文中,使用的n=4,剛好分別對應RGB-D 四個通道,所以n=4,ferns的計算公式如下所示:


(2)隨機蕨改進算法
在上面的方法中,因為所有的隨機蕨[6,9,11]的編碼的值在最開始都是一次隨機生成的,這包括像素通道的位置,以及該位置對應的RGB-D 值的生成都是具有隨機性,不滿足一定規律,也和實際的場景無關,而且任意兩幀之間的相似度的計算都是通過跟閾值的大小進行比較,如果大于等于該位置的閾值就為1,如果小于該位置的閾值就為0,而最終的相似度的判斷都是看相等的總次數和隨機蕨節點的總次數做對比。
基于上述的分析,本文提出改進的隨機蕨算法,該算法兼顧考慮每一個像素位置的值的可接受域(置信區間)來判斷該位置的block 是否相等,而不是僅僅看該位置的RGB-D 值是否大于某一個實現給定的數值。改進的隨機蕨函數的定義為:

其中,σ是閾值和上面的含義以及初始化方式都是一樣的,δ是新引進的參數,表示是一個可以接受的偏差,如果求得該像素點的值和預先給定的值在這個偏差之內,如果以上的判斷公式成立,說明該點的值是可以被考慮判定為真值,否則為假。
實驗數據是使用的ICL-NUIM 數據集,實驗平臺是:操作系統Ubuntu 16.04 64 位,處理器CPU Intel Core i3-8100@3.60GHz×4,圖形處理顯卡NVIDIA Ge?Force GTX1060 3GB/PCIe/SSE2。主要是基于對輸出的信息判斷誤差大小,一個是位姿配準的誤差大小,另一種是重建的模型的視覺感官上的誤差大小。對于第一種在某些幀的位姿出現偏差很大的情況,在這些幀的時刻t 就有一個突變,如圖4-圖5 所示。

圖4 相對軌跡誤差
由圖所示,圖4 存在某些突變的點,某一些幀誤差比較大;圖5 真實軌跡出現最終的誤差情況。基于此,本實驗階段大致分析了位姿配準時的數據結果,并結合聯合RGB-D 的彩色像素和深度像圖對應的配準總是分析誤差。

圖5 絕對軌跡誤差
對幾組數據進行測試,既考慮模型重建效果,又與相機的軌跡進行分析,這里使用dyson.klg 的RGB-D數據集進行實時三維重建,從圖6-7 可以看到,對于垃圾桶的重建,優化后的算法完全消除了重影的現象;對于位姿產生突變后,墻角椅子的重建效果也得到了修正。
如圖所示,圖6 是原來的三維重建效果較差的時候,有重影現象和錯亂數據的情況,圖7 是改進的融合方案,界面比較清楚且不具有重影現象;對位姿做了聯合優化改進后的重建效果,該場景重建后的效果非常清楚也非常全面。

圖6

圖7
本文主要針對室內的實時三維重建中出現的重影和在回環檢測中出現的錯誤進行算法的改進和優化,考慮到實際場景中相機來回移動,循環往復產生的閉環問題,第一部分是位姿突變導致后續的聯合深度和彩色配準出現異常時間幀點誤差來分析,第二部分是根據重建出來的效果進行視覺上的判斷,發現用改進的隨機蕨算法值域的范圍來限定真值或者價值更加有效而且合理,事實證明,改進的隨機蕨算法確實能進一步提升重建的效果。但是這還是要依賴于精確的位姿配準算法的結果。然而在一些幾何場景中,如果深度或者幾何信息不夠豐富或者不具備足夠的區分度,重建效果還是會受到一些影響。相信更遠的研究在這方面仍然有可改進的空間。另外,如果場景中出現一些流體的區域的話,重建效果也是無法逼近真實的情況,這方面的工作或許在將來更有深遠的意義。