專利名稱:海量點云數據的存儲與實時可視化方法
技術領域:
本發明屬于地理空間信息系統技術領域,特別是涉及一種海量點云數據的 存儲與實時可視化方法。
激光掃描技術是上世紀九十年代蓬勃發展起來的高精度、快速獲取物體三 維幾何數據的新型技術,通過記錄激光脈沖的方向和計算經目標表面反射后返 回的時間差(或相位差)來獲取目標表面的三維坐標,精度一般可以達到毫米 級,其特點在于獲取速度快,數據精度高。因此,激光掃描得到的點云數據在 數字文物、數字城市等領域逐漸得到廣泛應用。直接基于采樣點的點云數據在
三維數據處理中具有獨特優勢僅保存采樣點不但可以有效地降低存儲需求, 而且可以避免構網操作以及網格拓撲關系的處理,這對大型復雜場景的數據處 理尤為重要。
隨著三維掃描技術的應用領域的不斷擴大,以及人們對掃描數據精度的要 求不斷提高,三維掃描儀產生的點云數據量越來越龐大,以至于點云數據的單 體文件大小一般在GB級。由于數據量遠遠大于內存容量,稱其為"海量點云數
據"。例如,1999年美國斯坦福大學的"米開朗基羅"項目中,雕像掃描的精度 最高已經達到1/4毫米,著名的"大衛"雕像掃描得到的原始點云數量高達11 億。由于內存容量遠遠小于需要進行可視化的點云數據量,超大數據量的點云數 據無法一次加載到內存,在普通計算機上海量點云數據難以實時渲染或者達不到實時交互的要求,因此,在普通計算機上實現對海量點云的實時可視化成為 一個亟待解決的問題。
更為重要的是,在實際生活中,人們觀察周圍的世界時,人眼的空間與時 間分辨率總是有限的。同樣,虛擬環境中的物體總是在不同的細節層次表現出 不同的結構和特征,細節層次因此成為決定人們空間認知十分重要的一個因素。 根據人眼分辨率有限的基本原理,應該忽略掉那些人眼所不能看到的空間物體 的細節,通過有限的若干離散的細節層次而獲得有關一個真實環境比較完整的 知識。同時,由于點云數據在實時顯示的時候,不能進行有效的遮擋剔除,因 此,點與點之間容易造成相互干擾,影響可視化效果。因此,為海量點云數據
建立細節層次模型(Level of Detail, LOD)成為一項必要的工作。
目前,海量點云的實時可視化方法主要有以下兩種 (1)基于層次結構的點云數據實時可視化
該類方法利用八叉樹或K-D樹等結構將海量點云數據集分割并組織為層次 結構,對每一塊分割后的數據生成誤差控制下的多分辨率數據結構,在可視化 時依據對細節層次的要求提取合適的層次數據進行渲染,這種方法可以可視化 海量的點云數據,但是依賴于復雜的數據結構和預處理過程,可視化時需要復 雜的調度和控制機制。該類方法在下列文獻中均有論述Wagner Toledo Correa. New Techniques for Out-Of-Core Visualization of Large Datasets. Princeton University, 2004. Matthias Hopf , Michael Luttenberger, Thomas Ertl. Hierarchical Splatting of Scattered 4D Data. IEEE Computer Graphics and Applications, 2004: 64-72.孟放,査紅彬.基于LOD控制與內外存調度的大型三維點云數據繪制. 計算機輔助設計與圖形學學報,2006.路明月,何永健.三維海量點云數據的組織與索引方法.地球信息科學,2008.
(2)基于抽稀處理的點云數據實時可視化 該類方法有兩種實現方式, 一種是在顯示之前設定抽稀系數,另一種是將 所有數據加載到內存之后再設定抽稀系數進行顯示。前者由于加載到內存中的 數據是已抽稀讀取的點,因此不能動態地改變顯示的細節,而后者需要將所有 數據都先加載到內存當中,在進行海量點云實時可視化時,往往由于內存容量 不足導致數據加載失敗。常用的商業軟件Polyworks即采用上述的抽稀方法來顯 示點云數據。
發明內容
本發明目的在于針對海量點云數據難以實時可視化難題,針對點云數據的 特點,提出一種利用多波段圖像存儲點云數據的方法以及基于此存儲方法的實 時可視化方法。
一種海量點云數據存儲方法,其特征在于包括有以下步驟, 步驟l.l,在計算機中打開點云數據文件的同時,獲取計算機的系統剩余內存容 量,并根據該容量確定每次映射的最大數據量;
步驟1.2,從點云數據文件取一分段并映射到進程虛擬地址空間,解析已映射的
點云數據并在內存中進行存儲,計算內存中全部點云數據的最小外包圍盒,并
預計內存中全部點云數據與下一次映射的點云數據的數據量總和;
步驟1.3,獲取計算機此時的系統剩余內存容量,判斷預計的數據量總和是否超
出此時系統剩余內存容量,如果不超出,判斷點云數據文件是否全部映射,如
果是則進入步驟1.4,否則返回步驟1.2,繼續從點云數據文件取下一分段映射;
如果超出此時系統剩余內存容量,進入步驟1.4;步驟1.4,將內存中的點云數據存儲為多波段圖像文件,其中每波段存儲點云數 據的一個維度的信息;
步驟1.5,對已存儲的多波段圖像文件進行多級重采樣,為其構建圖像金字塔, 并存儲帶有圖像金字塔的新多波段圖像文件替換已存儲的多波段圖像文件,并 將步驟1.2所得點云數據的最小外包圍盒信息存儲在新多波段圖像文件的頭信 息中;釋放點云數據所占用的內存;所述圖像金字塔中的層級分別對應于點云 數據的細節層次模型層級;
步驟1.6,重復步驟1.2 1.5,直至點云數據文件被全部存儲為多波段圖像文件。 本發明還提供了相應海量點云數據實時可視化方法,其特征在于包括有 以下步驟,
步驟2.1,通過讀取全部多波段圖像文件中分別記錄的最小外包圍盒信息,計算 全部點云數據的最小外包圍盒;根據全部點云數據的最小外包圍盒計算初始視 點位置;
步驟2.2,提取多波段圖像文件中的圖像金字塔,根據實際掃描的點距、屏幕分 辨率以及重采樣參數,計算圖像金字塔中各層圖像的距離作用范圍; 步驟2.3,根據初始視點位置到全部點云數據的最小外包圍盒中心點的距離,按 照圖像金字塔中各層圖像的距離作用范圍,選擇圖像金字塔中的層級,加載相 應細節層次模型層級的點云數據,并將己加載的點云數據進行渲染;當視點移 動時,按照圖像金字塔中各層圖像的距離作用范圍切換對應細節層次模型層級 的點云數據,并執行實時渲染。
本發明利用計算機內存剩余容量作為約束,通過分段映射的方法,將包含 多個維度信息的海量點云數據存儲為多波段圖像;通過對多波段圖像進行多級重采樣構建圖像金字塔的方式為海量點云數據快速建立多細節層級,提供了海
量點云數據集的多分辨率的簡化數據表達;通過計算圖像金字塔中各層圖像的
距離作用范圍,對實時可視化過程中需要加載的層級進行控制,有效地實現了 海量點云數據的多細節層次的實時可視化。本發明提出的海量點云數據存儲及 實時可視化方法具有方法簡潔、執行效率高的優點,有效地解決了在普通計算 機上進行海量點云數據實時可視化的難題,適用于各種數據規模的點云數據集,
尤其適用于GB級以上數據規模的點云數據集的實時可視化。
圖1本發明的總體流程圖2本發明實施例的海量點云數據存儲流程圖; 圖3本發明的海量點云數據分段映射方法; 圖4本發明帶有圖像金字塔結構的多波段圖像結構圖; 圖5屏幕投影原理示意圖6本發明實施例中海量點云數據的實時可視化流程圖。
具體實施例方式
本發明技術方案中,海量點云數據存儲成多波段圖形文件后,通過對多波 段圖形文件的處理實現海量點云數據的實時可視化。這兩個過程可以分幵實施, 由地理數據提供者存儲海量點云數據,用戶需要査看虛擬圖像時實現實時可視 化。為了便于理解本發明,圖1提供了利用計算機技術,實現自動化處理的總 體流程如下
海量點云數據存儲實現包括有以下步驟, 步驟l.l,在計算機中打開點云數據文件的同時,獲取計算機的系統剩余內存容量,并根據該容量確定每次映射的最大數據量;
步驟1.2,從點云數據文件取一分段并映射到進程虛擬地址空間,解析己映射的
點云數據并在內存中進行存儲,計算內存中全部點云數據的最小外包圍盒,并
預計內存中全部點云數據與下一次映射的點云數據的數據量總和; 步驟1.3,獲取計算機此時的系統剩余內存容量,判斷預計的數據量總和是否超 出此時系統剩余內存容量,如果不超出,判斷點云數據文件是否全部映射,如 果是則進入步驟1.4,否則返回步驟1.2,繼續從點云數據文件取下一分段映射; 如果超出此時系統剩余內存容量,進入步驟1.4;
步驟1.4,將內存中的點云數據存儲為多波段圖像文件,其中每波段存儲點云數 據的一個維度的信息;
步驟1.5,對已存儲的多波段圖像文件進行多級重采樣,為其構建圖像金字塔, 并存儲帶有圖像金字塔的新多波段圖像文件替換已存儲的多波段圖像文件,并 將步驟1.2所得點云數據的最小外包圍盒信息存儲在新多波段圖像文件的頭信 息中;釋放點云數據所占用的內存。通過多級重采樣建立圖像金字塔,圖像金 字塔中的層級代表不同清晰度,相當于建立了點云數據的細節層次模型。因此 圖像金字塔中的層級分別對應于點云數據的細節層次模型層級。 步驟1.6,重復步驟1.2 1.5,直至點云數據文件被全部存儲為多波段圖像文件。 多波段圖像都是以文件形式存儲,所以稱為多波段圖像文件,圖中簡略標 示為多波段圖像。值得注意的是,步驟1.3判斷預計數據量總和是否超出此時 系統剩余內存容量,并非步驟1. 1所獲取的系統剩余內存容量。步驟1. 1所獲 取的系統剩余內存容量值由于程序運行的消耗,與步驟1.3中獲取的剩余內存 容量值不相同。程序處理時需要計算機分配連續的內存塊,而且涉及到內存回收以及再分配的問題,所以要重新獲取剩余內存容量。步驟1.6決定是否循環重 復步驟1.2 1.5,可以采用點云數據文件是否被全部存儲為多波段圖像文件的判 斷條件。當然,如果是在步驟1.3判斷預計的數據量總和未超出此時系統剩余內 存容量且點云數據文件已全部映射,然后進入步驟1.4,此處可省略重復判斷, 直接結束程序即可。
海量點云數據實時可視化實現包括有以下步驟, 步驟2.1,通過讀取全部多波段圖像文件中分別記錄的最小外包圍盒信息,計算 全部點云數據的最小外包圍盒(圖1中簡稱為總最小外包圍盒大小);根據全部 點云數據的最小外包圍盒計算初始視點位置;
步驟2.2,提取多波段圖像文件中的圖像金字塔,根據實際掃描的點距、屏幕分 辨率以及重采樣參數,計算圖像金字塔中各層圖像的距離作用范圍; 步驟2.3,根據初始視點位置到全部點云數據的最小外包圍盒中心點的距離,按 照圖像金字塔中各層圖像的距離作用范圍,選擇圖像金字塔中的層級,加載相 應細節層次模型層級的點云數據(可簡稱為初始LOD層級數據),并將已加載 的點云數據進行渲染;當視點移動時,按照圖像金字塔中各層圖像的距離作用 范圍切換對應細節層次模型層級的點云數據,并執行實時渲染。切換就是刪除 原LOD層級數據,加載新的LOD層級數據,然后渲染已加載數據即可。 以下結合附圖和實施例詳細說明本發明的技術方案-
參見圖2,本發明的海量點云數據存儲方法的原理是將包含有N(A^1)維信 息的原始海量點云數據存儲成T(7^1)張包含有N個波段的圖像,對已存儲的多 波段圖像進行多級重采樣,構建圖像金字塔并存儲圖像文件。本發明實施例的 存儲實現過程采用計算機實現自動化處理,包括以下步驟'余內存容量,并根據該容 量確定每次映射的最大數據量M。可以按系統剩余內存容量的一定比例來確定
M值,如可以將M值設置為系統剩余內存容量的1/5。由于點云數據文件的數 據量可能遠遠大于系統內存容量,因此本發明在進行點云數據文件分割并利用 圖像存儲時采用內存文件映射的方式,將磁盤上的點云數據文件連續分段并依 次映射到進程虛擬地址空間,通過這種方式可以處理任意大小的點云數據文件。
步驟1.2,從點云數據文件取一分段并映射到進程虛擬地址空間。進行內存 文件映射時,根據每次映射的最大數據量M來計算映射起始點相對于點云數據 文件起始處的偏移位置。參見圖3,磁盤存儲器中的點云數據文件向進程虛擬地 址空間中的映射區轉移。在進行第一次文件映射/。時,映射起始點P。位于文件 起始處,在進行第二次文件映射/,時,映射的起始點S位于Po+M處,即相對于 文件起始處偏移M。以后的每一次映射In中,映射的數據量都為M,映射的文 件起始位置P 位于;,+ M處。
每一次內存文件映射時,解析映射到進程虛擬地址空間的點云數據并在內 存中存儲解析獲取的數據,計算并更新存儲在內存中的點云數據的最小外包圍 盒大小,獲得最小包圍盒的最大最小三維坐標Xn^, xmin, ymax, ymin, zmax, zmin。
解析是從映射的點云數據中提取有用信息的過程。在連續分段映射中,內存中 的點云數據的最小外包圍盒可能發生變化,可以采用迭代更新方式確定當前內
存中的點云數據的最小外包圍盒本發明實施例計算的是軸向外包圍盒(Axis Aligned Bounding Box, AABB),計算方法是每次從點云數據文件中讀取一個點 的信息后,就將該點的X, Y, Z三維坐標同已獲得的xmax, xmin, ymax, ymin, ^max Zmin 進行比較,例如,如果 則使用x替代 如果 x < xmin贅則使用X替代Xmin,如果x 2 、in且;c S xmax ,則外包圍盒不做更新。
步驟1.3,每次內存文件映射結束后,預計算內存中點云數據量與下一次映 射的點云數據量的總和。預計總和時,就是以每次映射的最大數據量M作為下 一次映射可能的點云數據量。獲取計算機此時的系統剩余內存容量,如果預計 的數據量總和小于此時的系統剩余內存容量,判斷點云數據文件是否全部映射, 如果是,則進入后續步驟,否則返回上一步驟將點云數據文件中的下一部分文 件內容映射到進程虛擬地址空間;如果該值大于此時的系統剩余內存容量,則 進入后續步驟;
步驟1.4,將已存儲在內存中的點云數據存儲成多波段圖像文件,每波段存 儲一個維度的信息。實施例中,將內存中的點云數據存儲到磁盤上的多波段圖 像文件的步驟如下首先創建一張能夠容納內存中所有點云數據的多波段圖像,
圖像的波段數與信息維度相同,將每一維度信息寫入到對應波段中。例如,一
個包含有N個點的擁有x, y, z, r四個維度信息的點云數據集寫入到多波段圖 像時,創建的圖像寬為W,高為H,其中『xZ/2JV,該圖像包含有四個波段, 每個波段分別存儲一個維度的信息,如可以用第一個波段存儲點云數據集中所 有的x值。由于『x/Z2W,因此圖像存儲的點數量可能大于N,多余的點數據
用無效值進行填充。
步驟1.5,對已存儲的多波段圖像文件進行多級重采樣,實施例采用最鄰近 點采樣法,即從每一采樣區域內挑選一個點來代表整個區域的值,采樣速度快 且不會改變原始點的值。設置圖像的重采樣層級,如1/4, 1/16等多級采樣,通 過對圖像進行多級重采樣以及存儲重采樣結果獲得帶有圖像金字塔的新多波段 圖像替換已存儲的多波段圖像文件,圖4顯示的是實施例中帶有圖像金字塔的多波段圖像結構示意圖;其中波段l存儲x坐標信息,波段2存儲y坐標信息, 波段3存儲z坐標信息,波段4存儲光強信息,波段5存儲顏色值r分量,波段 6存儲顏色值b分量,還可設更多波段存儲法線等信息。各細節層次模型層級中, 第一層級LODO是l化采樣、第二層級LOD1是第三層級LOD2是 第四層級LOD3是l久采樣...后續還可以有更多層級,圖中用L0Dk 標示。頭信息中則包含最小外包圍盒大小。
具體實施時,可以先設置重采樣方式與等級,再對多波段圖像進行重采樣, 采樣完成后存儲重采樣數據及外包圍盒信息,得到帶圖形金字塔的多波段圖像 文件,然后釋放點云數據所占內存。
步驟1.6,重復分段映射和生成多波段圖像文件,直至點云數據文件被全部 存儲為多波段圖像文件。單個點云數據文件由于內存容量的關系,可能被存儲 為一或多個多波段圖像文件。全部完成時結束流程。
本發明的海量點云數據實時可視化方法的原理是通過判斷視點到全部點云 數據最小外包圍盒中心點的距離的變化加載不同的LOD層級(圖像金字塔中的 層級分別對應于點云數據的LOD層級)數據送入顯卡端創建頂點緩存來進行繪 制。
本發明實施例的實時可視化實現過程采用計算機實現自動化處理,包括以
下步驟
步驟2.1,通過讀取全部多波段圖像文件中記錄的最小包圍盒信息,計算這 些多波段圖像文件所提供全部點云數據的最小外包圍盒(即總最小外包圍盒大 小);根據全部點云數據的最小外包圍盒計算初始視點位置,計算方法如下獲
取與視線相對的外包圍盒的外表面S的高度值H,已知視錐體的垂直角為a,利用公式丄=y入計算離S面的距離L,將視點從S面的中心點沿視線反方向 tan("/ 2)
平移L,得到的位置就是視點的初始位置。
步驟2.2,根據實際掃描的點距、屏幕分辨率以及重采樣參數,計算圖像金 字塔中各層圖像的距離作用范圍,即各LOD層級距離作用范圍。
參見圖5,設定實際掃描的點距(即原始點云數據的分辨率)為s,在采樣 參數為1/k對應的點云數據中點距為k*s (圖5中點1與點2之間的距離),視 點到采樣點的距離為d,視錐體在采樣點處的寬度為w,視線的水平角為e,屏 幕分辨率為x,兩相鄰采樣點投影到屏幕上的像素距離為p。可以得到d與采樣 參數1/k之間的關系
W — 2ptan(e/ 2)
由此可見,當兩相鄰采樣點投影到屏幕上的像素距離p小于投影最小閾值 時,則表明采樣參數1/k所對應的圖像金字塔中的LOD層次數據在視點到采樣 點距離為d的條件下投影到屏幕時過于密集,需要加載圖像金字塔中更為稀疏 的層級數據進行渲染;當p大于投影最大閾值時,則表明采樣參數l/k所對應的 圖像金字塔中的LOD層次數據在視點到采樣點距離為d的條件下投影到屏幕時 過于稀疏,需要加載圖像金字塔中更為密集的層級數據進行渲染。
步驟2.3,根據視點到點云數據最小外包圍盒中心點的距離,選擇圖像金字 塔中合適的層級進行數據加載,并將己加載的點云數據進行渲染;當視點移動 時,按照圖像金字塔中各層圖像的距離作用范圍選擇對應的LOD層級進行數據 切換,并執行實時渲染。如圖6所示,實施例具體的步驟如下步驟2.31,根據初始視點位置到點云數據最小外包圍盒中心點的距離,以
及圖像金字塔不同LOD層級作用的距離范圍,計算LOD層級。
步驟2.32,加載單張多波段圖像中對應LOD層級的數據進入內存。將數據 送往顯卡端,生成一個頂點緩存,并刪除內存中對應的數據。
步驟2.33,重復步驟2.32,直至所有多波段圖像中對應的LOD層級數據都 加載到顯卡端;對已經加載的點云數據進行渲染。
步驟2.34,在視點移動的同時,根據視點到點云數據最小外包圍盒中心點 的距離來判斷對應的LOD層級是否發生變動。 ,
當LOD層級未發生變動時,不加載新數據,使用已加載的數據進行渲染。 當LOD層級變動時,對與該層級對應的所有多波段圖像逐張進行處理,從步驟 2.35開始,
步驟2.35,計算單張多波段圖像中將要讀取的數據的大小,獲取系統剩余 內存容量,判斷該數據大小是否小于此時系統剩余內存容量,如果小于,則進 入步驟2.36,否則放棄加載新數據,進入步驟2.38。實施例設置該步驟,利于 保證在內存容量允許的條件下,實現點云數據可視化。
步驟2.36,刪除顯卡端原有的頂點緩存數據。加載單張圖像中對應LOD層 級數據進入內存,將加載到內存中的數據傳送到顯卡端創建一個頂點緩存,并 刪除內存中的數據。
步驟2.37,重復步驟2.35和2.36,直至圖像遍歷完畢,所有多波段圖像中 對應的LOD層級數據都加載到顯卡端或者由于系統剩余內存容量不足而進入步 驟2.38;步驟2.38,渲染已加載到顯卡端的點云數據。
步驟2.39,重復步驟2.34至2.38,直至程序退出。
權利要求
1.一種海量點云數據存儲方法,其特征在于包括有以下步驟,步驟1.1,在計算機中打開點云數據文件的同時,獲取計算機的系統剩余內存容量,并根據該容量確定每次映射的最大數據量;步驟1.2,從點云數據文件取一分段并映射到進程虛擬地址空間,解析已映射的點云數據并在內存中進行存儲,計算內存中全部點云數據的最小外包圍盒,并預計內存中全部點云數據與下一次映射的點云數據的數據量總和;步驟1.3,獲取計算機此時的系統剩余內存容量,判斷預計的數據量總和是否超出此時系統剩余內存容量,如果不超出,判斷點云數據文件是否全部映射,如果是則進入步驟1.4,否則返回步驟1.2,繼續從點云數據文件取下一分段映射;如果超出此時系統剩余內存容量,進入步驟1.4;步驟1.4,將內存中的點云數據存儲為多波段圖像文件,其中每波段存儲點云數據的一個維度的信息;步驟1.5,對已存儲的多波段圖像文件進行多級重采樣,為其構建圖像金字塔,并存儲帶有圖像金字塔的新多波段圖像文件替換已存儲的多波段圖像文件,并將步驟1.2所得點云數據的最小外包圍盒信息存儲在新多波段圖像文件的頭信息中;釋放點云數據所占用的內存;所述圖像金字塔中的層級分別對應于點云數據的細節層次模型層級;步驟1.6,重復步驟1.2~1.5,直至點云數據文件被全部存儲為多波段圖像文件。
2. —種在權利要求1所生成多波段圖像文件基礎上實現的海量點云數據實時可 視化方法,其特征在于包括有以下步驟,步驟2.1,通過讀取全部多波段圖像文件中分別記錄的最小外包圍盒信息,計算全部點云數據的最小外包圍盒;根據全部點云數據的最小外包圍盒計算初始視 點位置;步驟2.2,提取多波段圖像文件中的圖像金字塔,根據實際掃描的點距、屏幕分 辨率以及重采樣參數,計算圖像金字塔中各層圖像的距離作用范圍; 步驟2.3,根據初始視點位置到全部點云數據的最小外包圍盒中心點的距離,對 照圖像金字塔中各層圖像的距離作用范圍,選擇圖像金字塔中的層級,加載相 應細節層次模型層級的點云數據,并將已加載的點云數據進行渲染;當視點移 動時,按照圖像金字塔中各層圖像的距離作用范圍切換對應細節層次模型層級 的點云數據,并執行實時渲染。
全文摘要
海量點云數據存儲方法,包括將點云數據文件連續分段并依次映射到進程虛擬地址空間;解析點云數據并在內存中進行存儲,計算點云數據的最小外包圍盒;當內存中的點云數據超出剩余內存容量時存儲為多波段圖像文件;對多波段圖像進行多級重采樣,構建圖像金字塔;重復以上步驟至點云數據文件被全部存儲為多波段圖像。海量點云數據實時可視化方法,包括讀取全部多波段圖像并計算全部點云數據的最小外包圍盒,根據視點到該最小外包圍盒中心點距離,選擇圖像金字塔中合適的層級進行數據加載,并將已加載的點云數據進行渲染;當視點移動時,按照圖像金字塔中各層圖像的距離作用范圍及其對應的LOD層級進行數據切換,并執行實時渲染。
文檔編號G06F17/30GK101615191SQ20091006337
公開日2009年12月30日 申請日期2009年7月28日 優先權日2009年7月28日
發明者張葉廷, 慶 朱, 李俏雄, 杜志強 申請人:武漢大學