李若白,陳金廣
1(西安工程大學 計算機科學學院,西安 710048)
2(柯橋區(qū)西紡紡織產業(yè)創(chuàng)新研究院,紹興 312030)
利用點云數據對現實物體進行三維重建是計算機視覺領域的重要技術,已廣泛應用于各行各業(yè).Kinect[1]作為一款具有點云采集功能的設備,在文物數字化[2]、虛擬現實[3]、三維人體重建與測量[4]、逆向工程[5]等諸多領域都有應用.通過Kinect 對現實物體的表面進行多角度掃描,得到其點云數據,利用點云配準技術將不同角度的點云數據合并到統(tǒng)一的三維坐標系下,形成一個完整的點云數據集,從而可以得到該物體的三維數字模型.
點云配準是三維重建過程中的關鍵技術,目前常用的配準算法是Besl 等于1992年提出的迭代最近點(Iterative Closest Points,ICP)算法[6],該算法精度高、容易實現,但對目標點云和待配準點云的初始位置要求較高,并且在點云數量較大時,配準過程會消耗大量時間.為此,國內外研究人員在此算法的基礎上進行了改進,提出了PICP (Probability ICP)[7]、MICP(Modified ICP)[8]和CICP (Cluster ICP)[9]等配準算法,這些算法雖然克服了ICP 算法的局限性,但是算法的普適性有所降低,并且對Kinect 實時采集的點云進行配準時具有較低的魯棒性.Chen 等[10]和Zhao 等[11]提出了尺度迭代最近點 (Scaling Iterative Closest Point,SICP)算法,但在點云數量較大的情況下配準效率較低,同樣不適合直接用來對Kinect 采集的原始點云進行配準.
針對上述問題,本文提出一種基于特征點法向量夾角的改進點云配準算法.該算法在點云配準之前對Kinect 采集得到的原始點云數據進行下采樣和濾波處理,在保持點云的形態(tài)特征和空間信息不變的情況下,精簡點云數量.在點云初始配準階段,通過計算特征點法向量之間的夾角來調整待配準點云的位姿,使目標點云和待配準點云在空間的位姿保持一致.最后在點云精細配準階段,使用迭代最近點配準算法完成兩片點云的配準.
Kinect是微軟公司開發(fā)的一款獲取3D 體感信息的設備,它由多陣列麥克風、RGB 彩色攝像頭、紅外攝像頭和紅外發(fā)射器組成,可應用于體感游戲、三維重建、虛擬試衣、文物保護等領域.Kinect 1.0 獲取深度圖像是基于Light Coding[12]技術,該技術是將紅外線光均勻分布投射在被測物體和空間中,通過紅外攝像頭記錄空間和物體上的每個散斑,在得到原始數據后,使用設備中的PS1080 芯片計算出具有深度信息的圖像.Kinect 2.0 則是基于Time Of Flight (TOF)技術獲取深度圖像,TOF 技術是通過向目標發(fā)射連續(xù)的特定波長的紅外光線脈沖,經過傳感器接收待測物體傳回的光信號,計算光線往返的飛行時間或相位差得到待測物體的3D 深度信息.相比于Kinect 1.0,采用了TOF技術的Kinect 2.0 獲取深度圖像的精度更高,被外界光影響的概率更低,針對環(huán)境光具有更強的抗干擾性,因此本文選用Kinect 2.0 采集點云數據.
為獲取物體的點云數據,通常需要先獲取物體的深度圖像,然后將深度圖像的二維圖像信息根據式(1)和式(2)轉換成三維點云數據.
式中,fx、fy、u0、v0為Kinect的內參,可通過相機標定求出;(u,v)為深度圖像中的點;zc為物體到相機的距離;xw、yw、zw為世界坐標系中的坐標點,即點云坐標;R、T分別為3×3的旋轉矩陣和3×1的平移矩陣,且[RT]=[I1].
使用Kinect 獲取的點云數量和設備的相機分辨率有關,尤其是Kinect 2.0,獲取的每一幀深度圖像中包含的點云數量通常在21 萬左右.而且在采集點云的過程中,由于Kinect的精度、使用者的經驗和環(huán)境因素等帶來的影響,點云數據中會不可避免的出現噪聲點,這將對點云配準的精度和效率帶來直接影響,因此在點云配準前需要對Kinect 采集的原始點云數據進行下采樣和濾波處理.
2.2.1 點云下采樣
由于Kinect 獲取的每一幀圖像中包含的點云數量巨大,如果直接使用原始點云數據進行配準,會降低點云的配準效率,因此在點云配準前需對原始點云進行下采樣處理,精簡點云數量.此處使用體素化網格法[13]實現點云下采樣,其步驟為:
(1)為原始點云創(chuàng)建三維體素柵格,體素大小由原始點云數量決定;
(2)計算三維體素柵格的重心點,并用距離重心點最近的點代替體素柵格內的其他點,刪除剩余點;
(3)遍歷原始點云中所有點并重復執(zhí)行步驟(1)和步驟(2),得到下采樣處理后的點云.
2.2.2 移除離群點
通常在使用Kinect 采集點云數據時,因為設備和測量誤差會產生稀疏的離群點,如果不將離群點移除,則會影響點云配準的精度.此處通過計算一個點的鄰域范圍內K 近鄰的鄰域平均距離來移除離群點,其步驟如下:
(1)使用kd-tree 算法[14]對點云數據集進行搜索,尋找數據集中每個目標點的鄰域范圍內K個點作為臨近點;
(2)計算目標點與臨近點的平均值n和標準差m,并設定一個閾值 τ(τ>0),若n>τ×m,則該點為離群點,并將其從點云數據集中移除.
ICP 算法雖然具有比較高的配準精度,但該算法對目標點云和待配準點云的初始位姿要求較高,并且需要對兩片點云公共部分的特征點進行逐一匹配,這將增大點云配準的耗時.因此,對點云配準算法進行改進:在點云初始配準階段,通過計算兩片點云對應的特征點法向量之間的夾角來調整待配準點云的初始位姿,在此基礎上使用ICP 算法完成點云的精細配準.
3.1.1 特征點的提取與匹配
特征點是點云數據集中具有穩(wěn)定性、區(qū)別性和代表性的點集,其數量相比于原始點云的數量少很多,在點云配準、曲面重建和三維人體測量研究中具有重要作用.特征點提取算法比較多,如NARF(Normal Aligned Radial Feature)算法[15]、快速點特征直方圖(Fast Point Feature Histograms,FPFH)算法[16]、尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)算法[17]、Harris 算法[18]等.SIFT 算法針對點云的平移、旋轉、縮放等具有尺度不變性[19],對Kinect 采集的點云適用性高,因此本文使用SIFT 算法提取點云特征點.
SIFT 算法的原理可理解為:對每個相鄰尺度之間的圖像進行相減,得到差分高斯金字塔圖像,然后對其進行泰勒展開,從而定位出特征點的精確位置.
一個尺度可變高斯函數G(x,y,σ)與原圖像I(x,y)進行卷積運算,得到該圖像在不同尺度下的尺度空間L(x,y,σ),即:
式中,σ為尺度空間因子,(x,y)為圖像的像素坐標.
相鄰尺度圖像之間相減可以得到高斯差分算子D(x,y,σ),用來對尺度圖像中的極值點進行檢測:
式中,k為表示不同尺度圖像的一個常量.尺度圖像中的極值點組成了特征點,通過擬合三維曲面可以確定特征點的坐標和尺度,同時去除不穩(wěn)定、對比度低的特征點.利用差分高斯 (DoG)函數對空間尺度進行泰勒展開,以篩選特征點,展開式如下:
式中,X=(x,y,σ)T,對式(6)進行求導,并令其等于0,就可以得到特征點的精確坐標:
將式(7)帶入式(6),化簡可得:
若極值點X=(x,y,σ)T滿足則將該點保存為特征點,其中 ψ為極值點偏移量的閾值.
使用SIFT 算法將目標點云和待配準點云公共重疊部分的特征點提取之后,需要對兩片點云的特征點進行匹配,此處通過計算特征點的最近歐氏距離來確定對應的特征點集.設目標點云的特征點集為Pf={p1,p2,…,pi},待配準點云的特征點集為Qf={q1,q2,…,qj},針對特征點集Pf中一點pi,使用快速最近鄰搜索(FLANN)算法[20]查找特征點集Qf中與該點歐式距離最近的一點qj,得到兩片點云對應的特征點對(pi,qj).
3.1.2 基于特征點法向量夾角調整點云位姿
由于使用ICP 算法進行點云配準時對目標點云P和待配準點云Q的初始位姿有較高要求,因此在點云初始配準階段通過計算兩片點云的特征點法向量之間的夾角來調整待配準點云的位姿,算法流程如下:
(1)根據兩片點云對應的特征點對計算其法向量npi和nqj;
(2)計算對應法向量之間夾角的余弦值,并與預設的閾值λ進行比較,計算式如下:
(3)如果式(9)不成立,則通過反余弦函數計算法向量之間夾角的角度θ,根據該角度估計待配準點云的剛體變換矩陣,調整待配準點云的位姿,重復步驟(2)和步驟(3),直到式(9)成立.
經過點云的初始配準,目標點云和待配準點云已經得到了比較理想的位姿狀態(tài),在此基礎上使用ICP算法完成兩片點云的精細配準.ICP 算法是通過目標點云和待配準點云之間的幾何關系來計算相應的變換參數,從而確定對應的旋轉矩陣和平移矩陣并應用于待配準點云,得到變換位置后新的待配準點云,不斷重復上述過程,直到滿足所需的收斂條件,即滿足目標函數最小[21]時,便可完成點云的精細配準.目標函數如下式:
式中,、分別為初始配準獲得的目標點云和待配準點云,R、T分別為旋轉矩陣和平移矩陣.
為驗證上述算法在點云配準中的有效性和可行性,使用Stanford Bunny 點云模型和Kinect 采集的點云數據模型分別進行3 次實驗,并與傳統(tǒng)的ICP 算法進行比較.實驗在Intel core i5-4210U CPU @ 1.70 GHz~2.40 GHz、8 GB RAM、Windows 10 64 位專業(yè)版操作系統(tǒng)、Visual Studio 2019 開發(fā)平臺、PCL 1.8.1 版本、Kinect for Windows SDK V2.0 環(huán)境下進行,C++作為編程語言.圖1為實驗2和實驗3的算法流程圖.
實驗1 使用經典的Stanford Bunny 點云模型作為素材,以驗證本文算法的可行性,實驗結果如圖2所示.實驗使用不同角度下的點云模型進行配準,目標點云和待配準點云分別如圖2(a)、圖2(b)所示.使用傳統(tǒng)ICP算法和使用本文算法對兩片點云進行配準,實驗結果如圖2(c)、圖2(d)所示.由圖2(c)可知,直接使用ICP算法對Stanford Bunny 點云模型進行配準后,兩片點云出現了錯位,沒有完全拼接在一起.使用改進后的算法對點云模型進行配準后的效果較好,由圖2(d)可以看出,兩片點云重合效果和配準后的姿態(tài)均好于圖2(c).
圖1 算法流程圖
圖2 Stanford Bunny 點云模型配準
實驗2 使用Kinect 采集人體上半身的點云數據作為實驗素材,以驗證本文算法針對Kinect 采集的點云數據進行配準時的有效性,實驗結果如圖3所示.其中目標點云是被測人體位于Kinect 正前方采集得到,如圖3(a),待配準點云是將Kinect 旋轉15°采集得到的,如圖3(b).圖3(c)、圖3(d)是分別使用傳統(tǒng)ICP 算法和本文算法得到的實驗結果,從實驗結果可以看到,使用傳統(tǒng)ICP 算法配準后的效果明顯較差,特別是胳膊,沒有完全重合,使用本文算法的配準效果有了明顯改善,兩片點云完全重合.
圖3 Kinect 采集的人體模型配準
實驗3 通過對室內復雜場景的點云模型進行配準以驗證本文算法的普適性.使用Kinect 對室內復雜場景的點云數據進行不同角度的采集作為目標點云和待配準點云,如圖4(a)、圖4(b)所示.圖4(c)、圖4(d)分別為使用傳統(tǒng)ICP 算法和使用本文算法進行點云配準的結果,由實驗結果可知,本文算法在點云配準效果上好于傳統(tǒng)ICP 算法,如圖4(d),室內的場景均完全重合.但使用傳統(tǒng)ICP 算法配準后效果較差,如圖4(c),兩片點云出現錯位,配準精度較低.
考慮到Kinect 采集的點云數據中包含有大量噪聲點,會影響點云配準的精度,所以本文在配準前對點云進行了噪聲濾波處理.為提高點云配準的效率,本文在保證點云數據中所包含的形狀特征與空間結構信息不變的情況下,使用體積為1 cm3的體素柵格對采集的點云數據進行下采樣,精簡點云數量.在點云初始配準階段,本文通過計算特征點法向量間的夾角來調整待配準點云的初始位姿,提高其初始位姿精度,從而可以減少傳統(tǒng) ICP 算法中目標點云與待配準點云對應旋轉矩陣的計算量,以此來減少點云配準算法的迭代次數,同時能夠降低算法的運算復雜度,減少配準時間.
圖4 Kinect 采集的室內場景模型配準
將點云配準用時和均方誤差作為點云配準效果的評價標準,如表1所示,本文算法在點云配準中的耗時相較于傳統(tǒng)ICP 算法明顯減少,均方誤差也優(yōu)于傳統(tǒng)ICP 算法.比如對復雜場景進行配準時,本文算法比傳統(tǒng)ICP 算法用時減少了18.205 s,配準效率提高了約29%,均方誤差降低了0.177,配準精度提高了約19%.由此可見本文算法在一定程度上能夠減少配準用時,提高點云配準精度.
表1 兩種配準算法性能比較
為解決Kinect 采集的點云數據配準效率低的問題,提出了一種基于特征點法向量夾角的改進點云配準算法,該算法通過精簡點云數量和計算特征點法向量間的夾角來調整點云初始位姿,以減少配準算法的迭代次數,從而達到提高點云配準效率的目的.實驗結果表明,本文提出的算法在保證Kinect 采集的物體點云形狀特征不變的情況下,能夠減少點云數量,提高點云配準精度和效率.但本文算法在對不同維度的多視角點云進行配準時,使用SIFT 算法對特征點進行提取與匹配時會出現一定的誤差,并耗費較多時間,使點云配準的精度和效率均有所降低,因此這也是該算法以后優(yōu)化的方向,并在此基礎上融合多視角點云配準數據,優(yōu)化配準結果,完成物體三維模型的重建.