陳國(guó)軍,孔李燕,張清偉,楊 靜
(中國(guó)石油大學(xué)(華東) 計(jì)算機(jī)與通信工程學(xué)院,山東 青島 266580)
近年來(lái),點(diǎn)模型的發(fā)展優(yōu)勢(shì)越發(fā)明顯,以點(diǎn)云為研究對(duì)象的計(jì)算機(jī)圖形學(xué)、計(jì)算機(jī)視覺(jué)成為研究熱點(diǎn),利用掃描技術(shù)得到的點(diǎn)云數(shù)據(jù)具有快速簡(jiǎn)單、信息量大、容易存儲(chǔ)等優(yōu)點(diǎn)。當(dāng)前對(duì)得到的點(diǎn)云進(jìn)行修改、分析、重用已成為重要的研究課題,點(diǎn)云分割也由此提出。點(diǎn)云分割是將復(fù)雜的三維點(diǎn)云模型分割成為數(shù)目有限的、各自連通的、相對(duì)簡(jiǎn)單的、方便其他程序處理應(yīng)用的子部分。點(diǎn)云分割是一項(xiàng)具有挑戰(zhàn)性的研究課題。2011年引入Point Cloud Library(PCL),這個(gè)庫(kù)包含先進(jìn)的3D感知算法。硬件和PCL的發(fā)展使得點(diǎn)云處理受到了越來(lái)越多的關(guān)注。
文中利用Kinect相機(jī)得到點(diǎn)云數(shù)據(jù),經(jīng)過(guò)點(diǎn)云配準(zhǔn)得到點(diǎn)云模型,利用背景分割并結(jié)合圖像分割對(duì)點(diǎn)云模型進(jìn)行點(diǎn)云模型分割得到目標(biāo)點(diǎn)云。
點(diǎn)云分割是通過(guò)一定的方法將點(diǎn)云數(shù)據(jù)中屬性相同或相近且空間位置相鄰的點(diǎn)劃分為一類(lèi),點(diǎn)云分割可以對(duì)單幀點(diǎn)云進(jìn)行分割,也可以對(duì)點(diǎn)云模型進(jìn)行分割。隨著研究的深入,點(diǎn)云分割的算法得到不斷的補(bǔ)充和完善。常用的點(diǎn)云模型分割算法主要包括基于邊緣的分割算法、基于區(qū)域的分割算法、基于聚類(lèi)的分割算法以及混合分割算法等。
點(diǎn)云分割是對(duì)大規(guī)模的點(diǎn)云數(shù)據(jù)進(jìn)行分割,簡(jiǎn)化點(diǎn)云數(shù)據(jù)以便后期對(duì)點(diǎn)云數(shù)據(jù)的加工處理。文獻(xiàn)[1]介紹了點(diǎn)云分割的定義、分類(lèi)和應(yīng)用情況,分析比較了幾類(lèi)典型的點(diǎn)云分割算法,給出了各方法的理論、特點(diǎn)和應(yīng)用范圍。
基于邊緣的分割算法,認(rèn)為法向量或曲率的突變是一個(gè)區(qū)域的邊界,被封閉的邊界包圍的這個(gè)區(qū)域是最終的分割結(jié)果,基于邊緣的分割算法最重要的是找到區(qū)域邊界。文獻(xiàn)[2]構(gòu)建符號(hào)距離函數(shù)估算點(diǎn)云的平均曲率,利用3D活動(dòng)輪廓模型實(shí)現(xiàn)點(diǎn)云模型分割。由于噪聲影響,點(diǎn)云模型的邊緣定位精度差,使得基于邊緣的分割算法存在不足。
基于區(qū)域的分割算法包含兩種思路,一種是區(qū)域增長(zhǎng)算法[3-4],選定種子點(diǎn)按照增長(zhǎng)策略向鄰域擴(kuò)散直至不存在連續(xù)點(diǎn)集。一種是層次分解算法,假設(shè)所有點(diǎn)集屬于同一目標(biāo),采用八叉樹(shù)[5]、KD樹(shù)[6]等進(jìn)行層次分解,得到不同細(xì)節(jié)的分割結(jié)果。
基于聚類(lèi)的分割方法,將點(diǎn)云分割看成具有一定特征參數(shù)的數(shù)據(jù)點(diǎn)的分類(lèi)過(guò)程。文獻(xiàn)[7-9]分別采用MeanShift聚類(lèi)、譜聚類(lèi)以及模糊聚類(lèi)實(shí)現(xiàn)點(diǎn)云模型的分割。王天召等[10]將K-mean用于配準(zhǔn)算法。杜廷偉等[11]提出基于高斯混合模型聚類(lèi)的深度數(shù)據(jù)分割方法,利用高斯混合模型對(duì)三維點(diǎn)云的法向量進(jìn)行聚類(lèi),然后利用隨機(jī)抽樣一致性算法對(duì)各個(gè)聚類(lèi)進(jìn)行平面擬合,實(shí)現(xiàn)對(duì)場(chǎng)景數(shù)據(jù)的平面提取?;诰垲?lèi)的分割方法,不同的聚類(lèi)能得到不同的結(jié)果。
混合分割一般包括多個(gè)步驟,基于邊緣和基于區(qū)域等方法混合使用可以彌補(bǔ)對(duì)應(yīng)不足。其他方法如隨機(jī)抽樣一致性算法,是將點(diǎn)集分成局內(nèi)點(diǎn)和局外點(diǎn),通過(guò)參數(shù)形成模型。李娜等[12]將點(diǎn)云的r半徑密度引入RANSAC點(diǎn)云分割算法中,結(jié)合角度和距離對(duì)分割算法進(jìn)行改進(jìn)。胡偉等[13]將種子點(diǎn)的選取和點(diǎn)到距離的標(biāo)準(zhǔn)差引入RANSAC算法中,對(duì)隨機(jī)抽樣一致性算法進(jìn)行了改善。趙成偉等[14]針對(duì)點(diǎn)云粘連現(xiàn)象,結(jié)合三維點(diǎn)云的空間分布和顏色信息,引入過(guò)分割方法將點(diǎn)云集劃分為超體素,利用歸一化方法完成粘連區(qū)域的目標(biāo)分割,這一方法對(duì)樹(shù)木具有良好的分割效果。文獻(xiàn)[15]提出一種平面曲面生長(zhǎng)算法非常適合用來(lái)分割平面。
三維模型分割的綜述文章可以參考文獻(xiàn)[16-18],這些工作大多基于三角網(wǎng)格模型,與網(wǎng)格模型相比,點(diǎn)云模型分割方法較少。
文中提出一種基于RGB-D的背景點(diǎn)云目標(biāo)分割方法。利用背景幀結(jié)合圖像分割進(jìn)行點(diǎn)云分割,從而得到獨(dú)立目標(biāo)物體。
Kinect相機(jī)既可以得到物體的顏色信息,也可以得到物體的深度信息,但由于二者的分辨率不同,不能直接將顏色信息和深度信息一一對(duì)應(yīng)。文中通過(guò)相機(jī)標(biāo)定的方法,求得圖像坐標(biāo)系和空間坐標(biāo)系的變換矩陣,從而得到顏色信息深度信息一一對(duì)應(yīng)的點(diǎn)云數(shù)據(jù)。
采用Kinect相機(jī),首先拍攝一幀背景點(diǎn)云A0,然后擺放前景物體拍攝得到A1,隨后對(duì)物體進(jìn)行旋轉(zhuǎn)拍攝得到物體的多角度三維點(diǎn)云數(shù)據(jù)A(2,3,…)。旋轉(zhuǎn)完成后,將相機(jī)固定到與第一組背景點(diǎn)云相對(duì)的位置,拍攝得到一幀數(shù)據(jù)B1,后將前景物體移開(kāi),再進(jìn)行拍攝得到背景點(diǎn)云B0,由此可得到兩組背景數(shù)據(jù)A0和B0。通過(guò)Kinect獲得的三維場(chǎng)景的點(diǎn)云信息,既包含深度信息,也包含顏色信息,且深度信息和顏色信息一一對(duì)應(yīng),如圖1所示。
圖1 采集得到的顏色圖像和深度圖像
由于環(huán)境、振動(dòng)、測(cè)量、設(shè)備本身的測(cè)量誤差,得到的點(diǎn)云存在噪聲和空洞,所以需要對(duì)點(diǎn)云進(jìn)行去噪。采用直通濾波,對(duì)點(diǎn)云設(shè)置深度閾值范圍d0 利用統(tǒng)計(jì)濾波,設(shè)置好統(tǒng)計(jì)時(shí)查詢(xún)鄰近點(diǎn)的點(diǎn)數(shù)和是否為離群點(diǎn)的閾值后,去除離群點(diǎn)。 利用下采樣對(duì)獲得的噪點(diǎn)進(jìn)行去除。體素網(wǎng)格濾波器可以達(dá)到向下采樣同時(shí)不破壞點(diǎn)云本身幾何結(jié)構(gòu)的功能,減少點(diǎn)云數(shù)量。 根據(jù)上述步驟完成對(duì)點(diǎn)云的預(yù)處理。效果如圖2所示。 圖2 數(shù)據(jù)預(yù)處理 Kinect相機(jī)一次只能獲取一個(gè)角度的點(diǎn)云信息,要得到完整的三維物體信息,需要拍攝得到不同角度的點(diǎn)云數(shù)據(jù)。點(diǎn)云配準(zhǔn)就是求兩個(gè)點(diǎn)云數(shù)據(jù)的旋轉(zhuǎn)平移矩陣,將源點(diǎn)云變換到目標(biāo)點(diǎn)云的坐標(biāo)系下??梢员硎緸橐韵路匠蹋簆t=R·ps+T,其中pt、ps是源點(diǎn)云與目標(biāo)點(diǎn)云的一組對(duì)應(yīng)點(diǎn)。配準(zhǔn)分為粗配準(zhǔn)與精配準(zhǔn)兩部分。 粗配準(zhǔn)的目的是找到近似的配準(zhǔn)變換,使得配準(zhǔn)后的點(diǎn)云盡可能接近,縮小兩個(gè)點(diǎn)云之間的差異,為點(diǎn)云的精確配準(zhǔn)提供更好的初始位置。 文中利用快速點(diǎn)特征直方圖(FPFH)[19]對(duì)點(diǎn)云進(jìn)行粗配,得到點(diǎn)云的粗配變換矩陣。在計(jì)算FPFH特征時(shí),首先對(duì)樣本點(diǎn)pq計(jì)算與它的k鄰域內(nèi)每個(gè)點(diǎn)之間的三個(gè)特征值,統(tǒng)計(jì)輸出成一個(gè)簡(jiǎn)化的點(diǎn)特征直方圖。然后分別對(duì)其k鄰域中的每個(gè)點(diǎn),計(jì)算得到自己的FPFH,通過(guò)式1計(jì)算得到最終的FPFH。 (1) 其中,權(quán)重ωi表示一個(gè)給定的度量空間中樣本點(diǎn)pq與鄰近點(diǎn)pk之間的距離。 精配準(zhǔn)是在已知一個(gè)旋轉(zhuǎn)平移矩陣的前提下,進(jìn)一步計(jì)算得到更加精確的旋轉(zhuǎn)平移矩陣,從而達(dá)到改善配準(zhǔn)的效果。ICP[20]及其各種改進(jìn)算法是比較經(jīng)典的點(diǎn)云配準(zhǔn)算法。它搜尋兩組點(diǎn)云數(shù)據(jù)尋找對(duì)應(yīng)的最近點(diǎn)對(duì),計(jì)算最優(yōu)剛體變換,不斷迭代直到滿(mǎn)足收斂條件,從而得到最佳旋轉(zhuǎn)平移矩陣。文中利用經(jīng)典ICP算法將各角度的點(diǎn)云數(shù)據(jù)配準(zhǔn)到背景點(diǎn)云幀A0(B0)得到完整的點(diǎn)云模型M,并保存各角度點(diǎn)云數(shù)據(jù)到背景幀的變換矩陣集合T。因?yàn)榫仃囎儞Q存在誤差,所以要盡可能少的迭代變換,提高配準(zhǔn)精度。 文中參考背景減法,利用背景點(diǎn)云幀對(duì)相同參考系下的配準(zhǔn)點(diǎn)云根據(jù)深度信息進(jìn)行背景分割得到前景。 遍歷配準(zhǔn)點(diǎn)云模型M和背景幀A0(B0),比較M中點(diǎn)pi(i=1,2,…,m)和A0(B0)中點(diǎn)qj(j=1,2,…,n)的XYZ值,其中m、n為點(diǎn)集M和點(diǎn)集A0(B0)中點(diǎn)的個(gè)數(shù)。將配準(zhǔn)模型M中與背景點(diǎn)集A0中的XY相近Z值大于背景點(diǎn)云的點(diǎn)集刪除,以達(dá)到分割背景和前景的目的。具體方程式如下: |p[i].x-q[j].x|<0.01 (2) |p[i].y-q[j].y|<0.01 (3) |p[i].z-q[j].z|<0.01 (4) 滿(mǎn)足上述三個(gè)方程的配準(zhǔn)點(diǎn)集M中的點(diǎn)pi(0 由于背景幀只是相機(jī)拍攝的一個(gè)角度,深度值大于背景的點(diǎn)集不能確定是前景還是背景。因而背景分割只能分割深度值小于背景的前景。需要注意的是背景幀和配準(zhǔn)點(diǎn)云必須在同一個(gè)參考系下。 圖3中,左為背景點(diǎn)云,即A0和B0,中間為對(duì)應(yīng)參考系下的配準(zhǔn)點(diǎn)云,右為背景分割后得到的前景部分。 圖3 背景分割實(shí)驗(yàn)效果 若場(chǎng)景中背景前只有一個(gè)物體,通過(guò)背景分割即可直接完成點(diǎn)云的目標(biāo)分割。 文中結(jié)合點(diǎn)云分割和圖像分割,利用Grab Cut得到圖像文件中目標(biāo)的顏色信息,采用比較RGB值和法向量的方法,得到目標(biāo)點(diǎn)云數(shù)據(jù)。 Crab Cut算法[21-23]是Graph Cut的改進(jìn)版,對(duì)Graph Cut不斷進(jìn)行迭代。該算法利用圖像中的紋理(顏色)信息和邊界(反差)信息,只要少量的用戶(hù)交互操作即可得到良好的分割效果。采用RGB三通道混合高斯模型來(lái)對(duì)目標(biāo)和背景進(jìn)行建模,不斷交互迭代分割估計(jì)和模型參數(shù)學(xué)習(xí)。 Graph Cut將分割問(wèn)題描述為像素zi(1 α=argminE(α,θ) (5) 其中,α為像素的標(biāo)號(hào);E為能量函數(shù);θ為前景/背景GMM概率密度模型。 具體步驟如下: (1)利用Graph Cut對(duì)背景幀圖像進(jìn)行圖像分割,得到目標(biāo)物體result.jpg的RGB值,保存為txt文件,如圖4所示。保存矩形對(duì)角兩點(diǎn)p1(x1,y1)和p2(x2,y2)。 圖4 Grab Cut分割效果 (2)讀取配準(zhǔn)后的點(diǎn)云文件,在x1 R=|p.r-q.r|/256 (6) G=|p.g-q.g|/256 (7) B=|p.b-q.b|/256 (8) diff=sqrt(R*R+G*G+B*B) (9) 其中,p為圖像分割得到的RGB的一點(diǎn);q為點(diǎn)云數(shù)據(jù)中的一點(diǎn);sqrt表示開(kāi)平方;diff表示兩點(diǎn)的相似度。 (3)以步驟2得到的點(diǎn)集中任一點(diǎn)p開(kāi)始,在x1 (10) (11) 其中,k為三角面的個(gè)數(shù);ni為第i個(gè)三角面的法向量。點(diǎn)p的法向量由鄰近點(diǎn)形成的三角面的法向量共同決定。 (12) 將法向量相同的點(diǎn)進(jìn)行標(biāo)記保存,最后得到的點(diǎn)集即為目標(biāo)物體的點(diǎn)云數(shù)據(jù)。 為了檢驗(yàn)文中算法的實(shí)驗(yàn)效果,使用Kinect 2.0深度相機(jī);使用的開(kāi)發(fā)工具有VS2013,PCL開(kāi)發(fā)庫(kù),OpenCV開(kāi)發(fā)庫(kù);使用的數(shù)據(jù)為自己拍攝的點(diǎn)云數(shù)據(jù)。利用文中算法、RANSAC算法和區(qū)域生長(zhǎng)算法對(duì)點(diǎn)云模型進(jìn)行了點(diǎn)云分割。 利用背景分割對(duì)配準(zhǔn)得到的點(diǎn)云模型進(jìn)行分割,可以有效分割出深度值小于背景的前景物體。對(duì)前景物體的目標(biāo)分割,在給定范圍內(nèi)按照點(diǎn)的鄰近信息和法向量、顏色屬性,也得到了單獨(dú)的目標(biāo)物體。效果如圖5所示。 對(duì)于RANSAC隨機(jī)采樣一致性方法[12-13],PCL幾乎支持所有的幾何形狀,作為點(diǎn)云分割的基礎(chǔ)算法,RANSAC強(qiáng)大且必收斂,但是只可以分割較規(guī)則的平面、圓柱體或是球體。利用該方法可以簡(jiǎn)單地分割出規(guī)則問(wèn)題,卻不能分割出目標(biāo)物體杯子。 圖5 文中算法分割效果 區(qū)域生成算法[24],由于原始數(shù)據(jù)所有物體通過(guò)立方體承接,即所有物體相連,如圖6左所示,使得區(qū)域生成算法分割無(wú)效?;陬伾膮^(qū)域生成算法,由于光照、陰影等原因,不能精確分割出目標(biāo)物體,只能將顏色分割作為輔助方法,效果如圖6右所示。 圖6 區(qū)域生成算法分割效果 對(duì)于點(diǎn)云分割得到目標(biāo),有兩種思路,先配準(zhǔn)完成后對(duì)點(diǎn)云模型進(jìn)行分割得到目標(biāo),也可以對(duì)單幀點(diǎn)云先分割得到不同目標(biāo)的不同側(cè)面,然后進(jìn)行點(diǎn)云配準(zhǔn)。但是先分割后配準(zhǔn),由于點(diǎn)云數(shù)據(jù)量少,特征匹配少,會(huì)影響配準(zhǔn)精度,先分割后配準(zhǔn)適用于大規(guī)模的點(diǎn)云數(shù)據(jù)。文中對(duì)配準(zhǔn)完成后的點(diǎn)云數(shù)據(jù)進(jìn)行點(diǎn)云分割。 對(duì)三維場(chǎng)景進(jìn)行點(diǎn)云分割得到目標(biāo)點(diǎn)云。提出了背景減法和將圖像分割和點(diǎn)云分割相結(jié)合的方法,通過(guò)實(shí)驗(yàn)驗(yàn)證了算法的有效性。該算法結(jié)合圖像分割,有效避免了點(diǎn)云數(shù)據(jù)的過(guò)分割和欠分割現(xiàn)象。算法的不足在于點(diǎn)云配準(zhǔn)的精度會(huì)影響目標(biāo)點(diǎn)云精度,由于物體的相互遮擋,點(diǎn)云數(shù)據(jù)不完整,使得最后分割出來(lái)的目標(biāo)也不完整,后期可以根據(jù)目標(biāo)物體的屬性對(duì)目標(biāo)點(diǎn)云進(jìn)行修復(fù)。文中利用Grab Cut對(duì)圖像進(jìn)行分割,利用圖像RGB對(duì)點(diǎn)云進(jìn)行比較得到目標(biāo)點(diǎn)云,后期可以利用Grab Cut直接對(duì)點(diǎn)云數(shù)據(jù)進(jìn)行選擇分割,不需要借助圖像。2.2 點(diǎn)云配準(zhǔn)
3 點(diǎn)云分割
3.1 背景分割
3.2 目標(biāo)分割
4 實(shí)驗(yàn)與結(jié)果分析
5 結(jié)束語(yǔ)