索春寶 孫秀寧
(山東科技大學測繪科學與工程學院,山東青島 266590)
基于VTK的點云可視化
索春寶 孫秀寧
(山東科技大學測繪科學與工程學院,山東青島 266590)
針對.las格式的數據文件,給出了以QT為平臺,基于VTK、libLAS的點云可視化方法,并利用該方法進行實驗。經實驗驗證該方法靈活、方便,更便于對多功能交互的發掘和實現。
VTK 點云可視化 LAS數據讀取
激光掃描技術是近年來出現的新技術,它突破了單點測量方法,具有高效率、高精度的獨特優勢。激光掃描技術可以快速獲取物體表面的空間點云數據,通過對點云數據的結構創建實現場景的渲染。隨著激光掃描技術的不斷發展和應用范圍的不斷擴大,激光掃描相關理論和技術的研究已經成為熱點問題。散亂點云數據的可視化是激光掃描技術應用的一個重要環節。本文針對.las格式散亂點云數據文件,結合庫的使用,實現點云的顯示和基本的交互操作。
本文以QT為開發工具,但QT并不能直接繪制、顯示三維坐標點,故借助VTK來實現三維點坐標的繪制和顯示。
VTK(visualization toolkit)是由kitware團隊創建和擴展的,開源的、可跨平臺的可視化工具包,主要用于三維計算機圖形、圖像處理和可視化。VTK是在面向對象的基礎上設計和實現的,采用c++構建核心內容。另外VTK能夠進行自動語言轉換,故可同時支持Tcl/Tk,Java和Python等多種語言。VTK作為可視化工具包使可視化應用更加普及,為人們提供了一種較簡便、通用的可視化方式。它擁有豐富、多樣的可視化算法:標量、矢量、張量、紋理和體積的可視化方法,和先進的建模技術:隱式建模,減少多邊形,網格平滑,切割,描繪輪廓和Delaunay三角網等。除了可視化功能以外,VTK還擁有一套三維交互控件,涵蓋了基本的點云顯示時所需的人機交互操作,且可以進行交互操作的自定義。
VTK官方網站http://www.vtk.org/為我們提供了source文件,首先利用Cmake對source文件進行編譯,然后在平臺下進行創建。

完成VTK的安裝后,還需要在QT中進行配置:主要是路徑的包含和庫文件的添加:


圖1 VTK Pipeline的可視化流程

圖2.LAS數據文件數據提取流程
VTK的可視化管線設計是基于管線流的設計模式,將要處理的數據作為流動介質在管線中流動,不同的階段對數據進行不同的處理,最終完成處理數據的顯示。VTK的可視化管線設計如圖1所示[1]。
在可視化過程中,首先確定數據源(DataSource),可以是利用vtk功能創建的數據源,更多的是數據文件,通過對數據文件的讀取使數據以數據流的形式在管線中流動[2];選擇適當的數據處理方法,使數據流到達過濾(Filter)階段對數據進行處理,形成新的數據集;這時的數據已經不再是離散的點,而是具有一定的幾何結構,接下來是幾何數據到圖形數據的轉換階段:映射(Mapper)階段??梢暬P蛣摻ㄍ戤叄酉聛硎菆D形模型的建立,首先是圖形數據的承載者角色(Actor),主要負責設置修飾效果;其次是渲染窗口(Renderer Window)的設置,主要有兩個應用:渲染環境的設置和人機交互的實現;在一切準備就緒后就可以由渲染器(Renderer)發出Render()命令,進行渲染,實現數據的可視化。
完成點云數據的顯示后,我們還需要實現對數據的多角度觀察,也就是交互問題。在可視化管線中vtkRenderwindowInteractor類為我們提供了簡便的實現交互的方式,根據需求,選擇vtkInteractor Style的子類vtkInteractorStyleTrackballCamera來實現旋轉、縮放、平移等交互操作。
VTK Pipeline采用串聯方式將實現不同功能的各階段連接起來,形成管線,方便數據流的流動:上一階段的輸出作為下一階段的輸入,不斷延續下去,直到碰到Mapper或sink。隨著科學技術的不斷發展,數據格式多種多樣,數據量急劇增加,這對科學可視化數據量和數據傳播提出了很大的挑戰[3]。
LAS數據文件包含的是標準LIDAR數據格式,現已發展為四個版本,分別是:LAS1.0,1.1,1.2,2.0(擬定版)[4]。隨著版本的不同,其數據存儲越來越靈活,信息越來越豐富。標準的LAS數據存儲格式包含三個部分:公共文件頭區,用于記錄LAS文件的普通信息,如點的個數等;變長記錄區,主要包含元數據,文件采用的坐標系等等;格式點集記錄區,用于記錄點的X、Y、Z和屬性[5]。LAS數據文件的一般數據提取流程如圖2所示。
LAS文件是二進制格式,但由于它有自己特定的文件頭結構和數據組織,故需要專業軟件進行讀取。LibLAS是針對LAS文件的讀與寫的庫,利用庫函數可以方便、快捷的進行.las文件數據的讀取。本文針對LAS數據文件,利用libLAS庫的liblas::Reader實現文件內數據的讀取,并將數據賦值給vtkPoints,從而傳遞到vtk可視化管線中。
VTK支持并行處理,且是開源的,具有可移植性。在實踐中,我們可以利用VTK,結合語言平臺,實現多種功能。例如,我們可以利用QT平臺的界面創建優勢,結合VTK庫可視化管線,進行數據成果展示,軟件開發等。VTK的開源特性方便了我們添加自己需要的功能,為新功能的發掘和實現提供支持。另外,我們也可以在遵循VTK本身設計模式的基礎上,定義新的類,嵌入其中,進一步完善VTK。
[1]許慶功,李昌華.VTK框架結構與運行機制的探討[J].洛陽理工學院學報(自然科學版),2008,18(1):67-70.
[2] William J. Schroeder, Lisa S. Avila, Kenneth M. Martin. The Visualization Toolkit User's Guide[M], GE Corporate Research &Development.
[3] Will Schroeder, Ken Martin, Bill Lorensen. The Visualization Toolkit[M].USA, Pearson Education,Inc.
[4]劉春,姚銀銀,吳杭彬.機載激光掃描(LIDAR)標準數據格式(LAS)的分析與數據讀取[J].遙感應用,2009:38-42.
[5]趙自明,史兵,田喜平,趙松.LAS格式解析及其數據的讀取與顯示[J].測繪技術裝備,2010,12(3):17-20.
索春寶(1989—),男,碩士生,主要從事視覺/慣導組合導航方面的研究工作。孫秀寧(1989—),女,碩士生,主要研究方向為移動測量數據采集與處理。
索春寶。