李帥
(四川大學(xué)計算機學(xué)院,成都610065)
現(xiàn)在深度相機的使用已經(jīng)變得越來越普遍,例如VR/AR、機器人導(dǎo)航、影視動畫、室內(nèi)裝修設(shè)計、公安系統(tǒng)現(xiàn)場保留等。利用深度相機可以直接獲取三維場景數(shù)據(jù),例如人體模型或者空間物品。與之前傳統(tǒng)的三維重建不同,在現(xiàn)在需求是更強調(diào)實時性,而且也不需要太多的前置條件和數(shù)據(jù)的后置加工再處理。已經(jīng)有一些相關(guān)的工作,如Newcombe[1]團隊于2011 年首先提出基于RGB-D 傳感器Kinect1 進行室內(nèi)實時三維重建算法KinectFusion[1],開啟動了實時三維重建的一條新思路,打開了一個新的局面,后續(xù)的Kintinuous[2]、Voxel Hasing[4]、ElasticFusion[3]、BundleFusion[5]等各種不同的室內(nèi)場景重建算法。所有上面的算法都是在剛性變換的條件下進行的,最初的三維重建都是利用深度信息進行位姿估計來對相機進行定位,并且利用GPU(Graph?ics Processing Unit)的高速并行的特點來對矩陣和圖形的計算進行加速,不同于一般的SLAM[12]算法,Kinect?Fusion[1]算法基于體素塊函數(shù)TSDF(Truncated Signed-Distance Function)[1]進行描述三維場景,首次實現(xiàn)了基于深度相機的室內(nèi)場景重建,并加入了最近點迭代算法ICPA(Iterative Closet Point Algorithm)[10]以及使用光線投影的技術(shù),實驗表明,在局部且只具有少數(shù)回環(huán)的場景下重建效果比較好,但是其具有一定的局限性:①基于TSDF 的重建模型,因為是空間體素塊,很多空間的范圍并沒有實際的點,但是該算法卻要求都要被計算在內(nèi)(因為光線投影算法需要按照一定的尺度進行遍歷),另外,空間體素塊過大會導(dǎo)致存儲空間利用率很低,甚至很多稍微大點的場景就無法用體素塊進行表示,進一步的,范圍較大則也就出現(xiàn)建圖效果不可逆轉(zhuǎn)的情況。甚至無法完成,或者建圖有大量的破洞;②因為是使用ICPA[10]算法進行相機位姿的估計,這非常受限于場景中幾何特征的復(fù)雜度以及外界光照環(huán)境的影響,導(dǎo)致估計位姿失效或者偏差交大;③因為整個重建過程沒有回環(huán)檢測,也就不能實現(xiàn)基于閉環(huán)的場景融合優(yōu)化策略;④第二和第三點中因為定位失敗,導(dǎo)致很多時候無法進行重定位,誤差就會逐步累加,導(dǎo)致從異常時間節(jié)點開始后的所有場景的重建一直失敗。為了解決存在的問題,后來的研究者們進行了其他的一系列嘗試和研究工作。包括如下:①為了實現(xiàn)回環(huán)檢測,就是要查找關(guān)鍵幀之間的相似率,就要進行位姿圖的優(yōu)化,提出用詞袋法DBoW(Distributed Bag of Words)檢測回環(huán)幀,實質(zhì)就是將關(guān)鍵幀抽象成一個單詞向量進行對比;②為了減小因為使用TSDF 模型帶來的大量空間中不需要進行融合而帶來的時間開銷和空間開銷成本,提出了只讓被渲染的場景跟隨相機進行融合計算的參與,目的是為了減少開銷;③比較備受關(guān)注的一個是彈性融合[3],因為這可以滿足在一個大規(guī)模的三維場景下,舍棄基于網(wǎng)格空間中必須要占用的大量的空間資源,使用的一種基于面元(surfel[7-8,11])數(shù)據(jù)結(jié)構(gòu)的模型,每一個數(shù)據(jù)都包含空間位置、法向量、紋理信息以及對應(yīng)的時間戳,然后將這些信息直接作用于面元上,而不是像直接通過位姿圖作用于三維網(wǎng)格那樣。
就像其他的基于RGB-D 算法一樣,彈性融合也借鑒了KinectFusion 算法,主體思想和流程大致相同,但是采取的是不同的數(shù)據(jù)存儲模型和渲染模型。后文將詳細說明。另外,KinectFusion 實現(xiàn)的是一個稠密的視覺SLAM,在盡可能發(fā)揮GPU 的計算能力的前提下,讓計算速度達到實時性,渲染效果呈現(xiàn)出一個近視真實場景的畫面。彈性融合使用的是基于面元模型surfel的數(shù)據(jù)結(jié)構(gòu),也同樣發(fā)揮出GPU 的最大計算能力,彈性融合使用的位姿估計并不是簡單的ICP 算法做配準,因為要考慮到場景中的閉環(huán)情況,需要通過ICP 配準檢測局部回環(huán)和隨機蕨(Random Ferns)來檢測全局回環(huán),同時可以有效解決小的區(qū)域內(nèi)的循環(huán)往復(fù)的運動情況,也就是重影的情況。原來的算法框架如圖1所示。
圖1 融合算法流程
如上所示,整個流程可以分為以下三個主要部分:①使用RGB-D 數(shù)據(jù)計算位姿,包括幾何位姿和光度位姿;②如果誤差大于給定的閾值,就要進行重定位算法,如果小于一定閾值就進入下一環(huán)節(jié);③利用隨機蕨數(shù)據(jù)庫(Random Ferns Databases)進行全局回環(huán)檢測,如果存在全局回環(huán),就要加入新的幀到隨機蕨數(shù)據(jù)庫,如果不存在就直接進行融合。
彈性融合采用ICP 進行配準點云并聯(lián)合求解最小化光度誤差,求出變換位姿,然而室內(nèi)存在很多的平面的場景,例如:桌子、地面、天花板、沙發(fā);一種很普遍的情況,例如天花-桌面、桌面-沙發(fā)。當(dāng)發(fā)生大尺度的切換而且又是場景變化又比較大的時候,雖然在每一局部內(nèi)變化平穩(wěn),但是關(guān)鍵幀之間會出現(xiàn)位姿突變的情況,與實際不符,就直接導(dǎo)致這個配準過程失敗。而且彈性融合的位姿跟蹤過程中,總是將當(dāng)前得到的幀對齊到上一個關(guān)鍵幀,這很容易把幀匹配的誤差傳遞下去,導(dǎo)致后面的幀出現(xiàn)錯亂,并出現(xiàn)建模出錯的情況。
圖2 是改進的聯(lián)合位姿框架圖。
圖2 改進的聯(lián)合位姿框架
(1)深度和彩色信息位姿估計
(2)位姿的深度估計
圖3 點到平面之間的距離
其中ωr=0.1。
(4)改進的聯(lián)合位姿估計
因為場景的復(fù)雜性,深度信息和彩色信息都有不同的比重,一方面,深度信息的缺乏也會帶來很大的問題。所以要綜合考慮權(quán)重因子,不能把ωr當(dāng)做一個定值,而是要自適應(yīng)的變化,隨著環(huán)境的變化而變化,于是就要考慮因素動態(tài)的權(quán)重因子,一方面既要跟深度數(shù)據(jù)有關(guān),又要跟彩色信息有關(guān);另一方面,既要跟深度數(shù)據(jù)的總匹配點數(shù)有關(guān),又要跟彩色數(shù)據(jù)的總匹配數(shù)有關(guān),因為在實際的場景中,都要綜合考慮深度和彩色數(shù)據(jù)的比例已經(jīng)匹配總數(shù)情況來綜合計算權(quán)重因子。于是修改ωr聯(lián)合位姿權(quán)重,將定值改為配準的總紋理除以總紋理然后求解根號值,具體值要根據(jù)配準的彩色圖數(shù)據(jù)來定,這種光度一致性的聯(lián)合位姿估計中,是采取了動態(tài)的計算方法,計算最終所得權(quán)重,貼近實際場景中真實的情況。
(1)隨機蕨算法介紹
輸入一幅RGB-D 圖,可以根據(jù)隨機蕨(Random Ferns)[6,9,11]算法求得一個編碼值,每一幀都有一個編碼值,我們稱之為Blocks,根據(jù)當(dāng)前幀的Blocks 可以求得和之前的已經(jīng)求得的幀list 之間的相似性,然后根據(jù)相似度和之前預(yù)先設(shè)定的閾值進行比較,判斷是否加入關(guān)鍵幀或是重新定位計算相機的姿態(tài)。每幅圖有m 個blocks 編碼,每個block 有n 個fern,在本文中,使用的n=4,剛好分別對應(yīng)RGB-D 四個通道,所以n=4,ferns的計算公式如下所示:
(2)隨機蕨改進算法
在上面的方法中,因為所有的隨機蕨[6,9,11]的編碼的值在最開始都是一次隨機生成的,這包括像素通道的位置,以及該位置對應(yīng)的RGB-D 值的生成都是具有隨機性,不滿足一定規(guī)律,也和實際的場景無關(guān),而且任意兩幀之間的相似度的計算都是通過跟閾值的大小進行比較,如果大于等于該位置的閾值就為1,如果小于該位置的閾值就為0,而最終的相似度的判斷都是看相等的總次數(shù)和隨機蕨節(jié)點的總次數(shù)做對比。
基于上述的分析,本文提出改進的隨機蕨算法,該算法兼顧考慮每一個像素位置的值的可接受域(置信區(qū)間)來判斷該位置的block 是否相等,而不是僅僅看該位置的RGB-D 值是否大于某一個實現(xiàn)給定的數(shù)值。改進的隨機蕨函數(shù)的定義為:
其中,σ是閾值和上面的含義以及初始化方式都是一樣的,δ是新引進的參數(shù),表示是一個可以接受的偏差,如果求得該像素點的值和預(yù)先給定的值在這個偏差之內(nèi),如果以上的判斷公式成立,說明該點的值是可以被考慮判定為真值,否則為假。
實驗數(shù)據(jù)是使用的ICL-NUIM 數(shù)據(jù)集,實驗平臺是:操作系統(tǒng)Ubuntu 16.04 64 位,處理器CPU Intel Core i3-8100@3.60GHz×4,圖形處理顯卡NVIDIA Ge?Force GTX1060 3GB/PCIe/SSE2。主要是基于對輸出的信息判斷誤差大小,一個是位姿配準的誤差大小,另一種是重建的模型的視覺感官上的誤差大小。對于第一種在某些幀的位姿出現(xiàn)偏差很大的情況,在這些幀的時刻t 就有一個突變,如圖4-圖5 所示。
圖4 相對軌跡誤差
由圖所示,圖4 存在某些突變的點,某一些幀誤差比較大;圖5 真實軌跡出現(xiàn)最終的誤差情況?;诖耍緦嶒炿A段大致分析了位姿配準時的數(shù)據(jù)結(jié)果,并結(jié)合聯(lián)合RGB-D 的彩色像素和深度像圖對應(yīng)的配準總是分析誤差。
圖5 絕對軌跡誤差
對幾組數(shù)據(jù)進行測試,既考慮模型重建效果,又與相機的軌跡進行分析,這里使用dyson.klg 的RGB-D數(shù)據(jù)集進行實時三維重建,從圖6-7 可以看到,對于垃圾桶的重建,優(yōu)化后的算法完全消除了重影的現(xiàn)象;對于位姿產(chǎn)生突變后,墻角椅子的重建效果也得到了修正。
如圖所示,圖6 是原來的三維重建效果較差的時候,有重影現(xiàn)象和錯亂數(shù)據(jù)的情況,圖7 是改進的融合方案,界面比較清楚且不具有重影現(xiàn)象;對位姿做了聯(lián)合優(yōu)化改進后的重建效果,該場景重建后的效果非常清楚也非常全面。
圖6
圖7
本文主要針對室內(nèi)的實時三維重建中出現(xiàn)的重影和在回環(huán)檢測中出現(xiàn)的錯誤進行算法的改進和優(yōu)化,考慮到實際場景中相機來回移動,循環(huán)往復(fù)產(chǎn)生的閉環(huán)問題,第一部分是位姿突變導(dǎo)致后續(xù)的聯(lián)合深度和彩色配準出現(xiàn)異常時間幀點誤差來分析,第二部分是根據(jù)重建出來的效果進行視覺上的判斷,發(fā)現(xiàn)用改進的隨機蕨算法值域的范圍來限定真值或者價值更加有效而且合理,事實證明,改進的隨機蕨算法確實能進一步提升重建的效果。但是這還是要依賴于精確的位姿配準算法的結(jié)果。然而在一些幾何場景中,如果深度或者幾何信息不夠豐富或者不具備足夠的區(qū)分度,重建效果還是會受到一些影響。相信更遠的研究在這方面仍然有可改進的空間。另外,如果場景中出現(xiàn)一些流體的區(qū)域的話,重建效果也是無法逼近真實的情況,這方面的工作或許在將來更有深遠的意義。