蔡來良,李 儒
(1.河南理工大學測繪與國土信息工程學院,河南焦作454003;2.西安煤航信息產(chǎn)業(yè)有限公司地理信息工程院,陜西西安710054)
隨著測繪科技的發(fā)展,三維激光掃描技術被越來越多地用于房屋的變形監(jiān)測、林木測量、工礦企業(yè)測量、輸電線路測量、礦區(qū)地表移動觀測站測量,地質(zhì)滑坡監(jiān)測、古文物建模、道路監(jiān)測等[1-10]。隨著該項技術的進一步深入,給數(shù)據(jù)處理也提出了新的要求。就目前來看數(shù)據(jù)處理都是基于一些通用平臺,很少有針對某一領域的專用軟件;同時,目前的數(shù)據(jù)處理軟件都以國外軟件為主體,很少有國產(chǎn)軟件。為了進一步提高我國的自主研發(fā)水平,很有必要編制出有自主知識產(chǎn)權(quán)的點云數(shù)據(jù)處理平臺,為更多的三維激光掃描應用提供服務。本文針對點云數(shù)據(jù)的特點,提出了基本的數(shù)據(jù)處理方法并進行了程序?qū)崿F(xiàn)。
從三維激光掃描技術的特點可知,其測量速度快,自動化程度高,在很短時間就可以獲取大量數(shù)據(jù)。通常一個掃描工程可獲得上GB的數(shù)據(jù),有的項目一次可以獲得十幾GB的數(shù)據(jù)。數(shù)據(jù)量巨大,給這些數(shù)據(jù)讀取、處理、分析工作帶來了挑戰(zhàn)。
文件操作是傳統(tǒng)應用程序最為基本的功能之一,現(xiàn)有流行的編程平臺均提供有支持文件處理的函數(shù)和類,常用的有 Win32 API的 CreateFile()、WriteFile()、ReadFile()和MFC提供的CFile類等。一般來說,以上這些函數(shù)可以滿足大多數(shù)場合的要求,但是對于某些特殊應用領域所需要的動輒幾十GB、幾百GB、乃至幾TB的海量存儲,無法再以通常的文件處理方法進行處理。目前,對于上述這種大文件的操作一般是以內(nèi)存映射文件的方式來加以處理的,若要使用內(nèi)存映射文件,必須執(zhí)行下列操作步驟:
1)創(chuàng)建或打開一個文件內(nèi)核對象,該對象用于標識磁盤上你想用作內(nèi)存映射文件的文件;
2)創(chuàng)建一個文件映射內(nèi)核對象,告訴系統(tǒng)該文件的大小和如何訪問該文件;
3)讓系統(tǒng)將文件映射對象的全部或一部分映射到你的進程地址空間中。
當完成對內(nèi)存映射文件的使用時,必須執(zhí)行下面這些步驟將它清除:
1)告訴系統(tǒng)從進程的地址空間中撤消文件映射內(nèi)核對象的映像;
2)關閉文件映射內(nèi)核對象;
3)關閉文件內(nèi)核對象。
與虛擬內(nèi)存一樣,內(nèi)存映射文件可以用來保留一個地址空間的區(qū)域,并將物理存儲器提交給該區(qū)域。它們之間的差別是,物理存儲器來自一個已經(jīng)位于磁盤上的文件,而不是系統(tǒng)的頁文件。一旦該文件被映射,就可以訪問它,就像整個文件已經(jīng)加載內(nèi)存一樣。使用內(nèi)存映射文件來訪問磁盤上的數(shù)據(jù)文件時,可以不必對文件執(zhí)行I/O操作,并且可以不必對文件內(nèi)容進行緩存。
內(nèi)存映射技術在點云數(shù)據(jù)處理過程的應用極大地提高了數(shù)據(jù)的存取速度,為進一步的數(shù)據(jù)處理奠定了基礎。
點云數(shù)據(jù)被讀入系統(tǒng)后,最重要的工作便是對其可視化。通過計算機圖形學的相關技術可知,現(xiàn)有的成熟三維顯示引擎為OpenGL和Direct3D。下面分別介紹其技術實現(xiàn)過程。
OpenGL是行業(yè)領域中最為廣泛接納的2D/3D圖形API,其自誕生至今已催生了各種計算機平臺及設備上的數(shù)千優(yōu)秀應用程序。根據(jù)其強大的圖形功能,能完全勝任點云處理的各種可視化功能。其三維建模流程如圖1所示。
圖1 OpenGL建立三維模型的流程
Direct3D(D3D)是微軟公司在Microsoft Windows操作系統(tǒng)上所開發(fā)的一套3D繪圖編程接口,是DirectX的一部分,目前廣為各家顯示卡所支持。與OpenGL同為電腦繪圖軟體和電腦游戲最常使用的兩套繪圖編程接口之一。使用Direct3D來進行點云可視化的基本步驟如下:
1)設置繪圖參數(shù)。在本步驟中主要設置的是窗口類型、后備緩存交換的參數(shù)、是否允許自動深度測試、繪圖窗口的大小等。
2)創(chuàng)建繪圖設備device。由于在整個系統(tǒng)中存在很多的數(shù)值計算,最小二乘擬合等,為了保證計算精度,需要設置上CreateFlags.FpuPreserve項。
3)場景渲染。在本步驟中主要通過循環(huán)繪制三維場景來顯示點云數(shù)據(jù),其實質(zhì)是反復對上一步創(chuàng)建的device進行參數(shù)設置,更新顯示區(qū)域。
由于點云數(shù)據(jù)的主要特點之一就是它的離散化。當需要研究被測物體的連續(xù)表面時就需要將離散的點連成面。不管是表示地形表面還是建筑物表面,目前用得最多的是三角網(wǎng)。三角網(wǎng)建立的方法雖然有一定的復雜度,但是建成后,其在紋理映射等方面有較強的優(yōu)勢。
三維Delaunay三角網(wǎng)的生成步驟如下。
(1)預處理
1)將點云數(shù)據(jù)自動分割為片狀;
2)擬合出片狀點云的趨勢平面;
3)將片狀點云投影在趨勢平面上,獲得投影的二維坐標,將三維問題轉(zhuǎn)化為二維問題。
(2)連接三角網(wǎng)
1)提取包含所有數(shù)據(jù)點的最小外接矩形,沿矩形對角線將矩形劃分為兩個超三角形;
2)定位三角形,從點集中取出一點,在已構(gòu)建的三角形中檢索到包含該點的三角形;
3)確定受影響三角形,沿待插入點所在的三角形三條邊的方向搜索,尋找出外接圓包含該點的所有三角形,這些三角形的外邊界稱為受影響邊界;
4)受影響區(qū)域內(nèi)三角形重構(gòu),刪除所有受影響三角形,依次連接邊界中每一條受影響邊與待插入點構(gòu)建新的三角形;
5)循環(huán)2)、3)、4)直到所有的數(shù)據(jù)點都被插入到三角網(wǎng)中;
6)刪除包含所有包含最小外接矩形頂點的三角形。
基于本文的基本算法,結(jié)合VS2010軟件開發(fā)平臺,研發(fā)了點云處理軟件,該軟件能實現(xiàn)一些基本的數(shù)據(jù)處理和建模功能,見圖2、圖3。
圖2 點云的顯示及交互操作
圖3 點云的三維建模
通過算法研究,程序?qū)崿F(xiàn)等手段,研究了點云數(shù)據(jù)處理平臺。通過研究,基本上實現(xiàn)了點云數(shù)據(jù)的快速讀取、顯示和三維建模。為進一步建立更優(yōu)的數(shù)據(jù)處理平臺奠定了基礎。
[1]蔡來良,吳侃,張舒.點云平面擬合在三維激光掃描儀變形監(jiān)測中的應用[J].測繪科學,2010,35(5):231-232.
[2]戴華陽,廉旭剛,陳炎,等.三維激光掃描技術在采動區(qū)房屋變形監(jiān)測中的應用[J].測繪通報,2011(11):44-46.
[3]王瑜,劉西濤,王照星,等.三維激光掃描技術在石化企業(yè)的應用[J].測繪通報,2011(11):86-87.
[4]段奇三.徠卡HDS8800三維激光掃描儀在露天礦中的應用[J].測繪通報,2011(12):79-80.
[5]李超,程浩,王芳.三維激光掃描技術在林木測量方面的應用[J].測繪通報,2011(11):86-87.
[6]周學林,魏文濤,王占超.三維激光掃描系統(tǒng)在舟曲重點地質(zhì)災害治理工程中的應用[J].測繪通報,2011(11):81-82.
[7]黃姍,薛勇,江濤.三維激光掃描技術在地質(zhì)滑坡中的應用[J].測繪通報,2012(1):100-101.
[8]趙鑫,吳侃,蔡來良.具有先驗信息的地面三維激光掃描地形測量數(shù)據(jù)去噪算法[J].大地測量與地球動力學,2011,31(4):107-111.
[9]孟志義,錢林.基于點云數(shù)據(jù)的文物精細建模[J].測繪通報,2011(12):41-43.
[10]徐進軍,張毅,王海成.基于地面三維激光掃描技術的路面測量與數(shù)據(jù)處理[J].測繪通報,2011(11):34-36.