黃際瑋,陸安江*,趙麒,彭熙舜,陳伯云
(1.貴州大學(xué)大數(shù)據(jù)與信息工程學(xué)院,貴陽 550025;2.貴州民族大學(xué)機(jī)械電子工程學(xué)院,貴陽 550025)
點云分割[1]是根據(jù)點云的一些特征信息,如位置信息、法向量信息等,將具有共同特征信息的點云劃分到同一類,從而方便對點云進(jìn)行處理。點云分割是點云數(shù)據(jù)處理中重要的步驟之一,點云分割結(jié)果的好壞將會直接影響到之后特征提取、曲面重建等過程,因此,點云分割為實現(xiàn)物體識別與定位創(chuàng)造了條件。
目前常用的點云分割方法包括:基于聚類分割的方法[2]、基于區(qū)域分割的方法[3]、基于模型的方法以及基于邊緣的方法。在基于聚類分割的方法中,歐式聚類分割的方法[4]最為常用,其分割步驟為:先選取種子點,對種子點進(jìn)行鄰域搜索,如果在鄰域內(nèi)發(fā)現(xiàn)了其他的點,就將它們與種子點劃分為同一聚類簇,然后在聚類簇中選擇新的種子點進(jìn)行搜索,若聚類簇中的點不再增加,那么就完成了一次聚類,之后在剩余的點云中選取新的種子點,重復(fù)執(zhí)行之前的步驟,直到遍歷點云中所有的點。歐式聚類分割方法因其分割效率高、穩(wěn)健性好等優(yōu)點,在實際應(yīng)用中常常受到青睞。徐濤等[5]通過利用歐式聚類分割加上對Z軸的約束實現(xiàn)了蔬菜大棚雜草識別。田青華等[6]提出先去出邊緣點,再聚類分割,最后補(bǔ)齊邊緣點的思想,相較于傳統(tǒng)歐式聚類算法,準(zhǔn)確性提高了64.26%,速度提高了24.5%。梁雪[7]提出了基于超體素的散亂零件點云分割方法,將零件點云分割為超體素過分割和超體素區(qū)域增長兩個過程,成功實現(xiàn)散亂堆放零件的分割過程。在基于區(qū)域分割的方法中,劉瑋等[8]提出一種改進(jìn)的區(qū)域生長算法用于解決重疊分割問題,相較于傳統(tǒng)區(qū)域生長算法,分割正確率提高了24.9%。薛婧雅等[9]提出一種基于超體素與區(qū)域生長的機(jī)載點云屋頂平面分割方法,通過超體素方法將點云分為初始平面片集合,然后通過區(qū)域生長算法對平面片進(jìn)行聚類得到初始平面。史洪云等[10]提出一種基于空間約束的區(qū)域增長算法,對電力線點云2個空間約束條件進(jìn)行公式化表達(dá)后,以此作為生長準(zhǔn)則對電力線點云進(jìn)行區(qū)域生長,實現(xiàn)單根電力線分割。
在一般場景下,歐式聚類分割方法能達(dá)到理想的效果,但是對于一些特殊場景,如工件之間靠得太近甚至緊貼在一起,僅僅利用歐式聚類分割的方法不能把這些工件有效地分割出來。因此,針對實際場景中出現(xiàn)的工件粘連的情況,現(xiàn)提出一種結(jié)合歐式聚類和自適應(yīng)法向量約束的工件分割方法。首先對點云進(jìn)行預(yù)處理,去除環(huán)境噪聲與背景,接著采用歐式聚類分割算法將工件分割成點云簇,對于點云簇中工件粘連的情況,利用區(qū)域生長算法設(shè)置不同的法向量閾值并進(jìn)行分割,最終完成工件點云的分割,以期為后續(xù)的工件點云識別奠定基礎(chǔ)。
實驗數(shù)據(jù)選用無錫微視傳感科技有限公司研制的型號PCA-P/S600的3D相機(jī)獲取,如圖1所示,該相機(jī)采用微機(jī)電系統(tǒng)(micro-electro-mechanical system,MEMS)編碼光柵結(jié)構(gòu)光進(jìn)行掃描,可以根據(jù)圖像恢復(fù)算法重建出物體的真實三維點云數(shù)據(jù),光源為近紅外激光,采用單目結(jié)構(gòu)光原理,工作距離為300~600 mm,可應(yīng)用于生物識別、工業(yè)自動化、機(jī)器人、三維重建等場景。其規(guī)格參數(shù)如表1所示。
表1 PCA-P/S600 3D相機(jī)參數(shù)
圖1 PCA-P/S600 3D相機(jī)
結(jié)合歐式聚類和自適應(yīng)法向量約束的工件分割方法的流程如圖2所示,主要包含點云預(yù)處理、生成點云簇和自適應(yīng)法向量約束三個步驟。首先通過點云預(yù)處理去除噪聲與試驗臺背景,保留工件點云。然后利用歐式聚類分割方法把工件劃分成點云簇。最后針對點云簇中存在多個工件的情況,求出其平均法向量,將平均法向量結(jié)果代入?yún)^(qū)域生長算法進(jìn)行分割,完成最終的工件分割。
圖2 總體分割流程
通過3D相機(jī)得到包含試驗臺在內(nèi)的大量點云,且受到實際環(huán)境因素的影響,不可避免地會產(chǎn)生噪聲[11],所以在對點云進(jìn)行分割之前,需要對采集到的點云進(jìn)行預(yù)處理。為了提高后續(xù)對點云分割的效率,需要先利用體素濾波器對相機(jī)采集到的點云進(jìn)行下采樣,該方法能夠在保持點云特征的前提下對點云數(shù)據(jù)進(jìn)行精簡,提高后續(xù)對點云的處理速度。隨機(jī)采樣一致性(RANSAC)算法[12]采用迭代的方式從一組包含離群的被觀測數(shù)據(jù)中估算出數(shù)學(xué)模型的參數(shù),由于采集到的點云包含了試驗臺背景,這會影響到后續(xù)對工件的分割效果,所以采用隨機(jī)采樣一致性算法濾除試驗臺背景。經(jīng)過前兩步的處理,大量的無關(guān)點云已經(jīng)被濾除,但是仍然存在一些稀疏點云,原因是無法完全地去除背景且采集數(shù)據(jù)時不可避免地存在噪聲,對于這些離散的點云,根據(jù)噪點的特征可以通過統(tǒng)計濾波器[13]對它們進(jìn)行濾波處理。預(yù)處理前后得到的點云如圖3所示,預(yù)處理前后的點云數(shù)量如表2所示,可以看到,大量的無關(guān)點云已經(jīng)被濾除,只剩下工件點云。
圖3 預(yù)處理示意圖
表2 點云預(yù)處理階段點云數(shù)量
原始點云經(jīng)過預(yù)處理之后,大量的無關(guān)的點云已經(jīng)基本被濾除,只留下了工件點云,此時可以使用歐式聚類分割算法將工件點云劃分成點云簇。歐式聚類分割算法是一種基于歐式距離度量的聚類方法[14],在三維空間中的兩點(x1,y1,z1)與(x2,y2,z2)的歐式距離定義為
(1)
歐式聚類分割算法的步驟如圖4所示,主要經(jīng)過以下幾個步驟。
圖4 歐式聚類分割算法流程
步驟1對于空間中的某一點M,通過KD-Tree近鄰搜索算法找到k個離點M最近的點{m1,m2,…,mk},判斷這k個點到點M的距離,將距離小于閾值r的點m1,m2,…,m10,…,存放在集合Q中。
步驟2在集合Q中尋找除M外的另一點,重復(fù)步驟1。
步驟3依次遍歷集合Q中所有的點,重復(fù)上述步驟,直到Q中沒有新的點加入,則完成一次聚類。
經(jīng)過歐式聚類分割后的點云簇中會出現(xiàn)包含多個工件的情況,這是因為工件之間距離太近甚至貼合在一起,僅僅使用歐式聚類分割算法無法將它們完全分割,為了解決這個問題,引入自適應(yīng)法向量約束的方法,先求出點云簇的平均法向量,然后使用區(qū)域生長算法[15]對不同的點云簇設(shè)置不同的法向量進(jìn)行約束并分割,主要過程如下。
步驟1對于某一個點云簇,根據(jù)近鄰關(guān)系與法向量求出其平均法向量V。
步驟2依據(jù)曲率對點云簇中的點進(jìn)行排序,并設(shè)置一空的種子點序列Z與一空的聚類數(shù)組L。
步驟3將曲率最小的點加入種子點序列Z,從種子點序列Z中拿出一個種子點并搜索其鄰域。
步驟4比較鄰域點的法線與當(dāng)前種子點之間的夾角θ,若小于法向量角度閾值,將鄰域點加入聚類數(shù)組L,其中閾值設(shè)置為平均法向量V。
步驟5從聚類數(shù)組中檢查是否存在小于曲率閾值的點,若存在,則加入種子點序列。
步驟6刪除用過的種子點,用下一個種子點重復(fù)步驟3、步驟4,直到種子點被清空。
步驟7從曲率排序的點中,即曲率從小到大的順序選取聚類數(shù)組中沒有的點作為種子點,重復(fù)步驟2~步驟6。
其中,法向量的估計[16]流程如圖5所示。
圖5 法向量估計流程
對于點云中的每一個數(shù)據(jù)點pi通過K鄰域算法計算出與其相鄰的k個鄰近點,針對這些點計算出一個最小二乘意義上的局部平面,計算公式為
(2)
式(2)中:n為局部平面P的法向量;d為局部平面P到坐標(biāo)原點的距離。
通過式(2)可知,局部平面P經(jīng)過k個鄰域點的質(zhì)心,法向量n滿足‖n‖2=1,所以上述問題可以轉(zhuǎn)化為求解方差矩陣的特征值,分析協(xié)方差矩陣A的最小特征值所對于的特征向量,此小特征向量即為平面P的法向量。其中,協(xié)方差矩陣A的計算公式為
(3)
擬合平面P在滿足鄰域點到平面距離平方和最小的條件下,依據(jù)拉格朗日定理,解算出協(xié)方差矩陣A和平面法向量n滿足如下關(guān)系:
An=λn
(4)
式(4)中:λ為矩陣A的特征值;當(dāng)λ取最小值時,對應(yīng)的向量n就是擬合平面P的法向量,即pi點的法向量。
平均法向量的計算方法為:首先計算出對于點云簇中某點q鄰域內(nèi)的所有鄰近點法線夾角的均值αi:
(5)
式(5)中:k為鄰近點數(shù)目;vi為點q的法線;q點的鄰近點對應(yīng)法線分別為{vi1,vi2,…,vij}。
接著遍歷點云中所有的點得到N個鄰近點數(shù)目,求出整個點云簇中的平均法向量α:
(6)
實驗數(shù)據(jù)包含工件與試驗臺背景,其中工件是尺寸為6.0 mm×8.0 mm×4.0 mm的電容,如圖6所示,實驗所用的計算機(jī)為64位的Windows10操作系統(tǒng),配置為AMD Ryzen 54600H CPU@3.0GHz,16.00 GB內(nèi)存,應(yīng)用Visual Studio 2017編程環(huán)境,配合點云庫(PCL)1.8.1使用。
圖6 電容實物
經(jīng)過歐式聚類分割后的工件點云簇中,含有多個工件的點云簇如圖7所示。對以上點云簇進(jìn)行法向量自適應(yīng)約束,計算出每一個點云簇的平均法向量,如表3所示。
表3 不同點云簇平均的平均法向量
圖7 含多個工件的點云簇
對每個點云簇使用區(qū)域生長算法進(jìn)行分割,并設(shè)置不同的法向量進(jìn)行約束,得到的分割結(jié)果如圖8所示。分割時標(biāo)注的顏色是隨機(jī)產(chǎn)生的,每一種顏色代表一類點云,在工件的連接處存在著紅色的點云,這代表著連接的工件已經(jīng)被分割出來。提取出紅色點云后,得到最終分割結(jié)果。每個點云簇分割前后的點云數(shù)量如表4所示,每個點云簇分割出的點云類型及每個類型的點云數(shù)量如圖9所示。
圖8 法向量自適應(yīng)約束后的點云簇
圖9 最終分割點云數(shù)量
表4 點云簇分割前點云數(shù)量
而使用傳統(tǒng)的區(qū)域生長算法分割后得到的點云如圖10所示??梢钥吹?,對于一些貼合不太緊密的工件來說,可以使用傳統(tǒng)的區(qū)域生長算法分割來達(dá)到理想的分割效果,但是對于接觸相對緊密的工件,該方法就不能將它們完全地分割。為了定量分析本文提出的算法精確度,分別使用歐式聚類算法、區(qū)域生長算法和本文算法對兩組數(shù)據(jù)進(jìn)行分割對比,得到的分割精度如表5所示。
表5 不同算法分割精度對比
圖10 傳統(tǒng)區(qū)域生長算法分割結(jié)果
利用本文提出的結(jié)合歐式聚類與自適應(yīng)法向量約束的分割方法能比較靈活地提取出點云的邊界信息,利用這些信息對點云實現(xiàn)更精確地分割,彌補(bǔ)了使用傳統(tǒng)算法出現(xiàn)的過分割和欠分割的缺陷,從而得到更好的分割效果。
以小型電容為研究對象,應(yīng)用3D相機(jī)對其生成的點云進(jìn)行分割研究,得出如下結(jié)論。
(1)相對于傳統(tǒng)相機(jī),采用基于MEMS編碼光柵結(jié)構(gòu)光的3D相機(jī)能夠方便快速地采集工件點云數(shù)據(jù),在提高效率的同時保證了數(shù)據(jù)的精度。
(2)根據(jù)點云的分布特征,通過體素濾波、隨機(jī)采樣一致性去平面、統(tǒng)計濾波去噪聲的濾波順序有效地提取出工件點云,為后續(xù)工件點云分割提供了條件。
(3)針對工件點云分割提出了分割精度更高的算法,有效解決了傳統(tǒng)的歐式聚類算法及區(qū)域生長算法中出現(xiàn)的過分割以及欠分割的問題。
結(jié)果表明,本文提出的分割算法分割準(zhǔn)確度得到有效提升,分割效果顯著增強(qiáng)。在此基礎(chǔ)上,下一步工作的重點是如何實現(xiàn)將重疊的工件點云進(jìn)行有效地分割。