劉東生,陳建林,費(fèi) 點,張之江
(上海大學(xué) 特種光纖與光接入網(wǎng)重點實驗室,上海 200444)
大型場景的三維重建是圖形學(xué)和計算機(jī)視覺領(lǐng)域的一個研究熱點,被廣泛應(yīng)用于室內(nèi)設(shè)計、機(jī)器人導(dǎo)航和增強(qiáng)現(xiàn)實。在表面重建系統(tǒng)中,需要同時精確地獲取相機(jī)的運(yùn)動軌跡和場景的三維模型。深度相機(jī)因其能以視頻幀速直接獲取物體的位置信息且價格低廉,而非常適合用來研究三維重建。
KinectFusion[1]系統(tǒng)開創(chuàng)了使用手持式深度傳感器進(jìn)行實時稠密重建的新領(lǐng)域。它采用點到平面的迭代最近點算法(Iterative Closest Point,ICP[2])將輸入的深度圖與當(dāng)前模型配準(zhǔn)來跟蹤相機(jī),實時性能由GPU的并行計算來實現(xiàn)。然而KinectFusion只能重建固定于空間中的小場景,并且相機(jī)位姿估計不精確。隨后,研究者使用移動網(wǎng)格的策略來擴(kuò)展KinectFusion算法,使其能重建大型場景[3-5]。但對于大型場景重建,長的相機(jī)掃描序列會引入越來越大的位姿累積誤差,測量的表面信息被不精確地融合到模型中,會進(jìn)一步惡化位姿估計的結(jié)果,最終導(dǎo)致相機(jī)漂移,重建的模型質(zhì)量差,甚至是重建失敗。
為了解決上述問題,F(xiàn)ioraio等人[5]使用最新K張深度圖像構(gòu)建局部子網(wǎng)格,以幀到模型的方式執(zhí)行相機(jī)跟蹤。盡管該方法可極大地減少累積誤差,但當(dāng)場景缺少幾何結(jié)構(gòu)特征時,僅利用深度信息進(jìn)行重建會使相機(jī)丟失跟蹤。Fu等人[6]在跟蹤相機(jī)的同時檢測場景閉環(huán),以閉環(huán)為約束來矯正相機(jī)軌跡。但檢測的閉環(huán)存在錯誤且有部分正確的閉環(huán)并未被檢測。Choi等人的離線方法[7-8]采用基于線流程(Line processes)的魯棒全局位姿優(yōu)化來消除檢測錯誤的閉環(huán)以提高重建質(zhì)量,但需耗費(fèi)大量時間。在Dai等人[9]的BundleFusion算法中,新輸入的RGB-D圖像需要和之前所有分塊的關(guān)鍵幀匹配,以高斯牛頓法的求解方式極小化位姿對齊誤差來優(yōu)化全局軌跡,可得到精確的相機(jī)位姿,但需要兩張顯卡執(zhí)行復(fù)雜的局部和全局優(yōu)化。
針對大場景重建中,由位姿估計的累積誤差而導(dǎo)致的相機(jī)漂移、重建模型質(zhì)量低的問題,本文設(shè)計了一種基于深度相機(jī)的場景重建方法。在系統(tǒng)中保持一個K長的滑動窗口,基于由最新K幀融合的彩色模型跟蹤相機(jī),以此來減少局部累積誤差。在全局優(yōu)化中,迭代步長式地在子網(wǎng)格間搜索表面對應(yīng)點,并以對應(yīng)點的點到平面距離誤差和亮度誤差為約束,優(yōu)化全局相機(jī)軌跡。最后通過實驗證明了本文方法的有效性。
基于深度相機(jī)的靜態(tài)場景重建方法都有相似的系統(tǒng)框架,如圖1(a)所示。
首先,對輸入的RGB-D圖像執(zhí)行深度圖像預(yù)處理以減少噪聲和錯誤的深度值。其次,取決于不同的方法,從預(yù)處理過的深度圖像中獲取不同類型的深度信息。隨后,可利用幀到幀、幀到模型的方式計算當(dāng)前圖像到全局坐標(biāo)系的最優(yōu)變換。最后,將當(dāng)前深度圖的所有頂點轉(zhuǎn)換到全局坐標(biāo)系并融合到模型中。
為了重建大型場景,本文方法的流程如圖1(b)所示。隨著深度相機(jī)在靜態(tài)場景中掃描,根據(jù)時間戳對齊一對深度和彩色圖像。在算法啟動時,將第一個子網(wǎng)格固定于相機(jī)正前方,子網(wǎng)格內(nèi)的體素由第一對深度和彩色圖像初始化,用于后續(xù)的相機(jī)跟蹤。
在每個子網(wǎng)格內(nèi),結(jié)合彩色和深度測量執(zhí)行幀到模型的相機(jī)跟蹤。考慮到短時間內(nèi)的累積誤差小,且物體的顏色亮度可能在不同視角下有些許變化,本文提出使用彩色模型的去融合方案來減少累積誤差。核心思想是當(dāng)?shù)贜對圖像融合到模型時,將N-K對圖像從模型中去融合,以此來確保輸入的圖像始終基于最新的K對幀估計位姿。
當(dāng)相機(jī)相對于當(dāng)前子網(wǎng)格中心點的位置超過給定閾值時,為了高效性,將子網(wǎng)格平移體素單元倍數(shù)的距離。移動到子網(wǎng)格外面的體素會丟失,而剩余的體素會從舊的子網(wǎng)格復(fù)制到新的子網(wǎng)格以繼續(xù)執(zhí)行幀到模型的相機(jī)跟蹤。
圖1 三維重建流程
在全局優(yōu)化中,本文提出了迭代步長式的方法在子網(wǎng)格間搜索對應(yīng)表面點,并基于對應(yīng)點的點到平面距離約束和亮度約束迭代地執(zhí)行全局優(yōu)化,目標(biāo)函以sparseLM的方式求解。相機(jī)軌跡優(yōu)化后,將子網(wǎng)格全局配準(zhǔn),融合到全局網(wǎng)格中[10]。隨后,采用marching cubes[11]算法提取三角片面以便可視化。
對于一個三維空間點P(x,y,z)∈3,可以使用針孔相機(jī)模型獲取其對應(yīng)于二維圖像平面的像素點X(u,v)∈2
(u,v)T=π(x,y,z)=
(1)
其中fx,fy和cx,cy分別是焦距和光軸中心點坐標(biāo),π為投影方程。
(2)
(3)
其中:三維正交矩陣Rl,k∈3×3表示旋轉(zhuǎn)分量,tl,k∈3×1表示平移分量。
本文采用文獻(xiàn)[12]的方法估計相機(jī)位姿。如圖2所示,使用加權(quán)截斷有向距離函數(shù)(TSDF[10])表示三維空間:
ψ:[ψrgb,ψd]→[3,],
(4)
其中ψrgb與ψd分別表示重建表面的色彩和幾何信息。
給定由前N對深度和彩色圖像融合的表面ψf_n,和由第N+1對深度和彩色圖像的反投影得到的表面ψs_n+1,其幾何位置和顏色亮度應(yīng)盡可能一致。誤差函數(shù)可定義為:
E(Tl,N+1)=
(5)
(6)
點P定義于第N+1幀的相機(jī)坐標(biāo)系,Ω為一個三維對角矩陣,將RGB格式的彩色圖轉(zhuǎn)換為灰度圖[13]:
(7)
誤差函數(shù)(5)可使用Gauss-Newton算法迭代求解直至收斂。
圖2 表面ψs_n+1與ψf_n的幾何位置和顏色亮度應(yīng)盡可能一致
本文在每個體素v中分配6個值,其中Φ是從v到最近表面的TSDF,R,G,B是三通道顏色值,Wd和Wc分別為TSDF和顏色值的確信度。在估計完第N+1對圖像的位姿后,可使用加權(quán)平均法[10]更新TSDF:
(8)
類似地,以相同的方式更新顏色信息:
γ∈{r,g,b}.
(9)
針對位姿估計存在累積誤差的問題,本文在文獻(xiàn)[5]的基礎(chǔ)上,結(jié)合深度和彩色信息對模型去融合。
考慮到短時間內(nèi)累積誤差可忽略不計,本文基于由最新的K幀深度和彩色圖像融合的模型跟蹤相機(jī)。在當(dāng)前幀融合到模型后,將N-K幀的信息從模型中去融合,在程序中該過程對應(yīng)于一個K長的FIFO隊列,如圖3所示,直到第N-1+C幀時生成一個新的子體積。去融合過程可表示為:
(10)
(11)
圖3 子網(wǎng)格的融合和去融合
對于彩色測量的累積誤差,以同樣的方式:
γ∈{r,g,b}.
(12)
若小于K幀圖像被跟蹤,則不對子網(wǎng)格去融合。一旦超過K幀被處理且滿足子網(wǎng)格的移動條件,則將當(dāng)前子網(wǎng)格保存在內(nèi)存中。
當(dāng)相機(jī)的位置距離子網(wǎng)格的中心點超過給定閾值時,需要移動子網(wǎng)格來重建大型場景。
如圖4所示(彩圖見期刊電子版),相機(jī)從路標(biāo)L1移動到路標(biāo)L2。橙色線表示相機(jī)光軸,相機(jī)在L1處采集到第1幀圖像,其位姿為I4×4,并新建子網(wǎng)格V1,中心點為O1,如綠色實線框所示。在任意時刻t, 第i幀圖像和當(dāng)前子網(wǎng)格Vj的絕對位姿可分別表示為Tg,i和Pg,j,Tj,i為第i幀到局部子網(wǎng)格Vj的變換:
(13)
在移動子網(wǎng)格時,如果同時考慮平移和旋轉(zhuǎn)分量,則當(dāng)下列條件滿足時:
‖tji‖>Thold_t或aji=
‖rodrigues-1(Rj,i)‖>Thold_R,
(14)
Vj被移動到Vj+1,如圖4中的藍(lán)色虛線框所示。其中Thold_t和Thold_R分別為距離和角度閾值,rodrigues為羅德里格斯變換。此時,對于新建立的子網(wǎng)格Vj+1,有:
Tj+1,i=I4×4,Pj,j+1=Tj,iTj+1,i-1=Tj,i,
(15)
Vj中的體素需要被三線性插值到Vj+1中,會耗費(fèi)大量時間。同時,由于體素在三線性插值后通常位于非整數(shù)坐標(biāo)處,因此插值方法會影響重建的準(zhǔn)確性。
本文采用圖4所示的子網(wǎng)格移動方法,其中黑色實線箭頭表示O1與L2處光軸的距離,交光軸于點C。當(dāng)該距離超過給定閾值dth_1時,移動V1:
d1>dth_1.
(16)
考慮到三線性插值非常耗時且會引入不精確的tsdf, 本文將V1平移體素單元倍數(shù)的距離。同時,為了使平移到新建的子網(wǎng)格內(nèi)用于相機(jī)跟蹤的有效體素數(shù)量盡可能的多,點O1被平移到藍(lán)色虛線框的中心點O2,生成一個新的子網(wǎng)格,如圖4紅色虛線框所示。此時,L2處滿足子網(wǎng)格移動條件的相機(jī)視角在新的子網(wǎng)格內(nèi)具有很大的覆蓋范圍,如圖4黃色箭頭所示。因此,隨后用于相機(jī)跟蹤的實體素數(shù)量眾多,相機(jī)跟蹤會更加精確魯棒。V1被平移整數(shù)體素單元的距離,最終生成的子網(wǎng)格如紅色實線框所示,此時子網(wǎng)格之間的位姿有以下關(guān)系:
Pj,j+1=
(17)
vs為單個體素的尺寸。
需要注意的是,當(dāng)相機(jī)沿著固定光軸向前或向后移動超過一定距離時,V1同樣需要被平移:
d2>dth_2_l‖d2 (18) 其中d2是點C到光心L2的距離,dth_2_l和dth_2_s為兩個閾值。當(dāng)式(17)或式(18)滿足時,平移V1。移動到子網(wǎng)格外的體素將會丟失,剩余的體素將從舊的子網(wǎng)格復(fù)制到新的子網(wǎng)格。 圖4 將子網(wǎng)格從L1平移到L2 雖然相機(jī)在每個子網(wǎng)格內(nèi)是低漂移的,但由于長的掃描序列,子網(wǎng)格之間不可避免地存在累積誤差。本文基于文獻(xiàn)[5]的全局優(yōu)化框架,提出了迭代步長式地尋找表面對應(yīng)點。如圖5(a)是未優(yōu)化的子網(wǎng)格,圖5(b)是優(yōu)化后的子網(wǎng)格。 圖5 全局優(yōu)化的示意圖 3.5.1 迭代步長式尋找表面對應(yīng)點 如圖6,P={pi}和Q={qi}是子網(wǎng)格Vj和Vk的表面點集,pi和qi是一對對應(yīng)點,Tg,j和Tg,k為子網(wǎng)格Vj和Vk的全局變換。若Tg,j和Tg,k都被精確地估計,則可建立以下方程: (19) 為了表述簡潔,公式中默認(rèn)存在點的齊次形式與非齊次形式間的轉(zhuǎn)換。 通常,由于噪聲的存在,式(19)不會相等。為了得到Tg,j和Tg,k的精確值,需要在Vj和Vk中尋找更加精確的對應(yīng)點。 對于任意表面點P,假設(shè)其tsdf值為ψd,可獲取歸一化的梯度: (20) 因tsdf表示一點距表面的有向距離,故Vk中的對應(yīng)點可通過以下方式搜索: (21) 在式(21)中,Vj中的表面點pi被轉(zhuǎn)換到Vk中,并沿著轉(zhuǎn)換后的點的法線方向行進(jìn)αψd的距離。理論上僅僅需要行進(jìn)距離ψd,但在實驗中發(fā)現(xiàn),由于位姿估計和tsdf計算過程中存在誤差,尋找到的對應(yīng)點不一定是Vk的表面點。因此,本文引入步長參數(shù)α,基于實驗經(jīng)驗,α由0.8增長到1.2,增量為Δα= 0.05,直到找到tsdf值足夠小的點qi。如果α增長到1.2之后,qi仍然遠(yuǎn)離表面,則認(rèn)為pi沒有對應(yīng)點。 圖6 Vj和Vk之間尋找對應(yīng)點 3.5.2 迭代式的全局優(yōu)化 對于一對對應(yīng)點(pi,qi),其三維空間位置和亮度應(yīng)盡可能地一致。誤差函數(shù)可表示為: ei,i=‖(Tg,jpi-Tg,kqi)TTg,kn‖+ (22) 對于尋找的對應(yīng)點集,整體誤差函數(shù)可定義為如式(23),可使用sparseLM求解: E(Tg)= (23) 在本文中,設(shè)置迭代次數(shù)Nth,如果相鄰兩次迭代的優(yōu)化誤差小于給定閾值或者迭代次數(shù)超過Nth時,則停止迭代,輸出優(yōu)化后的相機(jī)位姿。 3.5.3 獲取全局一致的三維模型 在全局軌跡優(yōu)化后,為了得到整體的三維模型,需將子網(wǎng)格融合到全局TSDF中: (24) 類似地,對于彩色信息: (25) 隨后使用marching cubes[11]算法提取三角片面以獲得精細(xì)的三維場景模型。 本節(jié)使用兩類不同的數(shù)據(jù)分別從定性和定量兩個方面驗證本文算法的有效性。 圖7是由Kinect v2從實驗室中采集的450張深度和彩色圖像重建的模型。圖7(a)和圖7(b)分別從兩個不同的視角展示了重建的結(jié)果??梢钥闯觯M管場景中的物體繁雜多樣,但最終重建的結(jié)果清晰地展示了實驗室內(nèi)部的結(jié)構(gòu)。圖7(c)展示了書桌部分的局部細(xì)節(jié)圖,可以看到書桌、顯示器屏幕、紙箱表面都平坦光滑,甚至紙箱表面上貼的透明膠帶都清晰可見。圖7(d)展示了書架部分的局部細(xì)節(jié)圖,垃圾桶、植物、書架上擺放的書本、玩偶都實現(xiàn)了較高水平的還原。 圖7 實驗室的重建結(jié)果 此外,本文還重建了Augmented_ICL_NUIM[5]數(shù)據(jù)集中的客廳(Living Room2)部分場景,并與現(xiàn)有方法進(jìn)行了比較,驗證了本文提出算法的有效性。 圖8分別展示了4種方法的重建結(jié)果。圖8(a)為Bylow等人[14]的重建模型,與 KinectFusion[1]中通過點到平面的ICP 算法跟蹤相機(jī)不同,Bylow 等人直接基于TSDF最小化深度測量誤差,有效地提高了位姿估計的精確度。但僅通過單一網(wǎng)格持續(xù)估計位姿并融合數(shù)據(jù),位姿誤差不斷累積,不準(zhǔn)確的位姿導(dǎo)致融合的模型出現(xiàn)模糊或者斷裂現(xiàn)象,如8(a)中臺燈的燈柱和植物的枝葉所示。圖8(b)為Fioraio等人[5]的重建結(jié)果,為了減少累積誤差,F(xiàn)ioraio等人沿著相機(jī)運(yùn)動軌跡新建子網(wǎng)格,子網(wǎng)格內(nèi)局部場景的細(xì)節(jié)精細(xì)度有所提升,模型中臺燈的燈柱和植物等細(xì)節(jié)都基本保留。但其在全局優(yōu)化中尋找的對應(yīng)點不夠精確,導(dǎo)致子網(wǎng)格之間的相對位姿仍然存在較大誤差,重建模型中的墻壁、沙發(fā)等處存在明顯的折痕。圖8(c)為Choi等人[8]的重建結(jié)果,該算法間隔固定幀數(shù)(實驗中為50幀)生成一個新的子網(wǎng)格,但當(dāng)相機(jī)運(yùn)動速度較快時,單個子網(wǎng)格內(nèi)覆蓋的場景較大,包含的相機(jī)運(yùn)動軌跡較長,重建模型細(xì)節(jié)處容易出現(xiàn)空洞,如模型中的靠枕和植物所示。圖8(d)為本文提出方法的重建結(jié)果,本文結(jié)合深度和彩色測量跟蹤相機(jī)位姿,同時對深度和彩色數(shù)據(jù)進(jìn)行融合和去融合操作,估計的位姿更加準(zhǔn)確,并且子網(wǎng)格間采用更加精確的步長式方法尋找對應(yīng)點,極大程度地減輕了折痕現(xiàn)象,同時保證了子網(wǎng)格內(nèi)局部場景的細(xì)節(jié)精細(xì)度,如圖中的靠枕和植物。 圖8 四種方法的重建結(jié)果對比 通過自采數(shù)據(jù)和公開數(shù)據(jù)集的實驗結(jié)果分析,本文提出的場景重建方法能夠克服較長相機(jī)軌跡帶來的累積誤差問題,重建的模型平滑且完整,同時保留了精致的局部細(xì)節(jié),最終生成的三維模型具有更佳的可觀性。 表1所示為四種方法對數(shù)據(jù)集Augmented ICL-NUIM Living Room2部分場景評估的絕對軌跡誤差(ATE),其中包括均方根誤差(RMSE)、平均值(Mean)和標(biāo)準(zhǔn)差(STD),單位均為米。從表中可看出,相較于現(xiàn)有的幾種方法,本文方法估計的絕對軌跡誤差最低,均方根誤差 RMSE 與 Choi等人提出的算法相比低 14.1%,說明本文提出的算法在位姿估計準(zhǔn)確率上得到了很大提升。 表1 四種不同方法估計的相機(jī)絕對軌跡誤差 Tab.1 Absolute trajectory error evaluated by four different methods (m) 表2所示為三種方法對自采的450張實驗室場景數(shù)據(jù)集評估的重建時間。需要說明的是,本文基于Fioraio[5]等人的方法實現(xiàn)整體模型配準(zhǔn),融合效率已在文獻(xiàn)[5]中說明。與文獻(xiàn)[5]不同的是,此處的對比實驗基于串行CPU,硬件環(huán)境為i5-7300HQ、2.5 GHz英特爾CPU。 相比Bylow[14]等人直接配準(zhǔn)單張深度圖像,F(xiàn)ioraio[5]等人需對深度圖像去融合,且需新建子網(wǎng)格,后續(xù)還需對子網(wǎng)格融合配準(zhǔn)。而本文在文獻(xiàn)[5]的基礎(chǔ)上加上了彩色圖像的配準(zhǔn)和去融合,且在子網(wǎng)格間迭代式地尋找對應(yīng)點,使用迭代式地方式優(yōu)化全局誤差函數(shù),因此耗費(fèi)時間比文獻(xiàn)[14],文獻(xiàn)[5]都長。 表2 三種不同方法的重建時間對比 Tab.2 Reconstruction time for four different methods 方法Bylow[14]Fioraio[5]本文總體重建耗時/s99170190平均每幀耗時/ms221378423 后續(xù)使用GPU實現(xiàn)代碼加速可極大地減少重建時間,理論上可達(dá)到Fioraio[5]等人的重建效率。 除了上述定性和定量的實驗,本節(jié)還研究了算法中相關(guān)參數(shù)對重建效果的影響,包括位姿跟蹤中用于調(diào)節(jié)彩色誤差在總誤差中所占比例的權(quán)重參數(shù)θ和迭代步長參數(shù)α。實驗均基于Augmented ICL-NUIM Living Room2數(shù)據(jù)集。 表3 不同權(quán)重θ對絕對軌跡誤差的影響 表3所示為不同θ值對相機(jī)運(yùn)動軌跡誤差的影響。當(dāng)θ=0,此時彩色誤差占比為 0,位姿跟蹤中僅使用了深度數(shù)據(jù);當(dāng)θ=100,此時彩色誤差占比為92%,位姿跟蹤中彩色信息起決定性的作用。當(dāng)θ=8時,彩色誤差和深度誤差共同作用于位姿跟蹤,RMSE最小。 此外,對于全局優(yōu)化,本文還設(shè)置了三組對比實驗,分別命名為A:未優(yōu)化的絕對軌跡RMSE。B:迭代步長α=1.0,優(yōu)化后的絕對軌跡RMSE。C:本文迭代步長式尋找對應(yīng)點,優(yōu)化后的絕對軌跡RMSE。表4展示了實驗結(jié)果。從表中可看出,迭代步長式尋找對應(yīng)點方法比直接尋找對應(yīng)點方法軌跡優(yōu)化結(jié)果提升8%。 表4 迭代步長α對絕對軌跡誤差的影響 由上述實驗結(jié)果可知,本文提出的三維重建方法可減少位姿估計中的累積誤差,得到的相機(jī)軌跡更加精確。 針對大場景重建中,相機(jī)位姿估計的累積誤差導(dǎo)致相機(jī)漂移、重建模型質(zhì)量低的問題,提出了基于深度相機(jī)的高質(zhì)量三維場景重建方案。針對在缺少幾何結(jié)構(gòu)特征的場景中,僅使用深度信息跟蹤相機(jī)易于失敗的問題,結(jié)合深度和彩色測量以幀到模型的方式跟蹤相機(jī);針對位姿估計中存在累積誤差,提出結(jié)合深度和彩色信息的去融合方案;在全局軌跡優(yōu)化中提出迭代步長式地尋找表面對應(yīng)點,并以對應(yīng)點的歐氏距離和亮度信息為約束,優(yōu)化全局相機(jī)位姿。 本文在傳統(tǒng)的三維重建框架基礎(chǔ)上提出了彩色信息去融合方案,并在全局優(yōu)化中引入迭代步長,提高了相機(jī)軌跡的精確度。與基于深度相機(jī)的重建方法對比,本文提出的重建方法相機(jī)軌跡精度提升14.1%,基于實際數(shù)據(jù)實驗,本文方法能實現(xiàn)精確的相機(jī)跟蹤,重建高質(zhì)量的場景模型。滿足實際應(yīng)用需求。本文的算法基于串行CPU實現(xiàn),重建時間相對較長。同時本文使用歸一化體素網(wǎng)格表示三維場景,內(nèi)存消耗大,因此限制了重建的場景大小。后續(xù)工作可將算法移植到CUDA平臺,用于GPU加速。同時使用Octree[19]或Voxel Hashing[20]來表示重建空間,以便重建更大場景。3.5 全局優(yōu)化
4 實驗結(jié)果及分析
4.1 場景重建結(jié)果的定性展示
4.2 絕對軌跡誤差的定量分析
4.3 重建時間的定量分析
4.4 實驗中的參數(shù)分析
5 結(jié) 論