馮 飛,丁 偉,吳維勇
FENG Fei, DING Wei, WU Wei-yong
(九江學院 信息科學與技術學院,九江 332005)
利用CASCADE的交互技術實現點云數據的配準
Data registration of base on interavtive technology with CASCADE
馮 飛,丁 偉,吳維勇
FENG Fei, DING Wei, WU Wei-yong
(九江學院 信息科學與技術學院,九江 332005)
利用CASCADE幾何內核的交互技術,通過選擇散亂點云圖形中的特征點,使用ANN算法查找特征點的鄰域點集,再利用二次曲面擬合的方法求得鄰域點集的兩個主方向和法方向,最后求得坐標變換,把數據統一到一個坐標系下。論文論述了該方法的基本原理以及CASCADE實現的相關技術,并通過實例證明了該方法的有效性。
交互技術;曲率;配準;CASCADE
光學掃描儀可以在數秒鐘內直接獲得被測物體表面的點云數據,但因光的線性傳播特性,在一個視角下掃描儀只能采集到物體某一部分表面的數據,物體整個表面的數據需要從不同視角對物體進行多次測量來完成。點云的數據配準就是將兩個或者兩個以上坐標系中測量得到的點云數據轉換到統一的坐標系中的計算過程。
本文根據三維實體的特點,首先利用Open CASCADE提供的交互技術,通過交互的方式選擇三維實體兩個視角重疊分的特征點(例如:鼻子、眼睛、耳朵等特征部分)。再根據曲率能夠表示特征點的局部鄰域形狀變化,具有平移、旋轉和縮放不變性的特點,利用ANN算法搜索以特征點為中心的鄰域點集,計算鄰域點集法矢和兩個主方向,計算出的法矢和主方向正好構成一個三維坐標系。從而通過兩個視角點集所構成的坐標系來完成數據的配準。實驗證明在三維實體特征比較明顯和特征點選取比較準確的情況下,該方法能夠非常好的實現數據的配準。
Open CASCADE是由法國MatraDatavision公司推出的,面向對象的圖形開發平臺。它實質上是一個開源碼的C++幾何類庫,主要提供三維表面和實體建模,可視化,數據交換和快速應用開發等方面的類庫模塊。使用Open CASCADE類庫可以幫助開發人員快速的進行CAD/CAM/CAE,AEC和GIS以及 PDM等應用程序的開發。
為了幫助開發人員快速的利用Open CASCADE進行應用程序的開發,Open CASCADE提供了一個應用程序開發的框架OCAF(Open CASCADE Application Frame)。OCAF提供了應用程序結構,開發者的主要任務就是建立應用程序所需要的數據和程序接口。OCAF的應用程序數據組織方式和其他的CAD不同,在OCAF中,數據結構不是由形體驅動的,而是由參數驅動。
Open CASCADE 提供了OCAF的生成向導可以讓用戶直接在VC++中生成基于MFC的多文檔OCAF框架。生成向導的使用方法如下:把Open CASCADE根目錄下的Tools文件夾中的OcafAPPWizard.awx文件添加到VC++CommonMSDev98Template目錄里,然后就可以在VC++中利用OCAF應用程序向導自動生成基于Open CASCADE的多文檔工程。
光學掃描儀從兩個視角掃描到實體的三維數據,系統首先讀入兩個視角的點云數據S={Si,i=1,2,...,k}和T={Tii,i=1,2,...,m}進行顯示,用戶可以利用系統提供的視角變換工具把圖形的顯示視角變化到最佳位置,選擇圖形中的特征點pnt1和pnt2(pnt1∈S,pnt2∈T)。然后,利用ANN算法搜索pnt1和pnt2兩個特征點的鄰域點集P={pi|pi∈S,|pi-pnt1|<δ,i<=m}和Q={qi|qi∈T,|qipnt2|<δ,i<=m},其中δ是m個點中距離特征點的最大距離。采用最小二乘法分別對點集P和Q進行二次曲面擬合確定兩個曲面方程分別為:

