本發(fā)明涉及一種對(duì)典型零部件識(shí)別的方法,尤其涉及一種基于點(diǎn)云的典型零部件識(shí)別方法。
背景技術(shù):
:
隨著激光測(cè)量技術(shù)的不斷發(fā)展,激光測(cè)量設(shè)備不斷推出,使逆求工程技術(shù)得到不斷發(fā)展。在逆求工程設(shè)計(jì)中,可以將某個(gè)產(chǎn)品表面表達(dá)為大量的離散點(diǎn),即點(diǎn)云。通過(guò)點(diǎn)云可進(jìn)行逆求工程設(shè)計(jì),如何從點(diǎn)云信息中提取產(chǎn)品的一些幾何特征,成為逆求工程的設(shè)計(jì)核心。
點(diǎn)云邊緣是指能夠表達(dá)產(chǎn)品特征的一些邊緣測(cè)量點(diǎn)。邊緣不僅能表達(dá)產(chǎn)品的幾何特征,而且在產(chǎn)品識(shí)別、重建曲面模型的品質(zhì)和精度中起著重要的作用。基于點(diǎn)云的邊緣提取在曲面重構(gòu)、空洞修補(bǔ)、曲面特征檢測(cè)得到廣泛應(yīng)用。
點(diǎn)云包括孔洞與非孔洞兩類。目前,提取非孔洞點(diǎn)云邊緣輪廓的方法有:利用點(diǎn)云分割方法的凸包算法提取點(diǎn)云邊緣;利用KD樹(shù)建立空間拓?fù)潢P(guān)系,通過(guò)鄰近點(diǎn)構(gòu)成的最小二乘平面投影點(diǎn)的角度差算法提取點(diǎn)云邊緣。提取孔洞點(diǎn)云邊緣輪廓的方法有:利用網(wǎng)格的拓?fù)潢P(guān)系提取點(diǎn)云邊緣;利用alpha-shape算法提取點(diǎn)云邊緣,可想象為一個(gè)半徑為α的圓在點(diǎn)云里滾動(dòng),當(dāng)α滿足一定條件,圓會(huì)在點(diǎn)云邊緣滾動(dòng),其滾動(dòng)的痕跡就是點(diǎn)云的邊緣。
對(duì)于典型零部件的點(diǎn)云數(shù)據(jù),運(yùn)用上述方法均難以實(shí)現(xiàn)對(duì)零部件點(diǎn)云特征邊界的快速提取,進(jìn)而難以實(shí)現(xiàn)對(duì)典型零部件的快速識(shí)別。
技術(shù)實(shí)現(xiàn)要素:
:
發(fā)明目的:
本發(fā)明提供了一種基于點(diǎn)云的典型零部件識(shí)別方法,現(xiàn)有的零部件識(shí)別中采用圖像的方法進(jìn)行識(shí)別,使用Kinect設(shè)備能夠提取點(diǎn)云,能夠通過(guò)對(duì)點(diǎn)云的處理達(dá)到識(shí)別目的。
技術(shù)方案:
本發(fā)明是通過(guò)以下技術(shù)方案來(lái)實(shí)現(xiàn)的:
基于點(diǎn)云的典型零部件識(shí)別方法,其特征在于:首先對(duì)Kinect傳感器獲取的目標(biāo)點(diǎn)云進(jìn)行優(yōu)化并利用八鄰域深度差算法提取點(diǎn)云邊緣;然后用隨機(jī)抽樣一致性RANSAC算法對(duì)分割后的點(diǎn)云邊緣進(jìn)行檢測(cè),并提取邊緣特征以識(shí)別零部件。
采用Kinect傳感器進(jìn)行零部件識(shí)別,對(duì)點(diǎn)云邊緣提取方法的具體步驟為:
(1)對(duì)獲取的點(diǎn)云數(shù)據(jù)沿深度方向垂直投影:對(duì)沿深度方向獲取的單面點(diǎn)云數(shù)據(jù),沿深度方向進(jìn)行投影;
(2)對(duì)投影點(diǎn)進(jìn)行柵格數(shù)據(jù)組織:對(duì)于投影點(diǎn),統(tǒng)計(jì)其橫縱坐標(biāo)最小與最大的四個(gè)值,根據(jù)柵格的劃分次數(shù),計(jì)算出單個(gè)柵格的大小,然后將各投影點(diǎn)分配到各個(gè)柵格且進(jìn)行編號(hào);
(3)計(jì)算柵格的深度差:根據(jù)編號(hào)的任意柵格,統(tǒng)計(jì)柵格內(nèi)投影點(diǎn)數(shù)目,若投影點(diǎn)數(shù)目為零,則將該柵格的深度值設(shè)定零;若柵格內(nèi)投影點(diǎn)數(shù)目大于零,則將投影點(diǎn)所對(duì)應(yīng)的深度值進(jìn)行加權(quán)平均,將加權(quán)平均值作為該柵格的深度值;
(4)比較柵格與八鄰域柵格的深度差:對(duì)每個(gè)柵格進(jìn)行判斷,若該柵格的深度值不為零,計(jì)算其與八鄰域柵格里每個(gè)柵格的深度差,若存在深度差大于設(shè)定閾值,則該柵格為存在邊緣點(diǎn)柵格;
(5)柵格內(nèi)點(diǎn)云邊緣點(diǎn)篩選:對(duì)于存在邊緣點(diǎn)的柵格,統(tǒng)計(jì)出柵格內(nèi)投影點(diǎn)個(gè)數(shù),然后對(duì)投影點(diǎn)所對(duì)應(yīng)的深度值進(jìn)行升序排列;當(dāng)投影點(diǎn)個(gè)數(shù)為奇數(shù),柵格邊緣點(diǎn)為中間位置所對(duì)應(yīng)的投影點(diǎn);當(dāng)投影點(diǎn)個(gè)數(shù)為偶數(shù),該柵格邊緣點(diǎn)為中間兩個(gè)值所對(duì)應(yīng)的任一投影點(diǎn),根據(jù)投影點(diǎn)提取其所對(duì)應(yīng)的三維點(diǎn)。
在對(duì)點(diǎn)云邊緣提取前,先進(jìn)行點(diǎn)云獲取與優(yōu)化,利用非線性濾波優(yōu)化算法對(duì)點(diǎn)云去噪處理。
點(diǎn)云識(shí)別的步驟如下:
1)點(diǎn)云邊緣分割:點(diǎn)云邊緣數(shù)據(jù)通常被看成一個(gè)點(diǎn)集,點(diǎn)集內(nèi)各種目標(biāo)特征點(diǎn)混合在一起,點(diǎn)云邊緣分割就是將同一目標(biāo)特征點(diǎn)提取出來(lái);
2)基于RANSAC算法的目標(biāo)識(shí)別:對(duì)于有棱角且邊是直線的典型零部件,依據(jù)隨機(jī)抽樣一致性RANSAC算法,對(duì)分割后的典型零部件點(diǎn)云邊緣進(jìn)行檢測(cè),并提取邊緣特征以識(shí)別零部件。
優(yōu)點(diǎn)及效果:
整個(gè)識(shí)別過(guò)程中的設(shè)備,包括Kinect傳感器和筆記本電腦,成本低。
整個(gè)識(shí)別過(guò)程都是由設(shè)備自動(dòng)完成,零部件識(shí)別快速、精確。
附圖說(shuō)明:
圖1為某點(diǎn)深度值的誤差示意圖。
圖2為實(shí)驗(yàn)物體圖。
圖3為3×3柵格劃分圖。
圖4為柵格的深度平均值圖。
圖5為柵格存在邊緣點(diǎn)示意圖。
圖6為柵格深度篩選示意圖。
圖7為邊緣點(diǎn)分割示意圖。
表1為Kinect深度偏移。
表2為0.8m處Kinect數(shù)據(jù)優(yōu)化后偏移量。
表3為典型零部件模型三個(gè)參數(shù)。
具體實(shí)施方式:
本發(fā)明涉及一種基于點(diǎn)云的典型零部件識(shí)別方法,首先對(duì)Kinect傳感器獲取的目標(biāo)點(diǎn)云進(jìn)行優(yōu)化并利用八鄰域深度差算法提取點(diǎn)云邊緣;然后用隨機(jī)抽樣一致性RANSAC算法對(duì)分割后的點(diǎn)云邊緣進(jìn)行檢測(cè),并提取邊緣特征以識(shí)別零部件。該方法利用Kinect獲取點(diǎn)云數(shù)據(jù),簡(jiǎn)單,方便快捷。
采用Kinect傳感器進(jìn)行零部件識(shí)別,對(duì)點(diǎn)云邊緣提取方法的具體步驟為:
(1)對(duì)獲取的點(diǎn)云數(shù)據(jù)沿深度方向垂直投影:對(duì)沿深度方向獲取的單面點(diǎn)云數(shù)據(jù),沿深度方向進(jìn)行投影;
(2)對(duì)投影點(diǎn)進(jìn)行柵格數(shù)據(jù)組織:對(duì)于投影點(diǎn),統(tǒng)計(jì)其橫縱坐標(biāo)最小與最大的四個(gè)值,根據(jù)柵格的劃分次數(shù),計(jì)算出單個(gè)柵格的大小,然后將各投影點(diǎn)分配到各個(gè)柵格且進(jìn)行編號(hào);
(3)計(jì)算柵格的深度差:根據(jù)編號(hào)的任意柵格,統(tǒng)計(jì)柵格內(nèi)投影點(diǎn)數(shù)目,若投影點(diǎn)數(shù)目為零,則將該柵格的深度值設(shè)定零;若柵格內(nèi)投影點(diǎn)數(shù)目大于零,則將投影點(diǎn)所對(duì)應(yīng)的深度值進(jìn)行加權(quán)平均,將加權(quán)平均值作為該柵格的深度值;
(4)比較柵格與八鄰域柵格的深度差:對(duì)每個(gè)柵格進(jìn)行判斷,若該柵格的深度值不為零,計(jì)算其與八鄰域柵格里每個(gè)柵格的深度差,若存在深度差大于設(shè)定閾值,則該柵格為存在邊緣點(diǎn)柵格;
(5)柵格內(nèi)點(diǎn)云邊緣點(diǎn)篩選:對(duì)于存在邊緣點(diǎn)的柵格,統(tǒng)計(jì)出柵格內(nèi)投影點(diǎn)個(gè)數(shù),然后對(duì)投影點(diǎn)所對(duì)應(yīng)的深度值進(jìn)行升序排列;當(dāng)投影點(diǎn)個(gè)數(shù)為奇數(shù),柵格邊緣點(diǎn)為中間位置所對(duì)應(yīng)的投影點(diǎn);當(dāng)投影點(diǎn)個(gè)數(shù)為偶數(shù),該柵格邊緣點(diǎn)為中間兩個(gè)值所對(duì)應(yīng)的任一投影點(diǎn),根據(jù)投影點(diǎn)提取其所對(duì)應(yīng)的三維點(diǎn)。
在對(duì)點(diǎn)云邊緣提取前,先進(jìn)行點(diǎn)云獲取與優(yōu)化,比較了線性和非線性濾波優(yōu)化算法;最后根據(jù)濾波算法的濾波效果,利用非線性濾波優(yōu)化算法對(duì)點(diǎn)云去噪處理。
點(diǎn)云識(shí)別的步驟如下:
1)點(diǎn)云邊緣分割:點(diǎn)云邊緣數(shù)據(jù)通常被看成一個(gè)點(diǎn)集,點(diǎn)集內(nèi)各種目標(biāo)特征點(diǎn)混合在一起,點(diǎn)云邊緣分割就是將同一目標(biāo)特征點(diǎn)提取出來(lái);
2)基于RANSAC算法的目標(biāo)識(shí)別:對(duì)于有棱角且邊是直線的典型零部件,依據(jù)隨機(jī)抽樣一致性RANSAC算法,對(duì)分割后的典型零部件點(diǎn)云邊緣進(jìn)行檢測(cè),并提取邊緣特征以識(shí)別零部件。
下面結(jié)合附圖對(duì)本發(fā)明做進(jìn)一步的說(shuō)明:
基于點(diǎn)云的典型零部件識(shí)別方法,步驟如下:
(1)點(diǎn)云獲取與優(yōu)化,具體步驟如下:
1)點(diǎn)云精度分析:Kinect采集數(shù)據(jù)時(shí)存在一定的誤差,其獲取空間某點(diǎn)的深度值,不同時(shí)刻該點(diǎn)的深度值存在精度誤差,圖1給出了某固定點(diǎn)在不同時(shí)刻深度值存在誤差的示意圖。
如圖1所示,若某點(diǎn)深度值為h,h1、h2分別在t2和t3時(shí)刻獲取的該點(diǎn)點(diǎn)深度值。顯然,在t2和t3時(shí)刻獲得的深度值存在著誤差。
為研究深度值的隨機(jī)誤差情況,以豎直剛性木板平面作為目標(biāo),設(shè)計(jì)了利用Kinect從0.7m~3m之間間隔0.1m的方式進(jìn)行掃描,每個(gè)距離獲取一幅深度圖像,統(tǒng)計(jì)深度圖像里點(diǎn)的深度偏移量,即同一幅深度圖像里最大與最小深度值的差,圖2給出了實(shí)驗(yàn)圖,表1給出了深度偏移量。
表1Kinect深度偏移
2)點(diǎn)云優(yōu)化:由于Kinect深度值隨機(jī)跳變的特點(diǎn),利用濾波優(yōu)化算法對(duì)其去噪處理。濾波優(yōu)化分為線性和非線性濾波優(yōu)化算法。同樣以豎直剛性木板平面為目標(biāo),利用Kinect距離0.8m處對(duì)目標(biāo)進(jìn)行掃描,獲取30幀深度圖像,每一幀圖像上有307200個(gè)數(shù)據(jù)點(diǎn),利用多線程對(duì)數(shù)據(jù)點(diǎn)進(jìn)行并行計(jì)算,將不同深度圖像幀在同一坐標(biāo)位置的深度數(shù)據(jù)進(jìn)行線性濾波和非線性濾波,表2給出了利用不同濾波優(yōu)化算法后所對(duì)應(yīng)的偏移量。
表2 0.8m處Kinect數(shù)據(jù)優(yōu)化后偏移量
線性濾波算法可歸結(jié)為:
式中:F(x,y)表示不同圖像幀在點(diǎn)(x,y)位置的深度值;M為圖像幀數(shù);G(x,y)表示優(yōu)化后點(diǎn)(x,y)位置的深度值。
非線性濾波算法可歸納為:
G(x,y)=Fmid(x,y)
式中:Fmid(x,y)表示不同圖像幀在點(diǎn)(x,y)位置的深度值排序后的中間值;G(x,y)為優(yōu)化后該點(diǎn)的深度值。
如表2所示,在距離0.8m處利用線性濾波優(yōu)化,偏移量小于6mm,利用非線性濾波優(yōu)化,偏移量小于4mm,所以本發(fā)明利用非線性濾波優(yōu)化算法對(duì)深度圖像進(jìn)行優(yōu)化。對(duì)于優(yōu)化后的深度圖像,利用Kinect的SDK軟件開(kāi)發(fā)工具包將其轉(zhuǎn)化為點(diǎn)云數(shù)據(jù)。
(2)點(diǎn)云邊緣提取,對(duì)于Kinect所獲取的點(diǎn)云數(shù)據(jù),用八鄰域深度差(8N-DD)算法進(jìn)行點(diǎn)云邊緣提取,具體步驟如下:
1)對(duì)點(diǎn)云沿深度方向垂直投影
對(duì)沿深度方向獲取的單面點(diǎn)云數(shù)據(jù),沿深度方向z進(jìn)行投影(相當(dāng)于垂直投影到x,y平面上)。
點(diǎn)云數(shù)據(jù)可表示為:
P={Pi|Pi=(xi,yi,zi),i∈[1,n]}
式中:Pi表示空間(xi,yi,zi)處位置坐標(biāo);n表示點(diǎn)云個(gè)數(shù)。
投影點(diǎn)可表示為:
P'={Pi'|Pi'=(xi,yi),i∈[1,n]}
式中:Pi'表示(xi,yi)處位置坐標(biāo)。
2)對(duì)投影點(diǎn)進(jìn)行柵格數(shù)據(jù)組織
對(duì)于投影點(diǎn)P',統(tǒng)計(jì)其橫縱坐標(biāo)最小與最大的四個(gè)值Xmin、Xmax、Ymin、Ymax;根據(jù)柵格的劃分次數(shù)m,計(jì)算出單個(gè)柵格的大小為axb,其中:
[]表示取整
[]表示取整
將各投影點(diǎn)分配到各個(gè)柵格且進(jìn)行編號(hào):首先根據(jù)當(dāng)前投影點(diǎn)坐標(biāo)(x,y),計(jì)算該點(diǎn)所在柵格的行r和列c;然后將該點(diǎn)添加到第r行和c列的柵格中,且將該柵格編號(hào)為G(r,c),如圖3所示,其中:
[]表示取整
[]表示取整
如圖3所示,柵格是3×3柵格,從柵格左上角對(duì)柵格進(jìn)行編號(hào),第一行第一列柵格為G(0,0),第一行第二列柵格為G(0,1),直到將第三行第三列柵格編號(hào)為G(2,2)。
3)計(jì)算柵格的深度值
根據(jù)編號(hào)的任意柵格G(i,j),統(tǒng)計(jì)柵格內(nèi)投影點(diǎn)的數(shù)目,若投影點(diǎn)數(shù)目為零,則將該柵格的深度值設(shè)定為Z=0,如圖4所示;若柵格內(nèi)投影點(diǎn)數(shù)目大于零,則將投影點(diǎn)所對(duì)應(yīng)的深度值進(jìn)行加權(quán)平均,將加權(quán)平均值Zave作為該柵格的深度值,柵格深度值可表示為:
式中:Dm表示柵格內(nèi)投影點(diǎn)所對(duì)應(yīng)的深度值;L表示柵格內(nèi)投影點(diǎn)的個(gè)數(shù)。
圖4給出了3×3柵格的深度值設(shè)定,柵格G(0,0),G(1,0)和G(2,2)柵格中無(wú)投影點(diǎn),則柵格的深度值設(shè)為零;其它柵格內(nèi)都存在投影點(diǎn),則柵格的深度值設(shè)定為對(duì)應(yīng)的加權(quán)平均值,如:Z1,Z2,Z3,Z4,Z5,Z6。
4)柵格間深度比較
對(duì)每個(gè)柵格進(jìn)行判斷,若該柵格的深度值不為零,計(jì)算其與八鄰域柵格里每個(gè)柵格的深度差,若存在深度差大于閾值T,則該柵格為存在邊緣點(diǎn)柵格,圖5給出了判斷柵格存在邊緣點(diǎn)的示意圖。
如圖5所示,對(duì)于任意柵格G(i,j),以其八鄰域柵格中G(i-1,j)柵格為例,其與柵格G(i,j)的深度差為D,D大于閾值T,判斷出柵格G(i,j)存在邊緣點(diǎn)。
5)柵格內(nèi)點(diǎn)云邊緣點(diǎn)篩選
對(duì)于存在邊緣點(diǎn)的柵格G(i,j),統(tǒng)計(jì)出柵格內(nèi)投影點(diǎn)個(gè)數(shù)k,然后對(duì)投影點(diǎn)所對(duì)應(yīng)的深度值進(jìn)行升序排列。當(dāng)k為奇數(shù),柵格邊緣點(diǎn)為位置所對(duì)應(yīng)的投影點(diǎn);當(dāng)k為偶數(shù),該柵格邊緣點(diǎn)為或位置所對(duì)應(yīng)的投影點(diǎn),根據(jù)投影點(diǎn)提取其所對(duì)應(yīng)的三維點(diǎn),圖6給出了邊緣點(diǎn)篩選示意圖。
如圖6所示,存在邊緣點(diǎn)的柵格G(i,j)中有4個(gè)投影點(diǎn),對(duì)4個(gè)投影點(diǎn)所對(duì)應(yīng)的深度值排序?yàn)閆1,Z2,Z3和Z4,所以Z2或Z3所對(duì)應(yīng)的投影點(diǎn)為邊緣點(diǎn),根據(jù)邊緣點(diǎn)提取其三維點(diǎn)P。
(3)點(diǎn)云識(shí)別,為便于識(shí)別,首先對(duì)所提取的點(diǎn)云邊緣點(diǎn)進(jìn)行分割,然后對(duì)分割后的點(diǎn)云邊緣點(diǎn)利用RANSAC算法進(jìn)行檢測(cè),并提取出邊緣特征以識(shí)別目標(biāo),具體步驟如下:
1)點(diǎn)云邊緣分割:點(diǎn)云邊緣數(shù)據(jù)通常被看成一個(gè)點(diǎn)集,點(diǎn)集內(nèi)各種目標(biāo)特征點(diǎn)混合在一起,點(diǎn)云邊緣分割就是將同一目標(biāo)特征點(diǎn)提取出來(lái),圖7給出了邊緣點(diǎn)分割示意圖。
如圖7所示,點(diǎn)云邊緣數(shù)據(jù)集合為S,任取一點(diǎn)P,尋找該點(diǎn)附近的k個(gè)鄰近點(diǎn),在順時(shí)針?lè)较蛉W式距離最小的P‘點(diǎn)的作為新的目標(biāo)點(diǎn),對(duì)P‘點(diǎn)繼續(xù)尋找鄰近點(diǎn),順時(shí)針經(jīng)過(guò)一圈尋找又回到P點(diǎn),則將尋找到的所有目標(biāo)點(diǎn)作為分割出的點(diǎn)集S1,利用同樣方法分割出點(diǎn)集S2。
2)基于RANSAC算法的目標(biāo)識(shí)別:隨機(jī)抽樣一致性(RANSAC)算法思想簡(jiǎn)單,以擬合直線為例,首先隨機(jī)選擇兩個(gè)點(diǎn),兩點(diǎn)確定一條直線,統(tǒng)計(jì)在該條直線一定距離范圍內(nèi)點(diǎn)的數(shù)目V。重復(fù)隨機(jī)選擇U次,將V最大的直線確認(rèn)為最佳直線。
對(duì)于一些有棱角且邊是直線的典型零部件,依據(jù)RANSAC可以提取直線的思想,可以用來(lái)對(duì)典型零部件的點(diǎn)云邊緣進(jìn)行檢測(cè),并提取邊緣特征以識(shí)別零部件。
以六角工件為例,一些特征參數(shù)如表3所示,通過(guò)RANSAC算法對(duì)分割后點(diǎn)云邊緣進(jìn)行邊數(shù)及夾角檢測(cè),以此識(shí)別工件類型。
表3典型零部件模型三個(gè)參數(shù)
如表3所示,六角工件有6條邊,夾角為120°。利用RANSAC算法對(duì)六角工件的識(shí)別方法為:首先隨機(jī)提取六角工件點(diǎn)云邊緣中任意兩點(diǎn)(xi,yi)與(xj,yj),根據(jù)兩點(diǎn)坐標(biāo)求取兩點(diǎn)的直線方程,然后計(jì)算邊緣點(diǎn)內(nèi)某點(diǎn)到該直線的歐式距離D,若D小于設(shè)定的閾值T,則把該點(diǎn)當(dāng)作局內(nèi)點(diǎn),統(tǒng)計(jì)所有局內(nèi)點(diǎn)個(gè)數(shù)為N,若N滿足閾值條件ε,判斷N所對(duì)應(yīng)的直線為點(diǎn)云邊緣某條邊;重復(fù)隨機(jī)提取點(diǎn)云邊緣上的兩個(gè)點(diǎn),當(dāng)統(tǒng)計(jì)的點(diǎn)的個(gè)數(shù)滿足設(shè)定的閾值ε‘時(shí),跳出循環(huán);根據(jù)兩個(gè)點(diǎn)的斜率和截距去掉相似直線,剩余直線條數(shù)為6,計(jì)算剩下每?jī)蓷l直線的夾角為120°,依據(jù)剩余直線條數(shù)6及夾角120°判斷出點(diǎn)云邊緣所對(duì)應(yīng)的工件為六角形工件。