王 鵬,李少達,趙 雪
(1.成都理工大學(xué),成都 610059;2.西南交通大學(xué)地球科學(xué)與環(huán)境工程學(xué)院,成都 611756)
地面激光點云技術(shù)作為目前空間地理信息獲取的重要手段,廣泛用于三維重建[1]、文物保護[2]等領(lǐng)域。地面激光掃描儀由于其視角限制,需要多角度掃描才能獲取完整的目標(biāo)物體點云,并且不同角度掃描數(shù)據(jù)位于掃描儀局部坐標(biāo)系下,需要通過點云配準(zhǔn)算法將多站不同坐標(biāo)系下的掃描數(shù)據(jù)進行坐標(biāo)系統(tǒng)一。2009年,Magnusson[3-4]提出了3D-NDT算法,在精度和效率上都優(yōu)于經(jīng)典的ICP算法[5],但和ICP一樣需要初始值。因此,國內(nèi)學(xué)者提出了基于2D特征點[6]、3D特征點[7]、2D特征點和3D特征點結(jié)合[8]的粗配準(zhǔn)算法對3D-NDT算法進行改進。2014年,Salti等[9]提出了SHOT(signatures of histograms of orientations)3 D特征描述子,速度和精度都優(yōu)于FPFH[10]、3D-SURF[11]等3D特征描述子。2015年,Prakhya等[12]對SHOT 3D特征描述子進行改進,提出了二進制SHOT(binary signatures of histograms of orientations,b-SHOT)的3D特征描述子,提高了SHOT特征描述子的速度和精度。本文主要研究利用B-SHOT特征描述子進行點云粗配準(zhǔn)并結(jié)合3D-NDT實現(xiàn)點云數(shù)據(jù)的自動配準(zhǔn)。
B-SHOT特征描述子與SHOT特征描述子的區(qū)別在于,B-SHOT通過迭代的方式將SHOT的特征描述子由十進制編碼為二進制。利用雙向漢明距離搜索兩視點云之間的同名點,提高了配準(zhǔn)的效率和精度。
B-SHOT特征描述子通過結(jié)合符號(signatures)和直方圖(histograms)進行特征描述,主要包括建立唯一局部參考框架、子空間直方圖統(tǒng)計、二進制編碼等3個步驟。
為了使特征描述子對旋轉(zhuǎn)、平移和尺度保持不變,采用修改后的鄰域協(xié)方差矩陣C的特征向量創(chuàng)建局部參考框架,如式(1):
式中,r表示支持區(qū)域半么,di=||qi-q||表示支持區(qū)域r中的采樣點qi與參考點q的距離。
將局部x和z軸的方向朝向它們所代表的向量的多數(shù)方向,通過z和x的叉積,即y=z×x獲得局部y軸,這樣便可以得到唯一的局部參考框架。
圖1 球形柵格示意圖[12]
確定了局部參考框架以后,將參考點的所有鄰域點變換到局部參考框架下,以保證后面計算的直方圖對剛體變換的魯棒性。然后利用球體柵格方法將局部參考空間按照距離、俯仰和方位分成32個子空間(如圖1)。通過建立每個子空間的局部直方圖得到每個子空間的子特征,然后將每個子特征連起來就得到了SHOT特征描述子。最后通過迭代方式對SHOT特征描述子進行二進制編碼得到B-SHOT特征描述子。
3D正態(tài)分布變換算法的目標(biāo)是找到目標(biāo)點集在參考點集表面匹配的似然函數(shù)最大化時的姿態(tài)。3D-NDT算法首先將三維點集均勻地劃分為規(guī)則立方體,每個立方體內(nèi)包含一定數(shù)量的點。對于立方體中每一個點xi的概率密度函數(shù)可以表示為:
式中,x和V分別表示單個立方體內(nèi)點云的均值和方差。
3D-NDT算法通過目標(biāo)點集經(jīng)過初始坐標(biāo)轉(zhuǎn)換參數(shù)映射到參考點集中的概率密度之和s(p)作為坐標(biāo)變換參數(shù)的分?jǐn)?shù)值進行評價,通過對s(p)進行最優(yōu)化估計,便可以得到2個點集對于坐標(biāo)系的轉(zhuǎn)換參數(shù):
式中,x'i表示當(dāng)前掃描點映射到參考點集的坐標(biāo);T(p,xi)表示當(dāng)前點集的坐標(biāo)轉(zhuǎn)換矩陣。為了得到兩個點集之間的轉(zhuǎn)換矩陣,可以把最優(yōu)化問題看成最小化問題,即s(p)最小化。通過牛頓迭代法結(jié)合Hessian矩陣進行目標(biāo)函數(shù)求取最小值。令s(p)為0,為了使目標(biāo)函數(shù)最小,需求解以下方程:
其中g(shù)為f的梯度,用一階導(dǎo)數(shù)表示;H為Hessian矩陣,用f的二階導(dǎo)數(shù)表示。
實驗在ubuntu16.04系統(tǒng)(內(nèi)存4G)下進行,算法通過C++語言并結(jié)合點云數(shù)據(jù)庫PCL編碼實現(xiàn)。實驗數(shù)據(jù)采用斯坦福的bunny數(shù)據(jù),如圖2a所示。為驗證本文算法的可行性,首先對兩視點云分別計算B-SHOT特征描述子,然后利用雙向漢明距離(Hamming distance)計算兩視點云的同名點集,最后通過隨機采用一致性算法(random sample consensus,RANSAC)進行初始參數(shù)估計,再利用3D-NDT進行精確配準(zhǔn),實驗結(jié)果如圖2(c)。同時,與基于FPFH特征描述子的3D-NDT算法對比,結(jié)果如表1。為了提高配準(zhǔn)的效率,原始數(shù)據(jù)進行體素柵格采樣(柵格大小為0.001)。
圖2點云配準(zhǔn)過程示意圖
圖2b和2c分別為基于B-SHOT特征描述子的粗配準(zhǔn)結(jié)果和3D-NDT的精配準(zhǔn)結(jié)果。實驗證明了B-SHOT結(jié)合3D-NDT進行點云自動配準(zhǔn)的可行性。兩種粗配準(zhǔn)實驗對比結(jié)果如表1所示。在粗配準(zhǔn)中,基于B-SHOT特征描述子的粗配準(zhǔn)時間少于基于FPFH特征描述子的粗配準(zhǔn),使用3D-NDT進行精配準(zhǔn)的時間基本不變。最后基于B-SHOT特征描述子的粗配準(zhǔn)使得3D-NDT的精度高于基于FPFH特征描述子的粗配準(zhǔn),也間接證明了3D-NDT算法需要好的初始值才能表現(xiàn)出好的配準(zhǔn)精度。
表1 點云自動配準(zhǔn)實驗結(jié)果
本文針對3D-NDT點云配準(zhǔn)算法需要初始值的問題,提出了結(jié)合B-SHOT特征描述子與3D-NDT的點云自動配準(zhǔn)算法,不需要提供初始值便能完成相鄰兩個點云之間的高精度配準(zhǔn)。通過實驗對比,本文算法有效可行,且在精度和效率上均優(yōu)于目前最優(yōu)秀的FPFH特征配準(zhǔn)算法。但是3D-NDT算法還有許多需要改進的地方,在三維網(wǎng)格大小等參數(shù)確定過程中很難快速確定最佳參數(shù),降低了整個實驗過程的效率,常研究如何快速自適應(yīng)地確定網(wǎng)格大小等參數(shù)。這也將是下一步的研究方向。