張震 ,張碩,馬召恒
(1.山東科技大學測繪科學與技術學院,山東 青島 266510; 2.河南省地礦局第二地質勘察院,河南 許昌 461000)
進入新世紀以來,隨著“數字地球”、“數字城市”的不斷發展,傳統的攝影測量技術由于其生產周期長、費用高、效率低等缺點,已經不能滿足信息發展的需要。LiDAR 作為測繪領域一項具有革命性的成就之一,通過幾十年的發展,如今的LiDAR 技術日趨完善,它正廣泛應用于測繪領域的各個方面。相對于歐美國家成熟的LiDAR 技術來說,我國目前在這方面的研究和應用還處于剛剛起步的階段,相關的數據處理方法還處于技術探索和發展的階段。
為了能有一個同一的標準,2003年美國攝影測量與遙感(ASPRS)協會下的LiDAR 委員會發布了主要面向機載LiDAR 數據的標準格式LAS??梢暬ぞ甙?Visualization Toolkit,VTK)是一個面向對象的可視化類庫,由于其功能強大、方便使用以及源代碼開放等特點,它被廣泛用于可視化工具的開發領域中。本文以2009年發布的LAS 1.3 為基礎,通過對其數據格式的解析與分析,在挪威TrollTech 公司開發的Qt 平臺上,結合VTK 技術,以C++為開發工具,實現了對LAS文件中的點云數據的快速讀取顯示,為后期對LiDAR數據處理奠定了初步的基礎。
機載LiDAR 系統是一個集多種電子設備于一身的集成系統。其主要組成包括:①激光測距儀,發生激光脈沖并接受回波;②動態差分GPS,用于確定掃描中心的空間位置;③慣性測量單元IMU,確定掃描儀的姿態;④高分辨率的數碼相機,與激光掃描儀同步獲取航空影像。
(1)激光測距原理
激光測距的基本原理是利用光在空氣中的傳播速度已知這一特性,測定光波在被測距離上往返傳播的時間來求得距離值。它主要采用兩種測距原理,即脈沖激光測距和連續波激光測距。由于連續波激光測距雷達的平均發射功率較低,測距能力比相應的脈沖激光雷達測距差很多,所以當前大多數雷達系統都采用脈沖激光測距來測量距離。
(2)機載LiDAR 技術對地定位原理
假設地理空間中一點O 的三維坐標(X0,Y0,Z0)已知,求出這一已知點到待定點A(XA,YA,ZA)的向量P(模,方向余弦),則A 點的坐標可以根據O 點坐標與向量P 求出,如圖1所示。
圖1 機載LiDAR 技術對地定位原理
XA=X0+△X
YA=Y0+△Y
ZA=Z0+△Z
其中:
△X=FX(Φ,ω,Κ,θ,S)
△Y=FY(Φ,ω,Κ,θ,S)
△Z=FZ(Φ,ω,Κ,θ,S)
已知點O 的三維坐標(X0,Y0,Z0)由GPS 提供;方向余弦由觀測平臺的法線的俯仰角Φ、側滾角ω、航偏角K 及觀測方向與法線間夾角θ 組成的矢量矩陣求出,觀測平臺法線的Φ,ω,K 由姿態裝置給出;矢量的模S 由激光測距儀給出,上述X0,Y0,Z0,Φ,ω,K,θ,S已知,那么任意測定點A 的三維坐標(XA,YA,ZA)即可求出。
機載LiDAR 數據一般有兩種格式:一種是ASCII格式,這種格式的數據便于讀取,但是它沒有壓縮,Li-DAR 數據通常都是海量數據,存儲和處理起來占用的內存較大;另一種是目前國際上通用的機載LiDAR 數據的標準格式LAS,LAS 數據格式文件采用的是二進制格式,包含更多的信息,占用的內存空間相對較小,LAS 標準格式是由美國攝影測量與遙感協會2003年開始發布的,經過改進,目前已有5 種版本,分別是LAS1.0,1.1,1.2,1.3,2.0,其中LAS1.3 版本是最常見到的數據格式。
LAS1.3 數據格式由二進制數據組成,包含一個頭文件區,變長記錄區和點記錄區。頭文件區包含一個公共區,后面緊接著變長記錄。公共區塊包含一些描述數據整體情況的記錄,比如點記錄數,坐標邊界。變長記錄包含一些變長類型數據,有投影信息,元數據,波形數據包信息和用戶應用數據。如果包含波形數據包的話,那么它位于所有點數據記錄的末尾。它被放置在該處以方便對它的分離或實體化。該記錄是一個擴展變長記錄(EVLR)。EVLR 的存儲格式為無符號超長整型,允許存儲比一個變長記錄更多的信息。
VTK 是一個用于3D 計算機圖形學、計算機圖像處理以及可視化應用程序的設計與開發,同時可以免費獲取,開放源代碼的獨立類庫。它包括兩個基本的子系統:一個是已經編譯好的C++類庫;另一個接口層,提供了支持Java,Tcl 和Python 等解釋性語言的接口。VTK 支持多線程,分布式運算,可支持多種用戶交互方式,支持事件/觀察者(Command/Observer)用戶事件處理模式并提供包括點(Point),線(Lines)和三角網(Triangle Strips)等多種基本繪制圖元,它可以在Windows,Linux 和Unix 等平臺下的多種編程調用,所以它被廣泛用于可視化工具的開發領域中。
由于VTK 的類庫特別龐大,所以根據各個類在類庫中的作用,將類庫中的類分成如下幾部分:公共部分(Common)、圖形處理部分(Graphics)、圖像處理部分(Imaging)、文件讀寫部分(IO)、繪制部分(Rendering)、數據轉換部分(Filtering)等,每部分被編譯成相應的動態連接庫。各部分在類庫中的層次如圖2所示。
圖2 VTK 類庫中的層次
VTK 是在OpenGL 函數庫的基礎之上,采用面向對象的方法發展起來的,它有兩種不同的方式:圖形模型(Graphics Models)和可視化模型(Visualization Models)。圖形模型是三維圖形的抽象,側重于對圖像、圖形的操作和處理;可視化模型是可視化過程中數據流程的模型,側重于在可視化過程中的數據流。VTK 可視化管道圖如圖3所示。
圖3 VTK 可視化管道圖
Qt 是由奇趣科技開發的跨平臺C++圖形用戶界面應用程序開發框架。它既可以開發GUI 程式,也可用于開發非GUI 程式。Qt 的良好封裝機制使得Qt 的模塊化程度非常高,可重用性較好,同時它支持2D/3D 圖形渲染和OpenGL,這對于用戶開發來說是非常方便的?,F有2010年獲取的位于焦作市西北約30 km 處的太行山區部分機載LiDAR 點云數據作為實驗數據,其數據格式為LAS 1.3。在Qt 平臺上,結合VTK 技術,以C++為開發工具,即可實現這片區域點云數據的可視化(如圖4所示)。其主要可視化程序設計過程如下:
圖4 太行山區部分LiDAR 點云數據的可視化
(1)獲取點云數據
vtkPoints* pPoint=vtkPoints::New( ) ;
vtkPolyData* pdata=vtkPolyData::New( ) ;
pdata->SetPoints( pPoint) ;
(2)設置顏色表中的顏色
vtkLookupTable* pColorTable=vtkLookupTable::New( ) ;
pColorTable->SetHueRange(0,1) ;
pColorTable->SetNumberOfColors(225) ;
pColorTable->Build( ) ;
(3)創建映射器mapper 及演員actor
vtkPolyDataMapper* mapper=vtkPolyDataMapper::New( ) ;
vtkActor* actor=vtkActor::New( ) ;
mapper->SetInput( pdata) ;
actor->SetMapper( mapper) ;
(4)創建渲染器ren 及顯示窗口renwin
vtkRenderer* ren=vtkRenderer::New( ) ;
vtkRenderWindow* renwin=vtkRenderWindow::New( ) ;
ren->AddViewProp( actor) ;
renwin->AddRenderer( ren) ;
renwin->SetSize(800,800) ;
(5)創建交互窗口inter 及點云數據可視化顯示
vtkRenderWindowInteractor* inter = vtkRenderWindowInteractor::New( ) ;
inter->SetRenderWindow( renwin) ;
inter->Initialize( ) ;
inter->Start( ) ;
機載LiDAR 作為一種新興的現代化測量技術手段,它可以快速獲取地面地物的三維數據,得到點云數據。由于點云數據處理起來相對比較麻煩,筆者通過對機載LiDAR 點云數據標準格式的研究,基于VTK 技術編程實現了點云數據的快速讀取顯示,有助于后期生成DEM,三維建模等進一步的研究。
[1]楊洋,張永生.基于LiDAR 數據的建筑物輪廓提?。跩].測繪科學,2010,35(3) :203 ~205.
[2]陳松堯,程新文.機載LiDAR 系統原理及應用綜述[J].測繪工程,2007,16(2) :27 ~31.
[3]張靖,高偉.LAS 格式解析及其擴展域的應用[J].測繪科學,2008,33(3) :154 ~155.
[4]常君明,邱磊,鄒早建.基于VTK 的CFD 可視化系統開發和應用[J].武漢理工大學學報,2004,26(4) :83 ~85.
[5]劉玉芳,王潤懷,宋金星.基于VTK 的三維地層可視化探討[J].河南理工大學學報,2009,28(3) :303 ~306.
[6]李清泉,李必軍,陳靜.激光雷達測量技術及其應用研究[J].武漢測繪科技大學學報,2000,25(5) :387 ~392.