張潤宇,李月強,張滋黎,袁江,周維虎
(1.北京信息科技大學(xué)儀器科學(xué)與光電工程學(xué)院,北京100192;2.中國科學(xué)院光電研究院,北京100094)
基于VTK的激光跟蹤測量可視化軟件設(shè)計
張潤宇1,2,李月強1,張滋黎2,袁江2,周維虎2
(1.北京信息科技大學(xué)儀器科學(xué)與光電工程學(xué)院,北京100192;2.中國科學(xué)院光電研究院,北京100094)
測量數(shù)據(jù)的三維可視化是激光跟蹤測量數(shù)據(jù)處理的關(guān)鍵步驟之一。結(jié)合大型激光跟蹤測量軟件系統(tǒng)的開發(fā)實踐,對VTK技術(shù)特點和體系結(jié)構(gòu)進行深入研究,設(shè)計實現(xiàn)了對測量數(shù)據(jù)進行處理和顯示的類和接口。在此基礎(chǔ)上,基于Microsoft Visual Studio 2010平臺,利用C++和VTK技術(shù)開發(fā)了一款三維測量數(shù)據(jù)處理及可視化軟件,實現(xiàn)了測量點云擬合、三維圖形顯示以及交互功能,并通過實例驗證了軟件的有效性和可用性,證明了VTK在工業(yè)測量可視化領(lǐng)域具有很大的應(yīng)用價值。
VTK;三維可視化;測量軟件;點云;交互
對大尺寸部件的幾何特征點、空間尺寸和表面形貌的精密測量在航空航天、汽車、造船等工業(yè)領(lǐng)域具有廣泛應(yīng)用。在常見的大尺寸部件的工業(yè)測量系統(tǒng)中,激光跟蹤測量系統(tǒng)以其便攜性、高精度、測量范圍大、實時跟蹤測量等優(yōu)點[1],逐漸成為工業(yè)測量領(lǐng)域研究的焦點。同時,隨著可視化和三維顯示技術(shù)的快速發(fā)展,工業(yè)測量三維可視化軟件也成為激光跟蹤測量系統(tǒng)中不可或缺的得力工具。截至目前,國外有諸多公司推出了工業(yè)測量三維可視化軟件,例如美國的NRK公司的SA(Spatial Analyzer)軟件[2]、美國的Geomagic公司的Geomagic Studio軟件[3]等。本文采用面向?qū)ο蠹夹g(shù)設(shè)計并實現(xiàn)了一套應(yīng)用于激光跟蹤測量的三維可視化測量軟件,該軟件基于VTK和MFC框架平臺開發(fā)而成,其設(shè)計良好,操作簡便,并最終用實例進行了有效性驗證。該軟件是為數(shù)不多的將VTK技術(shù)應(yīng)用在工業(yè)測量領(lǐng)域的國內(nèi)軟件,為其他可視化項目提供了很好的指引和借鑒。
1.1 VTK簡介
現(xiàn)有的三維可視化開發(fā)工具主要有OpenGL,DirectX,VTK等,其中VTK是由美國Kitware公司負責維護,在醫(yī)學(xué)、能源、地質(zhì)等領(lǐng)域頗受重用。VTK在OpenGL基礎(chǔ)上用C++語言開發(fā)而成,采用面向?qū)ο笤O(shè)計,并含有對Python,Java,Tcl等語言的接口[4],具有開源和跨平臺的特性,發(fā)展速度很快。
1.2 VTK特點
1)專注于功能:VTK封裝了復(fù)雜的底層環(huán)境代碼和算法處理,并提供了大量的編程接口,使開發(fā)人員更專注于高級功能的實現(xiàn)。
2)易于開發(fā):由于采用面向?qū)ο笤O(shè)計,VTK封裝性很好,可視化管道中各個階段的數(shù)據(jù)、處理器均以類和對象的形式使用,大大增強代碼的正確性、可讀性,便于開發(fā)和維護。
3)獨一無二的可視化管道設(shè)計:VTK與OpenGL,OSG等其他三維可視化開發(fā)工具的主要區(qū)別就在于VTK采用管道式設(shè)計(Pipeline)實現(xiàn)三維顯示[5]。原始數(shù)據(jù)在管道中通過各種過濾器和映射器得到對應(yīng)的圖形結(jié)構(gòu),再通過相應(yīng)的圖形繪制器繪制成三維圖形顯示出來,節(jié)約大量設(shè)計和開發(fā)時間,效率高。
可以看出,VTK能應(yīng)用于如今大多數(shù)三維可視化項目中,逐漸成為三維可視化領(lǐng)域中的流行技術(shù)。
2.1 VTK和M FC框架的建立
微軟基礎(chǔ)類庫MFC為編寫在Windows系統(tǒng)下的VTK程序提供了良好的平臺基礎(chǔ)。在MFC的視圖類窗口上關(guān)聯(lián)VTK窗口,即在VTK繪制窗口函數(shù)接口與MFC視圖類窗口函數(shù)接口之間建立調(diào)用關(guān)系,以實現(xiàn)初始化MFC和VTK、設(shè)置環(huán)境變量、復(fù)雜交互等功能,具體步驟如圖1所示。
圖1 建立VTK和MFC程序框架流程
2.2 軟件的設(shè)計要求
激光跟蹤測量可視化軟件主要用于實現(xiàn)用戶對激光跟蹤儀測量的點云數(shù)據(jù)的操作,包括數(shù)據(jù)傳輸、誤差處理、點云擬合、數(shù)據(jù)庫管理,以及三維顯示和交互。其中,三維顯示包括對點云、直線、平面、圓、球、圓柱、圓錐、曲面等圖元的顯示,以及誤差分析的可視化;交互操作包括平移、旋轉(zhuǎn)、縮放、定位、懸浮信息、生成報表等;數(shù)據(jù)庫管理包括點云數(shù)據(jù)和各個擬合圖形數(shù)據(jù)的新建、插入、編輯、刪除,以及數(shù)據(jù)庫的新建、連接、更新等。
2.3 三維顯示和交互模塊設(shè)計
在三維顯示和交互模塊中主要設(shè)計了兩個類,分別是類CVtkSetup和類CVtkEntity。類CVtkSetup負責完成VTK窗口初始化、環(huán)境設(shè)置和交互操作,而類CVtkEntity負責完成三維顯示的實現(xiàn)以及三維顯示相關(guān)的數(shù)值計算、數(shù)據(jù)構(gòu)建和條件檢查等功能。
作為初始化和交互類,類CVtkSetup定義了VTK窗口及其初始化函數(shù),還包括坐標軸、懸浮信息、誤差可視化等交互工具,以及鼠標拖拽查看、選取元素等交互方式。三維顯示模塊與軟件主體的接口也在類CVtkSetup中定義,通過窗口句柄和指針的方式,軟件主體可以訪問三維顯示和交互模塊的操作,這樣用戶在數(shù)據(jù)處理和三維交互操作之間頻繁切換時就做到直接、無縫。
作為三維顯示實現(xiàn)類,類CVtkEntity描述了點、直線、平面、球、圓柱、圓錐等圖元的屬性,包括位置坐標、尺寸、ID號、顏色、誤差信息等;此外,針對不同的圖元,設(shè)計實現(xiàn)了不同的圖元數(shù)據(jù)構(gòu)建方式,通過與數(shù)據(jù)庫建立連接,導(dǎo)入數(shù)據(jù)到標準庫數(shù)據(jù)結(jié)構(gòu)中進行顯示。具體的類和接口設(shè)計如圖2所示。
圖2 三維顯示和交互模塊中主要的類和接口示意圖
在完成軟件框架和模塊設(shè)計之后,要實現(xiàn)從數(shù)據(jù)到三維圖形的構(gòu)建和顯示流程。之前提到,VTK主要的特色就是采用可視化管道流程進行三維圖形顯示。在三維可視化軟件里具體分為三個部分,分別是VTK繪制環(huán)境構(gòu)建、圖形數(shù)據(jù)構(gòu)建、VTK三維可視化,其中圖形數(shù)據(jù)的構(gòu)建是關(guān)鍵步驟,以下是各部分詳細設(shè)計流程。
3.1 VTK繪制環(huán)境構(gòu)建流程
構(gòu)建VTK繪制環(huán)境的主要工作在圖2中的VtkInitialize函數(shù)里實現(xiàn)。繪制器對象Renderer、繪制窗口RenderWindow、交互器對象Interactor、交互方式InteractorStyle以及相機對象Camera、光照對象Light共同構(gòu)成了繪制環(huán)境,其中繪制器對象設(shè)置Camera、Light和背景,RenderWindow指定關(guān)聯(lián)的父窗口,并在繪制環(huán)境創(chuàng)建完成后開始VTK消息循環(huán)。
3.2 圖形數(shù)據(jù)構(gòu)建流程
圖形的顯示是三維可視化軟件的關(guān)鍵部分,不同類型的圖形有不同的數(shù)據(jù)構(gòu)建方法。VTK使用數(shù)據(jù)流方法將原始數(shù)據(jù)變換成圖形數(shù)據(jù),構(gòu)建好的具有正式結(jié)構(gòu)的數(shù)據(jù)叫做數(shù)據(jù)集(DataSet),數(shù)據(jù)集對象由幾何和拓撲結(jié)構(gòu)以及屬性數(shù)據(jù)組成[6]。單元格(Cell)是拓撲結(jié)構(gòu)的組成原子,點(Point)是幾何結(jié)構(gòu)的組成原子,屬性(Property)是單元格與點的附加的屬性信息,如誤差、測量值等。數(shù)據(jù)集按結(jié)構(gòu)可分為規(guī)則格網(wǎng)(StructuredGrid)、不規(guī)則格網(wǎng)(UnstructuredGrid)和多邊形數(shù)據(jù)集(PolygonalData)[7]。對于散亂不規(guī)則點云,可用不規(guī)則格網(wǎng)表示;而對于有結(jié)構(gòu)的規(guī)則的點云,可用多邊形數(shù)據(jù)集或規(guī)則格網(wǎng)表示,從而組成三維圖形。數(shù)據(jù)集的分類和結(jié)構(gòu)組成如圖3所示。
圖3 數(shù)據(jù)集的分類和結(jié)構(gòu)組成
數(shù)據(jù)集的構(gòu)建工作主要在圖2中的各個圖形顯示接口中實現(xiàn),不同的圖形數(shù)據(jù)需要不同的數(shù)據(jù)集來表示,一般來說,先用標準庫容器Vector讀入原始點云數(shù)據(jù),然后通過循環(huán)按照點的ID將點依次插入到單個圖元里,將各個圖元插入到單元格陣列(CellArray)中組成拓撲結(jié)構(gòu),最后創(chuàng)建數(shù)據(jù)集,并指定其幾何結(jié)構(gòu)和拓撲結(jié)構(gòu)[8]。
下面是創(chuàng)建圖形數(shù)據(jù)步驟的主要代碼的偽碼:
3.3 VTK可視化管道
數(shù)據(jù)集構(gòu)建好之后就可以建立可視化管道,數(shù)據(jù)集依次通過過濾器(Filter)和映射器(Mapper)對數(shù)據(jù)集進行濾波、映射處理[9],用圖形對象(Actor)接收映射后的數(shù)據(jù),從而完成了數(shù)據(jù)集到圖形對象的轉(zhuǎn)換,最后把圖形對象添加到繪制器中,再由繪制窗口繪制并刷新即可完成三維圖形顯示。全部的三維可視化管道構(gòu)建總流程如圖4所示。
圖4 三維可視化管道構(gòu)建總流程
4.1 軟件系統(tǒng)界面
本軟件在 Visual Studio 2010平臺上基于 C++、MFC和VTK共同開發(fā)而成,數(shù)據(jù)庫操作通過ADO方式訪問Access數(shù)據(jù)庫實現(xiàn),目前已完成數(shù)據(jù)讀取和編輯、測量點云擬合計算、基本圖形的三維顯示及人機交互操作等功能。軟件界面上方為系統(tǒng)菜單欄和工具欄,下方主視圖的左側(cè)是資源瀏覽視圖,右側(cè)是三維顯示視圖。加載數(shù)據(jù)庫后的軟件界面如圖5所示。
圖5 軟件總體界面
4.2 測量數(shù)據(jù)的處理與顯示
4.2.1 數(shù)據(jù)讀取和編輯
本軟件可以實現(xiàn)對多種格式點云數(shù)據(jù)的讀取,包括excel格式和txt格式等。同時對系統(tǒng)數(shù)據(jù)庫中的數(shù)據(jù)可以在菜單項中進行參數(shù)編輯、增加、刪除等操作。4.2.2 點云擬合算法的選擇
本軟件當前采用的擬合算法是最小二乘擬合法,當測量的數(shù)據(jù)點具有代表性,尤其是在已知形狀求取參數(shù)的情況下使用非常有效[10]。由于激光跟蹤測量的點中有許多是特征點,且大多數(shù)被測物形狀已知,測量點并不太多,因此采用最小二乘擬合算法擬合基礎(chǔ)圖形是較為合適的。其思想是測量數(shù)據(jù)和真實數(shù)據(jù)之間存在一個誤差v,也叫殘差。使所有測量點的誤差的平方和最小,此時求得的參數(shù)為無偏估計值,滿足條件的方程成為正規(guī)方程。
以球面擬合為例,擬合步驟如下:
1)給出球的一般方程:
式中:(X0,Y0,Z0)為球心坐標;R為球半徑。
2)按半徑R進行最小二乘計算,以(X0,Y0,Z0,R)為待估計參數(shù),線性化得到第i個測量點的誤差方程:
式中:vi為第i次觀測的殘差;,,為解算出的球心坐標作為真實值;Xi,Yi,Zi為球面坐標的觀測值;為解算出的球半徑的觀測值。
3)建立正規(guī)方程ATAX=ATV,其中A為向量X的參數(shù)矩陣,X=(X0,Y0,Z0,R)T,V=(V1,V2,…,Vn)T。由此解算出待估計參數(shù)(X0,Y0,Z0,R),具體計算過程不再贅述。
4.2.3 實驗測量數(shù)據(jù)與三維顯示
本軟件通過實驗用激光跟蹤儀測試觀測直線、圓、球等得到測量所得點云數(shù)據(jù),共203個點,導(dǎo)入數(shù)據(jù)庫后顯示所用時間為0.01284 s,點云及其所擬合圖形的顯示效果如圖6所示。
軟件根據(jù)三維圖形整體計算一個包圍盒,進行全局顯示和縮放,當坐標系或計算單位發(fā)生變化時,軟件會調(diào)用繪制函數(shù)應(yīng)對視圖的變化。當鼠標懸停在圖形上方時,會顯示半透明的懸浮窗描述當前圖形的位置、誤差信息,用戶也可以自定義要顯示的信息。當數(shù)據(jù)庫發(fā)生變化時,如插入、刪除、新建等,軟件會進行相應(yīng)的函數(shù)調(diào)用,如繪制圖形、釋放圖形資源、清理可視化窗口等。
圖6 點云擬合直線及空間中的圓
4.3 交互操作
本軟件采用鼠標和快捷鍵結(jié)合的操作方式實現(xiàn)人機交互。用戶可通過鼠標完成三維圖形的旋轉(zhuǎn)、縮放、平移、拾取、懸停查看等操作;通過工具欄的圖標,用戶可以打開圖形編輯、坐標數(shù)據(jù)等窗口,操作簡潔、流暢。以平移和旋轉(zhuǎn)為例,系統(tǒng)的人機交互操作效果如圖7所示,顯示坐標系、坐標數(shù)據(jù)窗口及鼠標懸浮窗口如圖8所示。
圖7 平移+旋轉(zhuǎn)前后效果
圖8 坐標系、坐標數(shù)據(jù)窗口及懸浮窗口的顯示
本文設(shè)計開發(fā)的三維測量數(shù)據(jù)可視化軟件實現(xiàn)了測量數(shù)據(jù)的讀取和編輯、數(shù)據(jù)擬合及圖形的三維顯示、人機交互等基本功能。軟件運行流暢、有效,操作簡潔,易于使用。相對于其他可視化工具,VTK能在較短的時間內(nèi)開發(fā)出更復(fù)雜的顯示和交互功能,顯示效果更好,運行流暢度更高。應(yīng)該注意到軟件目前還達不到SpatialAnalyzer軟件的高度,在通用性、集成度、功能性上仍存在差距,但其作為自帶軟件已有不錯的應(yīng)用,且會持續(xù)開發(fā)。本軟件目前已成功應(yīng)用于激光跟蹤測量系統(tǒng)中,其研發(fā)也可為其他工業(yè)測量可視化項目提供借鑒,同時也助于發(fā)掘VTK在工程測量數(shù)據(jù)可視化領(lǐng)域的價值。
[1]張博,彭軍.激光跟蹤測量系統(tǒng)[J].計測技術(shù),2006,26 (4):5-6,41.
[2]New River Kinematics(NRK).Overview of Spatial Analyzer[EB/OL].[2014-10-20].http://www.kinematics.com/ spatialanalyzer/index.php.
[3]Geomagic.Overview of Geomagic Studio[EB/OL].[2014-10-28].http://www.geomagic.com/en/products/studio/overview.
[4]Kitware Inc.Visualizing with VTK a Tutorial[J].IEEE CG&A,2000,9:20-27.
[5]Frédéric Magoulès,Roman Putanowicz.Visualization of large data sets bymixing Tcl and C++interfaces to the VTK library[J].Computers and Structures,2007,85:536-552.
[6]畢林,王李管,陳建宏,等.基于VTK的礦體三維可視化研究與實現(xiàn)[J].計算機工程與應(yīng)用,2008,44(10): 78-81.
[7]Kitware Inc.The VTK User’s Guide[M].New York:Published by Kitware Inc.,2010.
[8]余翔宇,徐義賢,王彬彬.基于VTK的地質(zhì)體三維建模實現(xiàn)[J].工程勘察,2014(2):64-72.
[9]羅火靈,許永忠,陳世仲.基于VTK和MFC的醫(yī)學(xué)圖像三維重建研究與實現(xiàn)[J].生物醫(yī)學(xué)工程學(xué)進展,2010,31 (1):23-28.
[10]賀磊,黃桂平,李廣云,等.工業(yè)測量數(shù)據(jù)的可視化方法研究[J].信息工程大學(xué)測繪學(xué)院學(xué)報,2004,12(4): 305-308.
Design of Laser Tracking M easurement Visualization Software Based on VTK
ZHANG Runyu1,2,LIYueqiang1,ZHANG Zili2,YUAN Jiang2,ZHOU Weihu2
(1.School of Instrumentation Science and Opto-electronics Engineering,Beijing Information Science&Technology University,Beijing 100192,China;2.Academy of Opto-electronics,Chinese Academy of Sciences,Beijing 100094,China)
3D visualization ofmeasurement data is one of the key approaches in laser trackingmeasurement data processing.Combiningwith the development of laser trackingmeasurement software system,technical characteristics and architecture of VTK are studied in this paper.The classes and interfaces formeasurement data processing and displaying are also designed and implemented.Furthermore,based on the platform of Microsoft Visual Studio 2010,ameasurement data processing and 3D visualization software is developed using C++and VTK,achieving functions of point cloud fitting,3D graphics display and user interaction.The effectiveness and usability of the software are testified by experiments which show that VTK has great application value and potential in the field of industrymeasurement visualization.
VTK;3D visualization;measuring software;point cloud;interaction
TB92;TP311.52;TN247
A
1674-5795(2015)01-0021-05
10.11823/j.issn.1674-5795.2015.01.05
2014-11-18;
2014-11-26
國家重大科學(xué)儀器設(shè)備開發(fā)專項(2011YQ120022)
張潤宇(1989-),男,山東青島人,碩士研究生,主要研究方向為光電測量軟件;李月強(1968-),男,副教授,碩士生導(dǎo)師,主要研究方向為光電測量技術(shù)及儀器。