丁 偉,馮 飛,吳維勇
DING Wei, FENG Fei, WU Wei-yong
(九江學(xué)院 信息科學(xué)與技術(shù)學(xué)院,九江 332005)
基于Open CASCADE下的點云數(shù)據(jù)的研究與實現(xiàn)
The research and realization of cloud data based on Open CASCAD
丁 偉,馮 飛,吳維勇
DING Wei, FENG Fei, WU Wei-yong
(九江學(xué)院 信息科學(xué)與技術(shù)學(xué)院,九江 332005)
研究了基于幾何內(nèi)核Open CASCADE的三維建模平臺的研究,通過Open CASCADE類庫的建模、布爾操作、可視化系統(tǒng)的特性以及與Visual C++的有效結(jié)合,針對點云數(shù)據(jù)的加載進(jìn)行圖形的空間變換,從而實現(xiàn)圖形的平移、縮放、旋轉(zhuǎn)。
Open CASCADE;空間變換;點云數(shù)據(jù)
Open CASCADE是一套開放原始碼的CAD/CAM/CAE幾何模型核心,源自于法國的Matra Datavision公司,Open CASCADE是一個功能強(qiáng)大的三維建模工具,提供了點、線、面、體和復(fù)雜形體的顯示和交互操作,經(jīng)過深度開發(fā)后可實現(xiàn)紋理、光照、圖元填充、渲染等圖形操作和放大、縮小、旋轉(zhuǎn)、漫游、模擬飛行、模擬穿越等動態(tài)操作。
OpenCascade提供二維和三維幾何體的生成、顯示和分析。Open CASCADE的基礎(chǔ)類提供各種通用服務(wù),如自動動態(tài)內(nèi)存管理(操縱物體的處理)、收藏、例外處理、泛型的向下轉(zhuǎn)型和插件創(chuàng)造。Open CASCADE是面向?qū)ο蟮腃++類庫,這些類庫被分成了六個類庫模塊(最小類庫模塊是基礎(chǔ)類庫模塊,最大的類庫模塊是建模運(yùn)算類庫模塊),這些類庫模塊及其內(nèi)容如下:
1)基礎(chǔ)類庫模塊(Foundation Classes):內(nèi)核類(Kernel Classes),數(shù)學(xué)工具類(Math Utilities);
2)建模數(shù)據(jù)類模塊(Modeling Data):二維幾何體(2D Geometry),三維幾何體(3D Geometry),幾何體工具(Geometry Utilities),拓?fù)洌═opology);
3)建模運(yùn)算類模塊(Modeling Algorithms):基本體結(jié)構(gòu)(Construction of Primitives),布爾操作(Boolean Operations),倒角圓角(Fillets and Chamfers),(Offsets,Drafts Sewing and Sweeps),特征(Features),消除隱藏線(Hidden Line Removal),幾何工具(Geometric Tools),拓?fù)涔ぞ撸═opological Tools);
4)可視化類模塊(Visualization):二維三維通用服務(wù)(Services Common to 2D and 3D),二維可視化類(2D Visualization),三維可視化類(3D Visualization);
5)數(shù)據(jù)交換類模塊(Data Exchange):基本圖形轉(zhuǎn)換規(guī)范(IGES),產(chǎn)品型號數(shù)據(jù)交換標(biāo)準(zhǔn)(STEP),AP203,AP214,數(shù)據(jù)擴(kuò)展(Extended data),exchange (XDE);
6)應(yīng)用程序框架(Application Framework):數(shù)據(jù)框架(Data Framework),數(shù)據(jù)存儲(Data Storage),應(yīng)用程序界面(Application Desktop)。
本文以點云數(shù)據(jù)的的加載為例,利用Open CASCADE強(qiáng)大的圖形處理功能以及Visual C++的良好數(shù)據(jù)處理能力,開發(fā)了實現(xiàn)行圖形的空間變換,從而實現(xiàn)圖形的平移、縮放、旋轉(zhuǎn)。
Open CASCADE提供了一個應(yīng)用程序開發(fā)的框架OCAF(Open CASCADE Application Frame),可幫助開發(fā)人員快速的利用Open CASCADE進(jìn)行應(yīng)用程序的開發(fā)。
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ū)動的,而是由參數(shù)驅(qū)動。
用戶通過Open CASCADE 提供的OCAF的生成向?qū)Э煽焖俚脑赩isual C++中生成基于MFC的多文檔OCAF框架。生成向?qū)У牟襟E如下:
1)Open CASCADE應(yīng)用程序框架在Visual C++中的目錄選項卡中添加Open CASCADE下的inc及l(fā)ib目錄;
2)將Open CASCADE下的acafappwizard.awx及usertype.dat復(fù)制到Visual C++下的Template及Bin文件夾下;
3)在Visual C++中的Option對話框format選項卡中進(jìn)行字體格式設(shè)置,在Color項目區(qū)選擇User Defined Keywords。
本文主要針對規(guī)則的兔子點云和牛點云數(shù)據(jù)進(jìn)行處理,其數(shù)據(jù)采樣方法為按行掃描。由于得到的物體的點云數(shù)據(jù)通常是海量的,而且有的物體表面曲率變化較大,形狀不規(guī)則,所以在做一片點云數(shù)據(jù)曲面顯示的時候,如果點取的太稀疏,不能反映局部曲面曲率變化的大小,如果點取的太密集,那么將給曲面擬合帶來很大的計算量。因此,將一片點云數(shù)據(jù)分割成若干小片,對每個小片分別進(jìn)行擬合顯示,最后把所有小片進(jìn)行光滑拼接,以達(dá)到良好的顯示效果。
當(dāng)節(jié)點向量區(qū)間分的很小的時候,簡捷顯示方法能夠達(dá)到較好的擬合效果。相關(guān)理論依據(jù)和證明如下:
由上可知,當(dāng)節(jié)點向量區(qū)間分的很小的時候,簡捷顯示方法能夠達(dá)到較好的擬合效果。處理后的數(shù)據(jù)通過導(dǎo)入系統(tǒng),可顯示效果。主要代碼如下:
Handle(Prs3d_Point Aspect) aPointAspect=new
Prs3d_PointAspect(Aspect_TOM_POINT,Quantity_Color(1,0,0,Quantity_TOC_RGB),2);
Handle(AIS_Drawer) anDrawer=new AIS_Drawer;
anDrawer->SetPointAspect(aPointAspect);
anAISCompound->SetAttributes(anDrawer);
通過數(shù)據(jù)處理后,其中牛點云數(shù)據(jù)中有2904個頂點及5848個面,兔子點云數(shù)據(jù)中有53921個頂點及104167個面。
空間變換,也稱幾何變換或幾何運(yùn)算, 包括圖形的平移、縮放、旋轉(zhuǎn)等.幾何運(yùn)算可改變圖形中各物體之間的空間關(guān)系,這種運(yùn)算可以被看成是將物體在圖形內(nèi)移動。
空間變換可如下表示.設(shè)(u,v)為源圖形上的點,(x, y)為目標(biāo)圖形上的點,則幾何變換將源圖形上(u,v)處的顏色值與目標(biāo)圖形上(x, y)處的顏色值對應(yīng)起來(u,v) <—> (x,y)并具有以下關(guān)系:
或
其中X(u,v)、 Y(u,v)或U(x,y)、 V(x,y)均為變換.由(1)對應(yīng)的變換稱作向前映射法,而由(2) 對應(yīng)的變換稱作向后映射法[3]。
一個空間變換需要兩個獨(dú)立的算法。首先,需要一個算法來定義幾何變換本身, 用來描述每個像素如何從其初始位置“移動”到終止位置,即每個像素的運(yùn)動。同時,還需要一個用于灰度插值的算法。
Open CASCADE在View類中(V3d_VIew)中有相應(yīng)的轉(zhuǎn)換函數(shù),可以把當(dāng)前點轉(zhuǎn)換到3D視圖中的對應(yīng)與重合與屏幕平面上。
在實現(xiàn)的系統(tǒng)中可通過Ctrl+鼠標(biāo)中間按鍵(或鼠標(biāo)中間的小圓球)可實現(xiàn)圖形的平移、Ctrl+鼠標(biāo)左按鍵可實現(xiàn)圖形的縮放、Ctrl+鼠標(biāo)右按鍵可實現(xiàn)圖形的旋轉(zhuǎn)。
點云數(shù)據(jù)的刪除與更新是前期數(shù)據(jù)處理的核心。因為無論哪種激光掃描系統(tǒng)得到的數(shù)據(jù)都含有大量的冗余信息,對所有點云數(shù)據(jù)進(jìn)行可視化,并選擇刪除那些明顯是多余信息的數(shù)據(jù),既直觀也給后續(xù)處理減少了工作量,最重要的是可以減小后續(xù)處理出錯的可能性。代碼如下:
程序主界面包括幾個區(qū)域:菜單欄,圖形工具欄,主顯示區(qū),三視圖顯示區(qū),建??刂茀^(qū)。數(shù)據(jù)加載后顯示效果圖如圖1、圖2所示。在圖中可執(zhí)行相關(guān)操作。
圖1 牛點云顯示效果
圖2 兔子點云顯示效果
在本文中,我們給出了一種簡單實用的點云數(shù)據(jù)的前期可視化操作與管理的方法。針對初始的僅具有的三維空間坐標(biāo)的點云數(shù)據(jù),實現(xiàn)了模型的空間變換操作,并支持點云的動態(tài)刪除與更新。采用了 Open CASCADE幾何內(nèi)核,由OpenCASCADE提供的數(shù)據(jù)管理模塊實現(xiàn)了復(fù)雜的數(shù)據(jù)管理功能。為圖形中的數(shù)據(jù)點云操作提供了廣闊的應(yīng)用前景。
[1] 0bject libraries application framework uses guide[EB/OL].WWW.0penCASCAD E-org.2006.
[2] 施法中.計算機(jī)輔助幾何設(shè)計與非均勻有理B樣條[M].北京:北京航空航天大學(xué)出版社,1994:17-25.
[3] 崔錦泰,程正興.小波分析導(dǎo)引[M].西安交通大學(xué)出版社,1995:102-105.
TP241
A
1009-0134(2010)11(下)-0216-03
10.3969/j.issn.1009-0134.2010.11(下).73
2010-09-13
國家自然基金資助項目(60863012);江西省自然科學(xué)基金資助項目(0611063);江西省教育廳科技項目(GJJ08435,GJJ09346)
丁偉(1978 -),講師,碩士,研究方向為圖形圖像處理及數(shù)據(jù)庫。