點云數據的在圖形設備中顯示主要有兩種方式:一種是把每個點作為一個很小的球進行顯示,在基于OpenGL的應用程序中經常采用這種方法;另一種方法是對于點云數據中的每一個點作為一種混合體的組成部分,最后對混合體進行顯示。在計算機配置為“P4 2.0G RAM 2.0G”的設備上采用第一種方法顯示兩萬多個點云數據花費時間約3分多鐘,而采用第二種方法僅僅花費10秒鐘左右。
在CASCADE中提供了一個TopoDS_Compound類,它是TopoDS_Shape的一個派生類。TopoDS_Compound類可以是由頂點、面或者體的聯合而成的拓撲結構。在系統中采用BRep_Builder對象的Add方法把點云數據中的每個點添加到TopoDS_Compound對象中,最后對TopoDS_Compound對象進行顯示。實驗證明采用這個方法點云顯示速度快,在進行視角平移旋轉時畫面比較流暢。
頂點在CASCADE中默認顯示成一個十字。當系統中顯示多個點的時候十字形的點顯得凌亂,不方便對點云圖形特征的識別。Prs3d_PointAspect類封裝了三維頂點顯示屬性,在Prs3d_PointAspect構造函數中通過Aspect_TypeOfMarker枚舉了三維頂點的顯示形狀。本系統在這里設置點的形狀為Aspect_TOM_POINT,如圖1所示。

圖1 三維點云數據的顯示
在CASCADE中AIS_InteractiveObject(交互設備)類用來管理交互式圖形對象,它封裝了圖形對象的顯示模式和選擇方式。通過該類的成員函數SetSelectionMode()可用來設置圖形的選擇方式是體、頂點、邊或面等。當設置選擇模式為0時,圖形的選擇模式為默認值,此時選擇的對象為形體本身;當選擇模式為1時,此時可以進行圖形的頂點選擇。代碼如下:
myAISContext->InitSelected();//初始化選擇的對象
TopoDS_Vertex aVertex; //定義一個頂點的拓撲數據結構
aVertex=TopoDS::Vertex(myAISContext->SelectedShape()); //返回選擇的頂點
代碼中的myAISContext是AIS_InteractiveObject類的一個對象。最后通過TopoDS_Vertex類的成員函數X(),Y(),Z()得到選擇點的三維坐標。
在系統實現中,首先設置點云圖形為形體選擇模式,進行圖形的平移變換以及視角變換,當變換到最佳位置,設置圖形的選擇模式為頂點選擇模式,進行圖形中特征點的選取,系統中通過紅色的圈點進行顯示。最后通過ANN算法計算特征點鄰域點集,在系統中鄰域點集采用錨點的方式進行顯示,如圖2所示。
ANN是采用C++語言編寫的用于空間鄰域點數據近似或者精確搜索的面向對象的C++類庫程序,它是由美國Maryland大學的David等人開發的。采用ANN算法進行特征點鄰域點集數據計算的程序如下:


圖2 選擇的特征點及其領域點集

本段程序首先構造ANN算法中的原始點云數組dataPts。程序中的TopExp_Explorer類封裝了訪問拓撲結構數據的工具。在系統中通過選擇由點云數據構成的形體,采用TopExp_Explorer類的Init()方法可以遍歷形體中的頂點、面、棱等拓撲結構。這樣就避免了對讀入的點云數據自己定義數據結構進行保存。
然后通過kdTree = new ANNkd_tree(ataPts,nPts,dim);構造一個搜索數據結構kdTree,通過kdTree的annkSearch()成員函數完成鄰域點集的搜索,根據搜索獲得的特征點集計算出特征點集的主方向和法方向,具體算法見參考文獻。采用同樣的方法搜索另外一個視角測量的點云數據的特征點集,最后計算出旋轉矩陣和平移矩陣完成數據配準,效果圖如圖3所示。

圖3 配準后圖形效果
本文論述了利用Open CASCADE的交互技術,通過選擇不同視角下點云數據的特征點,由特征點確定鄰域點集,進行二次曲面擬合,根據二次曲面曲率具有平移、旋轉和縮放不變性的特征最終實現數據配準的方法。論文重點介紹了Open CASCADE的特點;三維造型的基本方法;在數據配準中點云數據顯示的技巧以及點云圖形中特征點拾取的實現技術。改進了基于特征的多視角點云數據配準的方法,應用算法對斯坦福大學數據bunny完成配準,在選擇特征點比較精確的情況下,能夠較好的完成數據的配準。但是算法對掃描數據的類型有一定的要求,當三維形體特征不太明顯的情況下,很難完成數據特征點的精確選取,造成數據配置的誤差較大。
[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] 羅先波,鐘約先,李仁舉.三維掃描系統中的數據配準技術[J].清華大學學報,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
國家自然基金資助項目(60863012);江西省自然科學基金資助項目(0611063);江西省教育廳科技項目(GJJ08435,GJJ09346)
馮飛(1981 -),男,講師,碩士,研究方向為圖形圖像處理。