馮 飛,丁 偉,吳維勇
FENG Fei, DING Wei, WU Wei-yong
(九江學(xué)院 信息科學(xué)與技術(shù)學(xué)院,九江 332005)
利用CASCADE的交互技術(shù)實(shí)現(xiàn)點(diǎn)云數(shù)據(jù)的配準(zhǔn)
Data registration of base on interavtive technology with CASCADE
馮 飛,丁 偉,吳維勇
FENG Fei, DING Wei, WU Wei-yong
(九江學(xué)院 信息科學(xué)與技術(shù)學(xué)院,九江 332005)
利用CASCADE幾何內(nèi)核的交互技術(shù),通過選擇散亂點(diǎn)云圖形中的特征點(diǎn),使用ANN算法查找特征點(diǎn)的鄰域點(diǎn)集,再利用二次曲面擬合的方法求得鄰域點(diǎn)集的兩個(gè)主方向和法方向,最后求得坐標(biāo)變換,把數(shù)據(jù)統(tǒng)一到一個(gè)坐標(biāo)系下。論文論述了該方法的基本原理以及CASCADE實(shí)現(xiàn)的相關(guān)技術(shù),并通過實(shí)例證明了該方法的有效性。
交互技術(shù);曲率;配準(zhǔn);CASCADE
光學(xué)掃描儀可以在數(shù)秒鐘內(nèi)直接獲得被測(cè)物體表面的點(diǎn)云數(shù)據(jù),但因光的線性傳播特性,在一個(gè)視角下掃描儀只能采集到物體某一部分表面的數(shù)據(jù),物體整個(gè)表面的數(shù)據(jù)需要從不同視角對(duì)物體進(jìn)行多次測(cè)量來完成。點(diǎn)云的數(shù)據(jù)配準(zhǔn)就是將兩個(gè)或者兩個(gè)以上坐標(biāo)系中測(cè)量得到的點(diǎn)云數(shù)據(jù)轉(zhuǎn)換到統(tǒng)一的坐標(biāo)系中的計(jì)算過程。
本文根據(jù)三維實(shí)體的特點(diǎn),首先利用Open CASCADE提供的交互技術(shù),通過交互的方式選擇三維實(shí)體兩個(gè)視角重疊分的特征點(diǎn)(例如:鼻子、眼睛、耳朵等特征部分)。再根據(jù)曲率能夠表示特征點(diǎn)的局部鄰域形狀變化,具有平移、旋轉(zhuǎn)和縮放不變性的特點(diǎn),利用ANN算法搜索以特征點(diǎn)為中心的鄰域點(diǎn)集,計(jì)算鄰域點(diǎn)集法矢和兩個(gè)主方向,計(jì)算出的法矢和主方向正好構(gòu)成一個(gè)三維坐標(biāo)系。從而通過兩個(gè)視角點(diǎn)集所構(gòu)成的坐標(biāo)系來完成數(shù)據(jù)的配準(zhǔn)。實(shí)驗(yàn)證明在三維實(shí)體特征比較明顯和特征點(diǎn)選取比較準(zhǔn)確的情況下,該方法能夠非常好的實(shí)現(xiàn)數(shù)據(jù)的配準(zhǔn)。
Open CASCADE是由法國(guó)MatraDatavision公司推出的,面向?qū)ο蟮膱D形開發(fā)平臺(tái)。它實(shí)質(zhì)上是一個(gè)開源碼的C++幾何類庫(kù),主要提供三維表面和實(shí)體建模,可視化,數(shù)據(jù)交換和快速應(yīng)用開發(fā)等方面的類庫(kù)模塊。使用Open CASCADE類庫(kù)可以幫助開發(fā)人員快速的進(jìn)行CAD/CAM/CAE,AEC和GIS以及 PDM等應(yīng)用程序的開發(fā)。
為了幫助開發(fā)人員快速的利用Open CASCADE進(jìn)行應(yīng)用程序的開發(fā),Open CASCADE提供了一個(gè)應(yīng)用程序開發(fā)的框架OCAF(Open CASCADE Application Frame)。OCAF提供了應(yīng)用程序結(jié)構(gòu),開發(fā)者的主要任務(wù)就是建立應(yīng)用程序所需要的數(shù)據(jù)和程序接口。OCAF的應(yīng)用程序數(shù)據(jù)組織方式和其他的CAD不同,在OCAF中,數(shù)據(jù)結(jié)構(gòu)不是由形體驅(qū)動(dòng)的,而是由參數(shù)驅(qū)動(dòng)。
Open CASCADE 提供了OCAF的生成向?qū)Э梢宰層脩糁苯釉赩C++中生成基于MFC的多文檔OCAF框架。生成向?qū)У氖褂梅椒ㄈ缦拢喊袿pen CASCADE根目錄下的Tools文件夾中的OcafAPPWizard.awx文件添加到VC++CommonMSDev98Template目錄里,然后就可以在VC++中利用OCAF應(yīng)用程序向?qū)ё詣?dòng)生成基于Open CASCADE的多文檔工程。
光學(xué)掃描儀從兩個(gè)視角掃描到實(shí)體的三維數(shù)據(jù),系統(tǒng)首先讀入兩個(gè)視角的點(diǎn)云數(shù)據(jù)S={Si,i=1,2,...,k}和T={Tii,i=1,2,...,m}進(jìn)行顯示,用戶可以利用系統(tǒng)提供的視角變換工具把圖形的顯示視角變化到最佳位置,選擇圖形中的特征點(diǎn)pnt1和pnt2(pnt1∈S,pnt2∈T)。然后,利用ANN算法搜索pnt1和pnt2兩個(gè)特征點(diǎn)的鄰域點(diǎn)集P={pi|pi∈S,|pi-pnt1|<δ,i<=m}和Q={qi|qi∈T,|qipnt2|<δ,i<=m},其中δ是m個(gè)點(diǎn)中距離特征點(diǎn)的最大距離。采用最小二乘法分別對(duì)點(diǎn)集P和Q進(jìn)行二次曲面擬合確定兩個(gè)曲面方程分別為:
點(diǎn)云數(shù)據(jù)的在圖形設(shè)備中顯示主要有兩種方式:一種是把每個(gè)點(diǎn)作為一個(gè)很小的球進(jìn)行顯示,在基于OpenGL的應(yīng)用程序中經(jīng)常采用這種方法;另一種方法是對(duì)于點(diǎn)云數(shù)據(jù)中的每一個(gè)點(diǎn)作為一種混合體的組成部分,最后對(duì)混合體進(jìn)行顯示。在計(jì)算機(jī)配置為“P4 2.0G RAM 2.0G”的設(shè)備上采用第一種方法顯示兩萬多個(gè)點(diǎn)云數(shù)據(jù)花費(fèi)時(shí)間約3分多鐘,而采用第二種方法僅僅花費(fèi)10秒鐘左右。
在CASCADE中提供了一個(gè)TopoDS_Compound類,它是TopoDS_Shape的一個(gè)派生類。TopoDS_Compound類可以是由頂點(diǎn)、面或者體的聯(lián)合而成的拓?fù)浣Y(jié)構(gòu)。在系統(tǒng)中采用BRep_Builder對(duì)象的Add方法把點(diǎn)云數(shù)據(jù)中的每個(gè)點(diǎn)添加到TopoDS_Compound對(duì)象中,最后對(duì)TopoDS_Compound對(duì)象進(jìn)行顯示。實(shí)驗(yàn)證明采用這個(gè)方法點(diǎn)云顯示速度快,在進(jìn)行視角平移旋轉(zhuǎn)時(shí)畫面比較流暢。
頂點(diǎn)在CASCADE中默認(rèn)顯示成一個(gè)十字。當(dāng)系統(tǒng)中顯示多個(gè)點(diǎn)的時(shí)候十字形的點(diǎn)顯得凌亂,不方便對(duì)點(diǎn)云圖形特征的識(shí)別。Prs3d_PointAspect類封裝了三維頂點(diǎn)顯示屬性,在Prs3d_PointAspect構(gòu)造函數(shù)中通過Aspect_TypeOfMarker枚舉了三維頂點(diǎn)的顯示形狀。本系統(tǒng)在這里設(shè)置點(diǎn)的形狀為Aspect_TOM_POINT,如圖1所示。
圖1 三維點(diǎn)云數(shù)據(jù)的顯示
在CASCADE中AIS_InteractiveObject(交互設(shè)備)類用來管理交互式圖形對(duì)象,它封裝了圖形對(duì)象的顯示模式和選擇方式。通過該類的成員函數(shù)SetSelectionMode()可用來設(shè)置圖形的選擇方式是體、頂點(diǎn)、邊或面等。當(dāng)設(shè)置選擇模式為0時(shí),圖形的選擇模式為默認(rèn)值,此時(shí)選擇的對(duì)象為形體本身;當(dāng)選擇模式為1時(shí),此時(shí)可以進(jìn)行圖形的頂點(diǎn)選擇。代碼如下:
myAISContext->InitSelected();//初始化選擇的對(duì)象
TopoDS_Vertex aVertex; //定義一個(gè)頂點(diǎn)的拓?fù)鋽?shù)據(jù)結(jié)構(gòu)
aVertex=TopoDS::Vertex(myAISContext->SelectedShape()); //返回選擇的頂點(diǎn)
代碼中的myAISContext是AIS_InteractiveObject類的一個(gè)對(duì)象。最后通過TopoDS_Vertex類的成員函數(shù)X(),Y(),Z()得到選擇點(diǎn)的三維坐標(biāo)。
在系統(tǒng)實(shí)現(xiàn)中,首先設(shè)置點(diǎn)云圖形為形體選擇模式,進(jìn)行圖形的平移變換以及視角變換,當(dāng)變換到最佳位置,設(shè)置圖形的選擇模式為頂點(diǎn)選擇模式,進(jìn)行圖形中特征點(diǎn)的選取,系統(tǒng)中通過紅色的圈點(diǎn)進(jìn)行顯示。最后通過ANN算法計(jì)算特征點(diǎn)鄰域點(diǎn)集,在系統(tǒng)中鄰域點(diǎn)集采用錨點(diǎn)的方式進(jìn)行顯示,如圖2所示。
ANN是采用C++語(yǔ)言編寫的用于空間鄰域點(diǎn)數(shù)據(jù)近似或者精確搜索的面向?qū)ο蟮腃++類庫(kù)程序,它是由美國(guó)Maryland大學(xué)的David等人開發(fā)的。采用ANN算法進(jìn)行特征點(diǎn)鄰域點(diǎn)集數(shù)據(jù)計(jì)算的程序如下:
圖2 選擇的特征點(diǎn)及其領(lǐng)域點(diǎn)集
本段程序首先構(gòu)造ANN算法中的原始點(diǎn)云數(shù)組dataPts。程序中的TopExp_Explorer類封裝了訪問拓?fù)浣Y(jié)構(gòu)數(shù)據(jù)的工具。在系統(tǒng)中通過選擇由點(diǎn)云數(shù)據(jù)構(gòu)成的形體,采用TopExp_Explorer類的Init()方法可以遍歷形體中的頂點(diǎn)、面、棱等拓?fù)浣Y(jié)構(gòu)。這樣就避免了對(duì)讀入的點(diǎn)云數(shù)據(jù)自己定義數(shù)據(jù)結(jié)構(gòu)進(jìn)行保存。
然后通過kdTree = new ANNkd_tree(ataPts,nPts,dim);構(gòu)造一個(gè)搜索數(shù)據(jù)結(jié)構(gòu)kdTree,通過kdTree的annkSearch()成員函數(shù)完成鄰域點(diǎn)集的搜索,根據(jù)搜索獲得的特征點(diǎn)集計(jì)算出特征點(diǎn)集的主方向和法方向,具體算法見參考文獻(xiàn)。采用同樣的方法搜索另外一個(gè)視角測(cè)量的點(diǎn)云數(shù)據(jù)的特征點(diǎn)集,最后計(jì)算出旋轉(zhuǎn)矩陣和平移矩陣完成數(shù)據(jù)配準(zhǔn),效果圖如圖3所示。
圖3 配準(zhǔn)后圖形效果
本文論述了利用Open CASCADE的交互技術(shù),通過選擇不同視角下點(diǎn)云數(shù)據(jù)的特征點(diǎn),由特征點(diǎn)確定鄰域點(diǎn)集,進(jìn)行二次曲面擬合,根據(jù)二次曲面曲率具有平移、旋轉(zhuǎn)和縮放不變性的特征最終實(shí)現(xiàn)數(shù)據(jù)配準(zhǔn)的方法。論文重點(diǎn)介紹了Open CASCADE的特點(diǎn);三維造型的基本方法;在數(shù)據(jù)配準(zhǔn)中點(diǎn)云數(shù)據(jù)顯示的技巧以及點(diǎn)云圖形中特征點(diǎn)拾取的實(shí)現(xiàn)技術(shù)。改進(jìn)了基于特征的多視角點(diǎn)云數(shù)據(jù)配準(zhǔn)的方法,應(yīng)用算法對(duì)斯坦福大學(xué)數(shù)據(jù)bunny完成配準(zhǔn),在選擇特征點(diǎn)比較精確的情況下,能夠較好的完成數(shù)據(jù)的配準(zhǔn)。但是算法對(duì)掃描數(shù)據(jù)的類型有一定的要求,當(dāng)三維形體特征不太明顯的情況下,很難完成數(shù)據(jù)特征點(diǎn)的精確選取,造成數(shù)據(jù)配置的誤差較大。
[1] Besl P J,McKay N D·A method for registration of 3-D shapes[J]·IEEE Transactions on Pattern Analysis and Machine Intel-ligence,1992,14(2):239-256.
[2] 羅先波,鐘約先,李仁舉.三維掃描系統(tǒng)中的數(shù)據(jù)配準(zhǔn)技術(shù)[J].清華大學(xué)學(xué)報(bào),2004,8.
[3] Object libraries application framework uses guide[EB/OL].www.OpenCASCADE.org.2006.
TP391
A
1009-0134(2010)12(上)-0186-03
10.3969/j.issn.1009-0134.2010.12(上).60
2010-07-20
國(guó)家自然基金資助項(xiàng)目(60863012);江西省自然科學(xué)基金資助項(xiàng)目(0611063);江西省教育廳科技項(xiàng)目(GJJ08435,GJJ09346)
馮飛(1981 -),男,講師,碩士,研究方向?yàn)閳D形圖像處理。