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