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