穆莉莉,李訓(xùn)杰,楊洪濤,馬天兵,b,單卓佳
(安徽理工大學(xué) a.機(jī)械工程學(xué)院,b.深部煤礦采動(dòng)響應(yīng)與災(zāi)害防控國(guó)家重點(diǎn)實(shí)驗(yàn)室,安徽 淮南 232001)
在對(duì)環(huán)境進(jìn)行三維掃描建圖時(shí),易受掃描設(shè)備的固有誤差、場(chǎng)景物體表面的照明或反射屬性等因素影響而產(chǎn)生點(diǎn)云空洞,致使建模質(zhì)量受損,給后續(xù)點(diǎn)云數(shù)據(jù)的分析處理帶來誤差。傳統(tǒng)點(diǎn)云修復(fù)對(duì)象為三角網(wǎng)格模型或曲面模型[1-3],即將點(diǎn)云三角網(wǎng)格化或曲面化后,再對(duì)模型進(jìn)行修復(fù)。三角網(wǎng)格化處理會(huì)對(duì)采樣點(diǎn)集進(jìn)行大幅度地?cái)M合與刪減,一定程度上破壞了原有三維點(diǎn)集的結(jié)構(gòu)與細(xì)節(jié)特征。目前主流的空洞補(bǔ)全方法是基于深度學(xué)習(xí)訓(xùn)練結(jié)果的預(yù)測(cè),其補(bǔ)全重建的網(wǎng)絡(luò)結(jié)構(gòu)通常由編碼器和解碼器2部分組成[4-5]。例如,繆永偉等[6]采用編碼-解碼器構(gòu)建了點(diǎn)云補(bǔ)全網(wǎng)絡(luò),將采樣點(diǎn)特征碼字加上網(wǎng)格坐標(biāo)數(shù)據(jù)作為解碼器的輸入,并使用2個(gè)連續(xù)的三層感知器折疊操作將網(wǎng)格數(shù)據(jù)轉(zhuǎn)變成點(diǎn)云補(bǔ)全數(shù)據(jù)。張藝真等[7]基于RBF神經(jīng)網(wǎng)絡(luò)訓(xùn)練好的徑向基函數(shù)將特征平面內(nèi)的填充數(shù)據(jù)點(diǎn)調(diào)整到空洞區(qū)域。
點(diǎn)云是具有無序性、無連接性的無規(guī)則點(diǎn)集[8],深度學(xué)習(xí)方式逐級(jí)逐層的計(jì)算耗時(shí)巨大,并且大多是基于16類別的ShapeNet、40類別的ModelNet40等合成的規(guī)整數(shù)據(jù)集進(jìn)行訓(xùn)練,網(wǎng)格質(zhì)量較低,訓(xùn)練結(jié)果較差[9-10]。因此,點(diǎn)云預(yù)處理過程會(huì)對(duì)每一類別的物體點(diǎn)云進(jìn)行下采樣處理,然后訓(xùn)練和測(cè)試下采樣后的點(diǎn)云,將采樣點(diǎn)降低至2 048。該方式雖然可以提高訓(xùn)練速度,但會(huì)影響點(diǎn)云結(jié)構(gòu)與細(xì)節(jié)特征,無法在不破壞原有模型的基礎(chǔ)上達(dá)到快速修復(fù)與密集重建的目的。因此,本文提出一種基于垂直切片的點(diǎn)云空洞補(bǔ)全算法,通過提取稠密點(diǎn)云非補(bǔ)全區(qū)域的密度信息,對(duì)補(bǔ)全區(qū)域進(jìn)行密度重建,可在不破壞原有稠密點(diǎn)云的基礎(chǔ)上補(bǔ)全空洞,運(yùn)行速度快、密集重建效果良好,在應(yīng)對(duì)大型點(diǎn)云中的點(diǎn)云空洞問題時(shí)能夠達(dá)到快速補(bǔ)全與密度重建的目的,可為點(diǎn)云空洞補(bǔ)全修復(fù)提供參考。
基于垂直切片的點(diǎn)云空洞補(bǔ)全算法融合了垂直切片與骨骼維度化的原理,首先對(duì)三維點(diǎn)云進(jìn)行濾波、切片、三維信息分離預(yù)處理,然后進(jìn)行骨骼提取、曲線補(bǔ)全和升維操作,完成空洞補(bǔ)全。算法結(jié)構(gòu)如圖1所示。
圖1 算法結(jié)構(gòu)
空洞點(diǎn)云預(yù)處理包括統(tǒng)計(jì)濾波、半徑濾波、體素濾波、點(diǎn)云切片與3D分離。三維掃描設(shè)備在采集點(diǎn)云時(shí)會(huì)產(chǎn)生噪點(diǎn)和空洞。為消除離群噪點(diǎn)對(duì)點(diǎn)云質(zhì)量的影響,首先對(duì)采集的原始點(diǎn)云進(jìn)行統(tǒng)計(jì)濾波和半徑濾波。統(tǒng)計(jì)濾波是對(duì)點(diǎn)云中每個(gè)點(diǎn)的鄰域進(jìn)行統(tǒng)計(jì)分析,剔除不符合標(biāo)準(zhǔn)的鄰域點(diǎn)。假設(shè)得到的是高斯分布,若點(diǎn)滿足公式(1),則將其視為離群點(diǎn)。
K>μ+t×σ
(1)
式(1)中,K為該點(diǎn)到所有相鄰點(diǎn)的平均距離;t為標(biāo)準(zhǔn)差倍數(shù)的1個(gè)閾值;μ為均值;σ為標(biāo)準(zhǔn)差。
半徑濾波是指在點(diǎn)云數(shù)據(jù)中設(shè)定每個(gè)點(diǎn)在一定半徑范圍內(nèi)至少有足夠多的近鄰點(diǎn),若不滿足就會(huì)被刪除。半徑濾波運(yùn)行速度快,依序迭代留下的點(diǎn)必定是最密集的,能有效剔除離群點(diǎn)。為降低數(shù)據(jù)處理量,提高處理效率,對(duì)點(diǎn)云數(shù)據(jù)進(jìn)行下采樣處理。體素濾波通過設(shè)置一個(gè)三維體素柵格來容納點(diǎn)云,容納后的每個(gè)體素采用所有點(diǎn)的重心來近似體素中的其他點(diǎn),使體素內(nèi)所有點(diǎn)都用一個(gè)重心點(diǎn)來表示。此方法相比于體素中心逼近法更能準(zhǔn)確表示采樣點(diǎn)對(duì)應(yīng)的曲面輪廓。此外,三維體素柵格恰好提供了點(diǎn)云密度重建時(shí)需要的密度系數(shù)。
點(diǎn)云切片與三維信息分離的核心目的是將濾波處理后的點(diǎn)云按照三維掃描設(shè)備的前進(jìn)方向進(jìn)行垂直切片,從而獲得若干個(gè)切片點(diǎn)云。如果原點(diǎn)云存在空洞,那么切片點(diǎn)云則會(huì)出現(xiàn)相應(yīng)的缺口。對(duì)切片點(diǎn)云的三維坐標(biāo)進(jìn)行分離,利用易于處理的二維點(diǎn)集數(shù)據(jù)進(jìn)行補(bǔ)全處理。三維掃描設(shè)備前進(jìn)方向以z軸為例,通過分離各切片的z坐標(biāo),得到若干個(gè)只含x,y坐標(biāo)的二維圖片,完成三維點(diǎn)云的降維處理。空洞點(diǎn)云預(yù)處理算法偽代碼如下。
輸入:原始點(diǎn)云模型M,切片厚度d,切片方向z=z,體素柵格大小a
輸出:N個(gè)二維圖片IMG
1.M1=statistical(M);//對(duì)原始點(diǎn)云模型M進(jìn)行統(tǒng)計(jì)濾波處理
2.M2=voxel(M1,a);//對(duì)M1進(jìn)行體素濾波處理
3.intN=lz(M2)/d;//M2切片方向上的總長(zhǎng)與切片厚度的商,并取整
4.S.push_back=section(M2,d);//將點(diǎn)云M2按照切片厚度d進(jìn)行平均切片
5.for each sectionSi,i=0,1,…,N-1 do//N個(gè)三維切片點(diǎn)云
6.for each pointpj,j=0,1,…,points(Si).size() do//遍歷每個(gè)切片的所有的點(diǎn)
7.img.at
8.end for
9.IMG.push_back(img)
10.end for
空洞補(bǔ)全包括骨骼提取、曲線補(bǔ)全以及二維圖像升維。由于點(diǎn)云切片存在三個(gè)維度的坐標(biāo),在投影成二維圖片時(shí)會(huì)使二維曲線產(chǎn)生厚度。骨骼提取將圖片中存在厚度的二維曲線進(jìn)行細(xì)化,通過層層剝離像素,在保證原有形狀的前提下,提取出曲線骨骼。
假設(shè)圖片背景色為白色,N(x)為x像素點(diǎn)八鄰域點(diǎn)中的黑點(diǎn)個(gè)數(shù);A(x)為x像素點(diǎn)八鄰域點(diǎn)按序前后分別成對(duì)值為0和1的個(gè)數(shù)。設(shè)二維圖片像素點(diǎn)P1的八鄰域點(diǎn)分別為P2~P9;骨骼提取細(xì)化過程需要迭代2個(gè)子過程(2)和(3)。若P1滿足這2個(gè)迭代條件,則其為非骨骼點(diǎn),該點(diǎn)被設(shè)置為白色;反之,該點(diǎn)被視為骨骼點(diǎn)保留下來。當(dāng)該算法遍歷二維圖像所有像素點(diǎn)后迭代停止,保留下來的一定是該點(diǎn)云切片降維后的骨骼曲線。
(2)
(3)
若該切片存在空洞,那么降維后的骨骼曲線能夠在保證基本輪廓的同時(shí)反映出空洞的存在,具體表現(xiàn)為斷點(diǎn)。二維曲線的斷點(diǎn)連接處理相較于三維點(diǎn)云的斷點(diǎn)連接處理更為容易。曲線補(bǔ)全時(shí)首先檢測(cè)二維曲線的斷點(diǎn),設(shè)像素點(diǎn)P1的坐標(biāo)為(i,j),其八鄰域點(diǎn)的坐標(biāo)分別為(i-1,j),(i-1,j+1),(i,j+1),(i+1,j+1),(i+1,j),(i+1,j-1),(i,j-1),(i-1,j-1)。當(dāng)像素點(diǎn)P1存在,且八鄰域點(diǎn)的像素值的和為真時(shí),則P1為斷點(diǎn);遍歷二維曲線上所有的點(diǎn),并對(duì)所有相鄰斷點(diǎn)進(jìn)行距離檢測(cè),若相鄰斷點(diǎn)的距離小于搜索半徑,則將曲線斷點(diǎn)進(jìn)行直線連接。檢測(cè)條件為:
(xi-xi+1)2+(yi-yi+1)2≤D2
(4)
式(4)中,D為距離檢測(cè)的搜索半徑。
完成二維曲線的補(bǔ)全后,再利用被三維信息分離出來的第三維的z坐標(biāo)對(duì)二維補(bǔ)全部分進(jìn)行升維,即在補(bǔ)全部分的(x,y)坐標(biāo)上,增加切片信息的z坐標(biāo),將原本曲線的二維像素點(diǎn)集轉(zhuǎn)變?yōu)槿S點(diǎn)云。由于每個(gè)切片點(diǎn)云的數(shù)據(jù)量非常龐大,三維信息分離出的z坐標(biāo)信息也同樣龐大,因此,利用體素濾波的三維柵格大小對(duì)補(bǔ)全點(diǎn)云進(jìn)行密度重建,達(dá)到與非補(bǔ)全點(diǎn)云相同的密度信息。點(diǎn)云空洞補(bǔ)全算法偽代碼如下。
輸入:二維圖片IMG,濾波后點(diǎn)云M2,體素柵格大小a, 切片厚度d
輸出:補(bǔ)全后的點(diǎn)云模型M3
1.intn=d/a,m=0;//設(shè)置每一個(gè)二維圖片補(bǔ)全點(diǎn)數(shù),初始化補(bǔ)全后點(diǎn)云的點(diǎn)的數(shù)量m
2.for each imageGi,i=0,1,…,IMG.size()//N個(gè)二維圖片
3.g=repair(Gi)-Gi;//對(duì)圖片Gi進(jìn)行二維補(bǔ)全,并提取補(bǔ)全部分曲線
4.for each pointpj,j=0,1,…,points(gi).size() do//遍歷每張圖片中的所有黑點(diǎn)
5.fork,k= 0, 1, …,n-1 do
6.Pi->pm.x=pj.x;//將二維補(bǔ)全的曲線的x坐標(biāo)賦值給新點(diǎn)云Pi的x坐標(biāo)
7.Pi->pm.y=pj.y;//將二維補(bǔ)全的曲線的y坐標(biāo)賦值給新點(diǎn)云Pi的y坐標(biāo)
8.Pi->pm.z=min(M2.z)+k*a;//將按照體素柵格大小間隔的坐標(biāo)賦值給新點(diǎn)云Pi的z坐標(biāo)
9.m++;
10.end for
11.end for
12.M3=M2.push_back(Pi);//每補(bǔ)全一個(gè)切片,將結(jié)果加給M3
13.end for
綜上所述,空洞點(diǎn)云預(yù)處理和點(diǎn)云空洞補(bǔ)全2個(gè)算法所需要的輸入量為:原始點(diǎn)云M、切片厚度d和體素柵格大小a,默認(rèn)輸入量為三維掃描設(shè)備初始運(yùn)行方向z,輸出量為補(bǔ)全后的三維點(diǎn)云。其中,切片厚度用于控制最終點(diǎn)云的補(bǔ)全精度和運(yùn)算速度,體素柵格大小用于控制密度重建相鄰點(diǎn)間距。
基于實(shí)驗(yàn)室搭建尺寸為3 m×2 m×2 m(長(zhǎng)×寬×高)的巷道模型,內(nèi)部采用錨桿支撐結(jié)構(gòu),水泥色圍布作為巷道表面。三維掃描設(shè)備選用深度相機(jī)Intel RealSense D455,其包括RGB攝像頭和雙目紅外深度模塊,采用全局深度快門,最小深度距離為0.4 m,深度精度小于2% ,深度視場(chǎng)為87°×58°,RGB傳感器分辨率1 280×800,深度輸出分辨率為1 280×720。移動(dòng)機(jī)器人攜帶深度相機(jī)放置于巷道模型入口2.5 m地標(biāo)處,右側(cè)地標(biāo)用于起始位置標(biāo)定。
為評(píng)估算法的有效性,采用倒角距離CD(chamfer distance)作為評(píng)估指標(biāo),公式為:
(5)
式(5)中,S1為生成點(diǎn)云;S2為真實(shí)點(diǎn)云;CD(S1→S2)為計(jì)算新生成點(diǎn)云中每個(gè)點(diǎn)與其最接近的真實(shí)點(diǎn)云之間的平均平方距離,衡量的是生成點(diǎn)云與真實(shí)點(diǎn)云的差異程度,CD值越小越接近真實(shí)點(diǎn)云;CD(S2→S1)為計(jì)算真實(shí)點(diǎn)云中每個(gè)點(diǎn)與其最接近的生成點(diǎn)云之間的平均平方距離,衡量的是真實(shí)點(diǎn)云在生成點(diǎn)云中的覆蓋率,CD值越小覆蓋率越高。
采用目前視覺SLAM中泛用性、穩(wěn)定性最佳的ORB-SLAM2算法,分別重建了點(diǎn)集數(shù)量為127 272和92 856的巷道點(diǎn)云模型,設(shè)置體素柵格大小為0.01。在三維重建過程中,由于受環(huán)境中障礙物的影響,所建2組稠密模型均出現(xiàn)了多處空洞??斩囱a(bǔ)全試驗(yàn)結(jié)果如圖2所示。
(a) 輸入點(diǎn)云
(b) 算法補(bǔ)全圖2 空洞補(bǔ)全試驗(yàn)結(jié)果
由圖2可知,模型在f1,f2,f3,f4,f5出現(xiàn)了較大區(qū)域的點(diǎn)云空洞,算法處理后f1~f5區(qū)域的空洞已被補(bǔ)全。點(diǎn)云補(bǔ)全試驗(yàn)結(jié)果分析見表1。不同算法的補(bǔ)全效果見表2。從表1和表2可以發(fā)現(xiàn),原始點(diǎn)云空洞補(bǔ)全與密度重建成功,CD值保持了較低水平,達(dá)到了良好的補(bǔ)全效率。同時(shí),隨著切片厚度增大,點(diǎn)云空洞補(bǔ)全耗時(shí)下降,但CD值相應(yīng)提高,即補(bǔ)全效果下降。與其他算法相比,本算法的平均耗時(shí)和補(bǔ)全速度均最優(yōu),補(bǔ)全效果較佳。實(shí)際應(yīng)用中可根據(jù)實(shí)際建模效果設(shè)定較優(yōu)的切片厚度和體素柵格大小,以達(dá)到高效率的點(diǎn)云補(bǔ)全。
表1 點(diǎn)云補(bǔ)全試驗(yàn)結(jié)果分析
表2 不同算法的補(bǔ)全效果
針對(duì)環(huán)境物體建模過程易受掃描設(shè)備固有誤差和環(huán)境物體屬性影響而產(chǎn)生點(diǎn)云空洞的現(xiàn)象,提出了一種基于垂直切片的點(diǎn)云空洞補(bǔ)全算法,融合了垂直切片與維度轉(zhuǎn)化的原理,對(duì)存在空洞的點(diǎn)云進(jìn)行濾波、切片、降維、二維曲線補(bǔ)全與提取以及升維處理。試驗(yàn)結(jié)果表明,該算法在應(yīng)對(duì)大型場(chǎng)景或物體點(diǎn)云中的空洞問題時(shí),處理更加簡(jiǎn)單、快速,為點(diǎn)云修復(fù)領(lǐng)域提供了一種無需深度學(xué)習(xí)的、高效的空洞補(bǔ)全修復(fù)方法。