亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種基于四叉樹索引的海量激光掃描點(diǎn)云實(shí)時繪制方法

文檔序號:5876045閱讀:254來源:國知局
專利名稱:一種基于四叉樹索引的海量激光掃描點(diǎn)云實(shí)時繪制方法
技術(shù)領(lǐng)域
本發(fā)明涉及海量激光掃描點(diǎn)云數(shù)據(jù)繪制技術(shù),尤其是建立高效四叉樹索引,并基 于該索引結(jié)構(gòu)的海量激光掃描點(diǎn)云實(shí)時繪制方法。
背景技術(shù)
機(jī)載激光掃描(Light Detection And Ranging以下簡稱LiDAR)是集激光測距、 全球定位以及慣性導(dǎo)航技術(shù)于一體的新型空間測量技術(shù)。該技術(shù)能夠快速獲取探測目標(biāo)高 精度的三維坐標(biāo),具有廣泛的應(yīng)用前景。當(dāng)前LiDAR掃描頻率已普遍達(dá)到IOOKHz以上,每 次飛行采集的數(shù)據(jù)量非常巨大。由于計算機(jī)內(nèi)存大小以及顯卡渲染速度的制約,對于海量 點(diǎn)云數(shù)據(jù)的可視化還是一個非常復(fù)雜、有待解決的問題。為了實(shí)現(xiàn)海量LiDAR點(diǎn)云的實(shí)時 顯示和動態(tài)漫游,研究LiDAR點(diǎn)云的索引組織方式,以及實(shí)時繪制方法具有重要的意義和 價值。目前對于激光點(diǎn)云的繪制,在實(shí)際應(yīng)用中常采用抽稀的方式進(jìn)行處理。例如 TerraScan和PointVue LE等軟件,都需要設(shè)定最大繪制點(diǎn)數(shù),以此來對點(diǎn)云進(jìn)行抽稀,僅 對抽稀后的點(diǎn)進(jìn)行繪制。這種方法實(shí)現(xiàn)簡單,不需要對數(shù)據(jù)進(jìn)行預(yù)處理,但并沒有真正解決 海量點(diǎn)云實(shí)時繪制的問題。LiDAR點(diǎn)云在數(shù)據(jù)量增大的同時,也提供了更多的細(xì)節(jié)信息,采 用抽稀顯示的處理方法,為了保證顯示的流暢性,必須隨著點(diǎn)云數(shù)據(jù)量的增加提高抽稀比 例,這樣必定會造成細(xì)節(jié)信息的丟失,在進(jìn)行放大顯示時,丟失細(xì)節(jié)的現(xiàn)象就更為明顯。為了實(shí)現(xiàn)海量LiDAR點(diǎn)云的高效繪制,需要在繪制時采用可見性剔除和層次細(xì)節(jié) (Level Of Detail以下縮寫為L0D)技術(shù)。LiDAR點(diǎn)云是非結(jié)構(gòu)化的離散點(diǎn)云,分布不均勻, 要實(shí)現(xiàn)LiDAR點(diǎn)云的快速可視性剔除和L0D,必須對點(diǎn)云建立索引。支曉棟等在論文《基于 改進(jìn)四叉樹的LiDAR點(diǎn)云數(shù)據(jù)組織研究》中采用四叉樹來建立點(diǎn)云索引,并對索引方法和 索引效率進(jìn)行了分析,但沒有在此基礎(chǔ)上進(jìn)一步解決海量LiDAR點(diǎn)云的繪制問題,黃先鋒 等在論文《機(jī)載激光雷達(dá)點(diǎn)云數(shù)據(jù)的實(shí)時渲染》中提出一種順序四叉樹的索引結(jié)構(gòu),利用四 叉樹的每一層節(jié)點(diǎn)來存儲點(diǎn)云,并將點(diǎn)云數(shù)據(jù)順序組織,以方便的將點(diǎn)云數(shù)據(jù)整塊加載到 圖形處理器(Graphic Processing Unit以下縮寫為GPU)中進(jìn)行繪制。但該方法不是將點(diǎn) 云數(shù)據(jù)全部存儲在四叉樹的葉子節(jié)點(diǎn)上,在進(jìn)行數(shù)據(jù)裁剪時,為了保證獲得完整的裁剪數(shù) 據(jù),必須將落入裁剪框的四叉樹節(jié)點(diǎn)從根節(jié)點(diǎn)開始逐層向下全部裁剪出來,這種方式會造 成大量的數(shù)據(jù)冗余,當(dāng)裁剪框減小時,裁剪效率下降得更加明顯。Rusinkiewicz等在論文 《QSplat :AMultiresolution Point Rendering System for Large Meshes》中運(yùn)用點(diǎn)模型 來表達(dá)復(fù)雜的幾何體,并開發(fā)出了 QSplat (軟件名稱)的點(diǎn)繪制技術(shù)。但他們所采用的點(diǎn) 模型實(shí)際上是小的面片,通過考慮面片的遮擋關(guān)系來實(shí)現(xiàn)點(diǎn)模型的約簡,且其建立的索引 也不適合處理LiDAR點(diǎn)云。

發(fā)明內(nèi)容
本發(fā)明的目的在于針對目前LiDAR點(diǎn)云數(shù)據(jù)量巨大的特點(diǎn),提出了一種點(diǎn)云四
5叉樹索引快速建立方法,并基于該索引結(jié)構(gòu)實(shí)現(xiàn)海量點(diǎn)云的實(shí)時高質(zhì)量繪制。本發(fā)明所采用的技術(shù)方案是一種基于四叉樹索引的海量機(jī)載激光掃描點(diǎn)云實(shí)時 繪制方法,包括以下步驟步驟1,對原始的激光點(diǎn)云數(shù)據(jù)建立四叉樹索引,具體包括以下步驟,步驟1. 1,根據(jù)激光點(diǎn)云數(shù)據(jù)包圍盒范圍和總點(diǎn)數(shù),計算激光點(diǎn)云數(shù)據(jù)的平均點(diǎn)密 度;所述激光點(diǎn)云數(shù)據(jù)包圍盒范圍采用激光點(diǎn)云數(shù)據(jù)的包圍盒的長度length和寬度width 標(biāo)記,總點(diǎn)數(shù)記為ptNum,激光點(diǎn)云數(shù)據(jù)的平均點(diǎn)密度density按公式(1)算得; 步驟1. 2,根據(jù)激光點(diǎn)云數(shù)據(jù)包圍盒的長度length、寬度width以及步驟1. 1所得 平均點(diǎn)密度density,計算激光點(diǎn)云數(shù)據(jù)分塊的長度1和寬度w,以及四叉樹深度cbpth其 中 IXwXdensity ^ max_ptNum(3)即預(yù)先設(shè)定閾值maX_ptNum,每一個激光點(diǎn)云數(shù)據(jù)分塊中的激光點(diǎn)總點(diǎn)數(shù) IXwXdensity 不能超過閾值 max_ptNum ;步驟1. 3,利用步驟1. 2所得激光點(diǎn)云數(shù)據(jù)分塊的長度1和寬度w對激光點(diǎn)云數(shù)據(jù) 進(jìn)行網(wǎng)格分塊,得到多個激光點(diǎn)云數(shù)據(jù)分塊;所述網(wǎng)絡(luò)分塊的實(shí)現(xiàn)方式為,設(shè)激光點(diǎn)云數(shù)據(jù)中某個激光點(diǎn)的坐標(biāo)為(x,y,z),整 個激光點(diǎn)云數(shù)據(jù)的包圍盒左下角坐標(biāo)為(bbmin_x,bbmin_y),則根據(jù)公式(4)計算出每個 激光點(diǎn)所屬的分塊號,其中col_No為分塊的列號,row_No為分塊的行號,col_No = (x-bbmin_x)/wrow_No = (y-bbmin_y)/1(4)步驟1. 4,首先,根據(jù)步驟1. 2所得四叉樹深度cbpth建立四叉樹索引,將每一個 激光點(diǎn)云數(shù)據(jù)分塊對應(yīng)四叉樹最底層的一個葉節(jié)點(diǎn),葉節(jié)點(diǎn)的指針指向?qū)?yīng)激光點(diǎn)云數(shù)據(jù) 分塊所含激光點(diǎn)的真實(shí)存儲位置;每個激光點(diǎn)云數(shù)據(jù)分塊都是一個長度為1、寬度為w的矩 形,計算出矩形的外接圓圓心(cell_x,cell_y)和半徑cell_r分別作為對應(yīng)葉子節(jié)點(diǎn)的圓 心和半徑,并將激光點(diǎn)云分塊中的點(diǎn)數(shù)Cell_ptNum記入相應(yīng)葉子節(jié)點(diǎn)中;從最底層的葉子 節(jié)點(diǎn)開始逐層向上建立父節(jié)點(diǎn),直到四叉樹的根節(jié)點(diǎn)時完成四叉樹的建立;每個父節(jié)點(diǎn)所 對應(yīng)圓的圓心和半徑是其所有子節(jié)點(diǎn)的外接圓圓心和半徑,所包含的激光點(diǎn)數(shù)是其子節(jié)點(diǎn) 中的激光點(diǎn)數(shù)之和;步驟1. 5,將步驟1. 4中建立的四叉樹索引補(bǔ)充為一棵完全的四叉樹,將四叉樹中 不包含激光點(diǎn)云數(shù)據(jù)的節(jié)點(diǎn)標(biāo)記為dummy ;步驟2,利用步驟1所得四叉樹索引對激光點(diǎn)云數(shù)據(jù)進(jìn)行繪制,具體包括以下步 驟,步驟2. 1,利用四叉樹索引實(shí)現(xiàn)對激光點(diǎn)云數(shù)據(jù)的快速視場裁剪,實(shí)現(xiàn)方式為在進(jìn)行點(diǎn)云數(shù)據(jù)繪制時,只對落入顯示區(qū)域內(nèi)的激光點(diǎn)云數(shù)據(jù)進(jìn)行繪制,即利用顯示區(qū)域的 包圍盒對四叉樹索引進(jìn)行裁剪,裁剪方法是用四叉樹中節(jié)點(diǎn)的圓心和半徑構(gòu)成的圓與裁剪 框進(jìn)行相交判斷,如果圓在裁剪框內(nèi)或與裁剪框相交,則表示該節(jié)點(diǎn)所包含的激光點(diǎn)數(shù)據(jù) 全部或部分位于顯示區(qū)域內(nèi);如果圓在裁剪框外,則表示該節(jié)點(diǎn)包含的激光點(diǎn)數(shù)據(jù)在顯示 區(qū)域外;裁剪時從根節(jié)點(diǎn)開始,如果節(jié)點(diǎn)標(biāo)記為dummy或節(jié)點(diǎn)在裁剪框外,則直接跳過該節(jié) 點(diǎn);如果節(jié)點(diǎn)在裁剪框內(nèi),則繼續(xù)對該節(jié)點(diǎn)的子節(jié)點(diǎn)進(jìn)行裁剪直到最底層的葉節(jié)點(diǎn),得到落 入裁剪框的所有節(jié)點(diǎn);步驟2. 2,在繪制細(xì)節(jié)控制下對步驟2. 1所得剪裁結(jié)果進(jìn)行實(shí)時繪制,實(shí)現(xiàn)方式如 下,首先,根據(jù)葉節(jié)點(diǎn)的半徑cell_r,按公式(5)計算出葉節(jié)點(diǎn)投影到屏幕上的半徑Rscreen = eell_r X scale(6)其中,scale為投影轉(zhuǎn)換的尺度參數(shù),由當(dāng)前裁剪框范圍與在屏幕上的顯示窗口大 小計算得到;設(shè)裁剪框的長度為clipping_len,顯示窗口長度為viewportjen,按公式(7) 計算scale,scale = viewport_len/clipping_len(8)然后,根據(jù)裁剪得到的葉節(jié)點(diǎn)得到對應(yīng)的激光點(diǎn)云數(shù)據(jù)分塊,采用視覺感知驅(qū)動 的最優(yōu)細(xì)節(jié)層次自動確定方法,計算出每個點(diǎn)云分塊應(yīng)繪制激光點(diǎn)總數(shù)draw_nUm,實(shí)現(xiàn)方 法為,設(shè)在屏幕上繪制的最小目標(biāo)半徑為miruradius,min_radius根據(jù)具體顯示分辨率設(shè) 置,按公式(9)計算出為達(dá)到最優(yōu)繪制細(xì)節(jié)層次,每個分塊應(yīng)繪制激光點(diǎn)總數(shù)draw_nUm,draw—num = Rscreen/min—radius(10)最后,逐塊繪制與裁剪得到的葉節(jié)點(diǎn)對應(yīng)的激光點(diǎn)云數(shù)據(jù)分塊,如果當(dāng)前繪制的 激光點(diǎn)云數(shù)據(jù)分塊的應(yīng)繪制激光點(diǎn)數(shù)draw_nUm大于激光點(diǎn)云數(shù)據(jù)分塊中的總點(diǎn)數(shù),則繪 制該激光點(diǎn)云數(shù)據(jù)分塊中全部的激光點(diǎn);如果應(yīng)繪制激光點(diǎn)總數(shù)draw_nUm小于激光點(diǎn)云 數(shù)據(jù)分塊中的總點(diǎn)數(shù),則隨機(jī)提取該激光點(diǎn)云數(shù)據(jù)分塊中draw_nUm個激光點(diǎn)進(jìn)行繪制,繪 制方式為遍歷提取激光點(diǎn)云數(shù)據(jù)分塊中的點(diǎn),然后判斷該點(diǎn)是否在裁剪框內(nèi),如果在就繪 制該點(diǎn),直到已繪制的點(diǎn)數(shù)達(dá)到應(yīng)繪制激光點(diǎn)數(shù)draw_nUm或者該激光點(diǎn)云數(shù)據(jù)分塊中的 全部點(diǎn)遍歷完。而且,在步驟1.5建立完整的四叉樹之后,為四叉樹的所有節(jié)點(diǎn)編寫索引號后進(jìn) 行序列化,即將步驟1. 5中所得四叉樹中的節(jié)點(diǎn)按照節(jié)點(diǎn)索引號順序存儲到文件中,形成 線性四叉樹;在步驟2. 2提取激光點(diǎn)云數(shù)據(jù)分塊中激光點(diǎn)進(jìn)行繪制時,用索引號計算出相 應(yīng)葉節(jié)點(diǎn)在文件中的位置,從而直接提取激光點(diǎn)云數(shù)據(jù)分塊中激光點(diǎn)。而且,由于四叉樹中的每個父節(jié)點(diǎn)都具有四個子節(jié)點(diǎn),設(shè)四個子節(jié)點(diǎn)將父節(jié)點(diǎn)所 覆蓋的空間劃分為四個象限,根據(jù)象限實(shí)現(xiàn)編寫索引號,實(shí)現(xiàn)過程如下,設(shè)定四叉樹中的某個節(jié)點(diǎn)的索引號celljdx,其父節(jié)點(diǎn)索引號parentjdx,該節(jié) 點(diǎn)所在其父節(jié)點(diǎn)的象限號quadrant通過比較該節(jié)點(diǎn)的圓心位置(cell_x,cell_y)與父節(jié) 點(diǎn)的圓心位置(parent),parent_y)來計算,計算方法見(11);該節(jié)點(diǎn)的索引號cell_idx 根據(jù)父節(jié)點(diǎn)索引號parentjdx及所在父節(jié)點(diǎn)的象限號quadrant計算得到,計算方法見公 式(12);將四叉樹的根節(jié)點(diǎn)的編號設(shè)為0,自根節(jié)點(diǎn)開始,逐層向下計算各個節(jié)點(diǎn)的索引
7號; cell_idx = 4 X par ent_i dx+quadrant
(14)。而且,在步驟2中,通過漸進(jìn)繪制技術(shù)和渲染時間控制,實(shí)現(xiàn)海量點(diǎn)云數(shù)據(jù)的實(shí)時 交互;所述漸進(jìn)式繪制技術(shù),是最初繪制點(diǎn)云數(shù)據(jù)的粗略概況,然后逐漸精化;并利用雙 緩沖繪制方法,每次繪制都先繪制到后備緩沖上,然后進(jìn)行前后緩沖的交換,以避免在繪制 過程中出現(xiàn)抖動現(xiàn)象;所述渲染時間控制,是通過一個監(jiān)控器來監(jiān)控當(dāng)前外部輸入事件,當(dāng)無交互請求 時,則分配一段時間給渲染器進(jìn)行點(diǎn)云繪制,當(dāng)收到用戶交互請求時,則將渲染器掛起,保 證優(yōu)先響應(yīng)用戶請求。本發(fā)明通過對點(diǎn)云數(shù)據(jù)建立四叉樹索引,可以提高數(shù)據(jù)查找速度。在此基礎(chǔ)上,還 提出對四叉樹索引采用線性化存儲,能夠保證在進(jìn)行數(shù)據(jù)查找時按一個方向順序遍歷,避 免了來回查找造成數(shù)據(jù)交換上的“顛簸”現(xiàn)象;利用視覺感知驅(qū)動來自動確定繪制的細(xì)節(jié)程 度,實(shí)現(xiàn)了繪制效果和繪制速度的平衡;利用渲染時間控制和漸進(jìn)式繪制方法,實(shí)現(xiàn)了海量 數(shù)據(jù)的實(shí)時繪制和用戶操作的及時響應(yīng)。


圖1為本發(fā)明實(shí)施例的LiDAR點(diǎn)云數(shù)據(jù)示意圖;圖2為本發(fā)明實(shí)施例的LiDAR點(diǎn)云數(shù)據(jù)分塊示意圖;圖3為本發(fā)明實(shí)施例的LiDAR點(diǎn)云分塊編號示意圖;圖4為本發(fā)明實(shí)施例的點(diǎn)云四叉樹索引示意圖;圖5為本發(fā)明實(shí)施例的序列化后的線性四叉樹示意圖;圖6為本發(fā)明實(shí)施例中利用裁剪框?qū)す恻c(diǎn)云裁剪的示意圖;圖7為本發(fā)明實(shí)施例中四叉樹裁剪得到的節(jié)點(diǎn)示意圖;圖8為本發(fā)明實(shí)施例中基于渲染時間控制的點(diǎn)云繪制流程圖。
具體實(shí)施例方式下面通過實(shí)施例,并結(jié)合附圖,對本發(fā)明的技術(shù)方案作進(jìn)一步具體的說明。實(shí)施例所提供的一種基于四叉樹索引的海量LiDAR點(diǎn)云實(shí)時繪制方法,流程如 下步驟1.對LiDAR點(diǎn)云數(shù)據(jù)建立四叉樹索引,并對四叉樹索引進(jìn)行序列化,具體包 括以下步驟,步驟1. 1,圖1為LiDAR點(diǎn)云數(shù)據(jù)示意圖,每個黑點(diǎn)代表一個激光點(diǎn)。根據(jù)激光點(diǎn) 云數(shù)據(jù)包圍盒范圍和總點(diǎn)數(shù),計算激光點(diǎn)云數(shù)據(jù)的平均點(diǎn)密度density ;所述激光點(diǎn)云數(shù) 據(jù)包圍盒范圍采用激光點(diǎn)云數(shù)據(jù)的包圍盒的長度length和寬度width標(biāo)記,總點(diǎn)數(shù)記為
8ptNum。計算方法見公式(1)。density = -~Pt^um(15)
length χ width步驟1. 2,根據(jù)激光點(diǎn)云數(shù)據(jù)包圍盒的長度length、寬度width以及步驟1. 1所得 平均點(diǎn)密度density,計算激光點(diǎn)云數(shù)據(jù)分塊的長度1和寬度w,以及四叉樹深度d印th。計 算方法見公式(2),(3)。卜—榮m
Γ πwidthIXwXdensity ^ max_ptNum(17)步驟1. 3,利用步驟1. 2所得激光點(diǎn)云數(shù)據(jù)分塊的長度1和寬度w對激光點(diǎn)云數(shù)據(jù) 進(jìn)行網(wǎng)格分塊,得到多個激光點(diǎn)云數(shù)據(jù)分塊。激光點(diǎn)云分塊的大小和四叉樹索引深度是一組矛盾參數(shù),要想提數(shù)據(jù)查找效率, 需要使數(shù)據(jù)分塊盡可能小,以減少在一個分塊中的激光點(diǎn)數(shù),這樣可以使得在步驟2. 2中 一個分塊中進(jìn)行比較判斷某激光點(diǎn)是否在裁剪框內(nèi)的次數(shù)降低;但隨著分塊的減小,會導(dǎo) 致四叉樹的深度增大,這樣增加了遍歷四叉樹的時間。因此在建立四叉樹索引時,需要在分 塊大小和樹的深度之間進(jìn)行權(quán)衡。在實(shí)際處理中,可以將分塊中的最大點(diǎn)數(shù)設(shè)為64-512之 間,計算出四叉樹深度和分塊大小。如果分塊深度超過12,則將四叉樹深度設(shè)為12,并重新 計算分塊的長度和寬度。如圖2,實(shí)施例采用公式(4)對點(diǎn)云進(jìn)行分塊。得到一個4*4的網(wǎng)格,四叉樹深度 為2。col_No = (x-bbmin_x)/w(18)row_No = (y-bbmin_y)/1步驟1. 4,根據(jù)步驟1. 2所得四叉樹深度cbpth建立四叉樹索引,將每一個激光點(diǎn) 云數(shù)據(jù)分塊對應(yīng)四叉樹最底層的一個葉子節(jié)點(diǎn),葉子節(jié)點(diǎn)的指針指向?qū)?yīng)激光點(diǎn)云數(shù)據(jù)分 塊所含激光點(diǎn)的真實(shí)存儲位置。每個激光點(diǎn)云數(shù)據(jù)分塊都是一個長度為1、寬度為w的矩形,計算出矩形的外接圓 圓心(cell_x,cell_y)和半徑cell_r分別作為對應(yīng)葉子節(jié)點(diǎn)的圓心和半徑,并將激光點(diǎn)云 分塊中的點(diǎn)數(shù)Cell_ptNum記入相應(yīng)葉子節(jié)點(diǎn)中;從最底層的葉子節(jié)點(diǎn)開始逐層向上建立 父節(jié)點(diǎn),直到四叉樹的根節(jié)點(diǎn)時完成四叉樹的建立;每個父節(jié)點(diǎn)所對應(yīng)圓的圓心和半徑是 其所有子節(jié)點(diǎn)的外接圓圓心和半徑,所包含的激光點(diǎn)數(shù)是其子節(jié)點(diǎn)中的激光點(diǎn)數(shù)之和。步驟1. 5,將步驟1. 4中建立的四叉樹索引補(bǔ)充為一棵完全的四叉樹,將四叉樹中 不包含激光點(diǎn)云數(shù)據(jù)的節(jié)點(diǎn)標(biāo)記為dummy。圖4是對圖3中的LiDAR點(diǎn)云數(shù)據(jù)建立的四叉 樹索弓丨,不存在數(shù)據(jù)的du_y節(jié)點(diǎn)就有10、17、19、20。由于激光點(diǎn)云的分布不規(guī)則,數(shù)據(jù)中通常還存在空洞,會造成建立的四叉樹不是 一棵完全四叉樹。具體實(shí)施時,將四叉樹索引補(bǔ)充成完全四叉樹的實(shí)現(xiàn)方式可以為,對四叉 樹進(jìn)行層序遍歷,如果當(dāng)前遍歷的節(jié)點(diǎn)不是葉節(jié)點(diǎn),則判斷當(dāng)前節(jié)點(diǎn)的四個子節(jié)點(diǎn)是否存 在,如果不存在則插入節(jié)點(diǎn)并將插入的節(jié)點(diǎn)標(biāo)記為dummy ;如果當(dāng)前遍歷的節(jié)點(diǎn)是葉節(jié)點(diǎn),
9則停止遍歷。為了能夠?qū)λ牟鏄渌饕捎镁€性化存儲,在步驟1.5建立完整的四叉樹之后,可 以為四叉樹的所有節(jié)點(diǎn)編寫索引號后進(jìn)行序列化,即將步驟1. 5中所得四叉樹中的節(jié)點(diǎn)按 照節(jié)點(diǎn)索引號順序存儲到文件中,形成線性四叉樹;在步驟2. 2提取激光點(diǎn)云數(shù)據(jù)分塊中 激光點(diǎn)進(jìn)行繪制時,用索引號計算出相應(yīng)葉節(jié)點(diǎn)在文件中的位置,從而直接提取激光點(diǎn)云 數(shù)據(jù)分塊中激光點(diǎn)。將四叉樹的節(jié)點(diǎn)在文件中是按序號順序排列的,查找時可以根據(jù)節(jié)點(diǎn) 序號確定節(jié)點(diǎn)在文件中的位置,順序排列的節(jié)點(diǎn)保證了在文件中按一個方向順序查找。因 為葉節(jié)點(diǎn)的指針指向?qū)?yīng)激光點(diǎn)云數(shù)據(jù)分塊所含激光點(diǎn)的真實(shí)存儲位置,如果查找到葉節(jié) 點(diǎn),就可以直接得到葉節(jié)點(diǎn)對應(yīng)激光點(diǎn)云數(shù)據(jù)分塊所含激光點(diǎn)在文件中的位置。可以提高 繪制時,提取激光點(diǎn)數(shù)據(jù)的效率。由于四叉樹中的每個父節(jié)點(diǎn)都具有四個子節(jié)點(diǎn),設(shè)四個子節(jié)點(diǎn)將父節(jié)點(diǎn)所覆蓋的 空間劃分為四個象限。對每個象限按一定方式進(jìn)行編號,即可根據(jù)子節(jié)點(diǎn)在父節(jié)點(diǎn)覆蓋的 空間中的位置唯一確定其編號。實(shí)施例根據(jù)象限實(shí)現(xiàn)編號的實(shí)現(xiàn)過程如下,設(shè)定四叉樹中的某個節(jié)點(diǎn)的索引號celljdx,其父節(jié)點(diǎn)索引號parentjdx,該節(jié) 點(diǎn)所在其父節(jié)點(diǎn)的象限號quadrant通過比較該節(jié)點(diǎn)的圓心位置(cell_x,cell_y)與父節(jié) 點(diǎn)的圓心位置(parent),parent_y)來計算,計算方法見(19);該節(jié)點(diǎn)的索引號celljdx 根據(jù)父節(jié)點(diǎn)索引號parentjdx及所在父節(jié)點(diǎn)的象限號quadrant計算得到,計算方法見公 式(20);將四叉樹的根節(jié)點(diǎn)的編號設(shè)為0,自根節(jié)點(diǎn)開始,逐層向下計算各個節(jié)點(diǎn)的索引 號。實(shí)施例根據(jù)步驟1. 2中計算出的四叉樹深度為2,按照公式(21),(22)計算出每 一個葉子節(jié)點(diǎn)的編號,如圖3中,將節(jié)點(diǎn)編號標(biāo)注在每個點(diǎn)云分塊上,可見節(jié)點(diǎn)編號按象限 分成四組5、6、7、8,9、10、11、12,13、14、15、16,17、18、19、20,各組內(nèi)又按象限進(jìn)行分布。
圖5為圖4中的四叉樹對應(yīng)的線性四叉樹,其中0是根節(jié)點(diǎn),1、2、3、4是根節(jié)點(diǎn)下 一層的節(jié)點(diǎn),5、6、7…20是最底層的葉子節(jié)點(diǎn),其中不存在數(shù)據(jù)的dummy節(jié)點(diǎn)是10、17、19、 20。步驟2,利用步驟1所得四叉樹索引對激光點(diǎn)云數(shù)據(jù)進(jìn)行繪制,具體包括以下步 驟步驟2. 1,利用四叉樹索引實(shí)現(xiàn)對激光點(diǎn)云數(shù)據(jù)的快速視場裁剪,實(shí)現(xiàn)方式為在進(jìn) 行點(diǎn)云數(shù)據(jù)繪制時,只對落入顯示區(qū)域內(nèi)的激光點(diǎn)云數(shù)據(jù)進(jìn)行繪制,即利用顯示區(qū)域的包 圍盒對四叉樹索引進(jìn)行裁剪,裁剪方法是用四叉樹中節(jié)點(diǎn)的圓心和半徑構(gòu)成的圓與裁剪框 進(jìn)行相交判斷,如果圓在裁剪框內(nèi)或與裁剪框相交,則表示該節(jié)點(diǎn)所包含的激光點(diǎn)數(shù)據(jù)全 部或部分位于顯示區(qū)域內(nèi);如果圓在裁剪框外,則表示該節(jié)點(diǎn)包含的激光點(diǎn)數(shù)據(jù)在顯示區(qū) 域外。如圖6中,實(shí)施例用裁剪框?qū)す恻c(diǎn)云進(jìn)行裁剪,從四叉樹的根節(jié)點(diǎn)開始遍歷,以 quadrant =
(23)
10當(dāng)前節(jié)點(diǎn)的圓心和半徑構(gòu)成的圓與裁剪框進(jìn)行相交判斷,如果圓與裁剪框相交,則繼續(xù)對 該節(jié)點(diǎn)的所有子節(jié)點(diǎn)進(jìn)行裁剪。最終的裁剪結(jié)果見附圖7,裁剪出的節(jié)點(diǎn)編號為0、2、3、11、 12、13、14,其中包含激光點(diǎn)數(shù)據(jù)的葉子節(jié)點(diǎn)編號為11、12、13、14。裁剪時從根節(jié)點(diǎn)開始,如果節(jié)點(diǎn)標(biāo)記為dummy或節(jié)點(diǎn)在裁剪框外,則直接跳過該 節(jié)點(diǎn);如果節(jié)點(diǎn)在裁剪框內(nèi),則繼續(xù)對該節(jié)點(diǎn)的子節(jié)點(diǎn)進(jìn)行裁剪直到最底層的葉節(jié)點(diǎn),得到 落入裁剪框的所有節(jié)點(diǎn)。為了提高效率,可以先判斷當(dāng)前遍歷到的節(jié)點(diǎn)標(biāo)記是否為dummy。 若當(dāng)前遍歷到的節(jié)點(diǎn)標(biāo)記是dummy,表明該節(jié)點(diǎn)中不含有激光點(diǎn)數(shù)據(jù),該節(jié)點(diǎn)直接跳過,不 進(jìn)行裁剪;若當(dāng)前遍歷到的節(jié)點(diǎn)標(biāo)記不是dummy,才以該節(jié)點(diǎn)的圓心和半徑構(gòu)成的圓與裁 剪框進(jìn)行相交判斷。步驟2. 2,在繪制細(xì)節(jié)控制下對步驟2. 1所得剪裁結(jié)果進(jìn)行實(shí)時繪制,實(shí)現(xiàn)方式如 下,首先,根據(jù)葉節(jié)點(diǎn)的半徑cell_r,按公式(25)計算出葉節(jié)點(diǎn)投影到屏幕上的半徑
screen'Rscreen = eell_r X scale(26)其中,scale為投影轉(zhuǎn)換的尺度參數(shù),由當(dāng)前裁剪框范圍與在屏幕上的顯示窗口 大小計算得到;設(shè)裁剪框的長度為clipping_len,顯示窗口長度為viewportjen,按公式 (27)計算 scale,scale = viewport_len/clipping_len(28)然后,根據(jù)裁剪得到的葉節(jié)點(diǎn)得到對應(yīng)的激光點(diǎn)云數(shù)據(jù)分塊,采用視覺感知驅(qū)動 的最優(yōu)細(xì)節(jié)層次自動確定方法,計算出每個點(diǎn)云分塊應(yīng)繪制激光點(diǎn)總數(shù)draw_nUm,實(shí)現(xiàn)方 法為,設(shè)在屏幕上繪制的最小目標(biāo)半徑為miruradius,min_radius根據(jù)具體顯示分辨率設(shè) 置,按公式(29)計算出為達(dá)到最優(yōu)繪制細(xì)節(jié)層次,每個分塊應(yīng)繪制激光點(diǎn)總數(shù)draw_nUm,draw—num = Rscreen/min—radius(30)最后,逐塊繪制與裁剪得到的葉節(jié)點(diǎn)對應(yīng)的激光點(diǎn)云數(shù)據(jù)分塊,如果當(dāng)前繪制的 激光點(diǎn)云數(shù)據(jù)分塊的應(yīng)繪制激光點(diǎn)數(shù)draw_nUm大于激光點(diǎn)云數(shù)據(jù)分塊中的總點(diǎn)數(shù),則繪 制該激光點(diǎn)云數(shù)據(jù)分塊中全部的激光點(diǎn);如果應(yīng)繪制激光點(diǎn)總數(shù)draw_nUm小于激光點(diǎn)云 數(shù)據(jù)分塊中的總點(diǎn)數(shù),則隨機(jī)提取該激光點(diǎn)云數(shù)據(jù)分塊中draw_nUm個激光點(diǎn)進(jìn)行繪制,繪 制方式為遍歷提取激光點(diǎn)云數(shù)據(jù)分塊中的點(diǎn),然后判斷該點(diǎn)是否在裁剪框內(nèi),如果在就繪 制該點(diǎn),直到已繪制的點(diǎn)數(shù)達(dá)到應(yīng)繪制激光點(diǎn)數(shù)draw_nUm或者該激光點(diǎn)云數(shù)據(jù)分塊中的 全部點(diǎn)遍歷完。實(shí)施例將目視可區(qū)分的最小目標(biāo)半徑設(shè)置為1個像素,利用公式(31)、(32)、(33) 計算每個裁剪得到的激光點(diǎn)云數(shù)據(jù)分塊中需要繪制的激光點(diǎn)數(shù),并進(jìn)行繪制。當(dāng)激光點(diǎn)云 數(shù)據(jù)分塊較小時,可以不遍歷判斷塊中的點(diǎn)是否在裁剪框內(nèi),直接隨機(jī)提取塊中draw_nUm 個激光點(diǎn)進(jìn)行繪制,這樣效率較高。為了實(shí)現(xiàn)海量點(diǎn)云的實(shí)時高質(zhì)量繪制,本發(fā)明實(shí)施例在繪制時采用漸進(jìn)繪制技術(shù) 和渲染時間控制,實(shí)現(xiàn)海量點(diǎn)云數(shù)據(jù)的繪制,并利用外部事件監(jiān)控器來監(jiān)控用戶輸入,優(yōu)先 響應(yīng)用戶操作,保證對海量點(diǎn)云數(shù)據(jù)繪制的同時能夠及時響應(yīng)用戶操作。所述漸進(jìn)式繪制 技術(shù),是最初繪制點(diǎn)云數(shù)據(jù)的粗略概況,然后逐漸精化;并利用雙緩沖繪制方法,每次繪制 都先繪制到后備緩沖上,然后進(jìn)行前后緩沖的交換,以避免在繪制過程中出現(xiàn)抖動現(xiàn)象。漸
11進(jìn)式繪制技術(shù)和雙緩沖繪制方法為現(xiàn)有技術(shù),本發(fā)明不予贅述。所述渲染時間控制,是通過 一個監(jiān)控器來監(jiān)控當(dāng)前外部輸入事件,當(dāng)無交互請求時,則分配一段時間給渲染器進(jìn)行點(diǎn) 云繪制,當(dāng)收到用戶交互請求時,則將渲染器掛起,保證優(yōu)先響應(yīng)用戶請求。圖8給出了實(shí) 施例中基于渲染時間控制的點(diǎn)云繪制流程圖,可供實(shí)施參考當(dāng)發(fā)出渲染請求,請求渲染時 間時,監(jiān)控器判斷是否有用戶交互,無則分配渲染時間,由渲染器執(zhí)行渲染,有則處理交互 請求,然后刪除事件隊列,等待下次判斷。 本發(fā)明中所描述的具體實(shí)施例僅僅是對本發(fā)明精神作舉例說明。本發(fā)明所屬技術(shù) 領(lǐng)域的技術(shù)人員可以對所描述的具體實(shí)施例做各種各樣的修改或補(bǔ)充或采用類似的方式 替代,但并不會偏離本發(fā)明的精神或者超越所附權(quán)利要求書所定義的范圍。
權(quán)利要求
一種基于四叉樹索引的海量機(jī)載激光掃描點(diǎn)云實(shí)時繪制方法,其特征在于,包括以下步驟步驟1,對原始的激光點(diǎn)云數(shù)據(jù)建立四叉樹索引,具體包括以下步驟,步驟1.1,根據(jù)激光點(diǎn)云數(shù)據(jù)包圍盒范圍和總點(diǎn)數(shù),計算激光點(diǎn)云數(shù)據(jù)的平均點(diǎn)密度;所述激光點(diǎn)云數(shù)據(jù)包圍盒范圍采用激光點(diǎn)云數(shù)據(jù)的包圍盒的長度length和寬度width標(biāo)記,總點(diǎn)數(shù)記為ptNum,激光點(diǎn)云數(shù)據(jù)的平均點(diǎn)密度density按公式(1)算得; <mrow><mi>density</mi><mo>=</mo><mfrac> <mi>ptNum</mi> <mrow><mi>length</mi><mo>&times;</mo><mi>width</mi> </mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo></mrow> </mrow>步驟1.2,根據(jù)激光點(diǎn)云數(shù)據(jù)包圍盒的長度length、寬度width以及步驟1.1所得平均點(diǎn)密度density,計算激光點(diǎn)云數(shù)據(jù)分塊的長度l和寬度w,以及四叉樹深度depth;其中 <mrow><mi>l</mi><mo>=</mo><mfrac> <mi>height</mi> <msup><mn>2</mn><mi>depth</mi> </msup></mfrac> </mrow>(2) <mrow><mi>w</mi><mo>=</mo><mfrac> <mi>width</mi> <msup><mn>2</mn><mi>depth</mi> </msup></mfrac> </mrow>l×w×density≤max_ptNum(3)即預(yù)先設(shè)定閾值max_ptNum,每一個激光點(diǎn)云數(shù)據(jù)分塊中的激光點(diǎn)總點(diǎn)數(shù)l×w×density不能超過閾值max_ptNum;步驟1.3,利用步驟1.2所得激光點(diǎn)云數(shù)據(jù)分塊的長度l和寬度w對激光點(diǎn)云數(shù)據(jù)進(jìn)行網(wǎng)格分塊,得到多個激光點(diǎn)云數(shù)據(jù)分塊;所述網(wǎng)絡(luò)分塊的實(shí)現(xiàn)方式為,設(shè)激光點(diǎn)云數(shù)據(jù)中某個激光點(diǎn)的坐標(biāo)為(x,y,z),整個激光點(diǎn)云數(shù)據(jù)的包圍盒左下角坐標(biāo)為(bbmin_x,bbmin_y),則根據(jù)公式(4)計算出每個激光點(diǎn)所屬的分塊號,其中col_No為分塊的列號,row_No為分塊的行號,col_No=(x bbmin_x)/w(4)row_No=(y bbmin_y)/l步驟1.4,首先,根據(jù)步驟1.2所得四叉樹深度depth建立四叉樹索引,將每一個激光點(diǎn)云數(shù)據(jù)分塊對應(yīng)四叉樹最底層的一個葉節(jié)點(diǎn),葉節(jié)點(diǎn)的指針指向?qū)?yīng)激光點(diǎn)云數(shù)據(jù)分塊所含激光點(diǎn)的真實(shí)存儲位置;每個激光點(diǎn)云數(shù)據(jù)分塊都是一個長度為l、寬度為w的矩形,計算出矩形的外接圓圓心(cell_x,cell_y)和半徑cell_r分別作為對應(yīng)葉子節(jié)點(diǎn)的圓心和半徑,并 將激光點(diǎn)云分塊中的點(diǎn)數(shù)cell_ptNum記入相應(yīng)葉子節(jié)點(diǎn)中;從最底層的葉子節(jié)點(diǎn)開始逐層向上建立父節(jié)點(diǎn),直到四叉樹的根節(jié)點(diǎn)時完成四叉樹的建立;每個父節(jié)點(diǎn)所對應(yīng)圓的圓心和半徑是其所有子節(jié)點(diǎn)的外接圓圓心和半徑,所包含的激光點(diǎn)數(shù)是其子節(jié)點(diǎn)中的激光點(diǎn)數(shù)之和;步驟1.5,將步驟1.4中建立的四叉樹索引補(bǔ)充為一棵完全的四叉樹,將四叉樹中不包含激光點(diǎn)云數(shù)據(jù)的節(jié)點(diǎn)標(biāo)記為dummy;步驟2,利用步驟1所得四叉樹索引對激光點(diǎn)云數(shù)據(jù)進(jìn)行繪制,具體包括以下步驟,步驟2.1,利用四叉樹索引實(shí)現(xiàn)對激光點(diǎn)云數(shù)據(jù)的快速視場裁剪,實(shí)現(xiàn)方式為在進(jìn)行點(diǎn)云數(shù)據(jù)繪制時,只對落入顯示區(qū)域內(nèi)的激光點(diǎn)云數(shù)據(jù)進(jìn)行繪制,即利用顯示區(qū)域的包圍盒對四叉樹索引進(jìn)行裁剪,裁剪方法是用四叉樹中節(jié)點(diǎn)的圓心和半徑構(gòu)成的圓與裁剪框進(jìn)行相交判斷,如果圓在裁剪框內(nèi)或與裁剪框相交,則表示該節(jié)點(diǎn)所包含的激光點(diǎn)數(shù)據(jù)全部或部分位于顯示區(qū)域內(nèi);如果圓在裁剪框外,則表示該節(jié)點(diǎn)包含的激光點(diǎn)數(shù)據(jù)在顯示區(qū)域外;裁剪時從根節(jié)點(diǎn)開始,如果節(jié)點(diǎn)標(biāo)記為dummy或節(jié)點(diǎn)在裁剪框外,則直接跳過該節(jié)點(diǎn);如果節(jié)點(diǎn)在裁剪框內(nèi),則繼續(xù)對該節(jié)點(diǎn)的子節(jié)點(diǎn)進(jìn)行裁剪直到最底層的葉節(jié)點(diǎn),得到落入裁剪框的所有節(jié)點(diǎn);步驟2.2,在繪制細(xì)節(jié)控制下對步驟2.1所得剪裁結(jié)果進(jìn)行實(shí)時繪制,實(shí)現(xiàn)方式如下,首先,根據(jù)葉節(jié)點(diǎn)的半徑cell_r,按公式(5)計算出葉節(jié)點(diǎn)投影到屏幕上的半徑Rscreen,Rscreen=cell_r×scale(6)其中,scale為投影轉(zhuǎn)換的尺度參數(shù),由當(dāng)前裁剪框范圍與在屏幕上的顯示窗口大小計算得到;設(shè)裁剪框的長度為clipping_len,顯示窗口長度為viewport_len,按公式(7)計算scale,scale=viewport_len/clipping_len (8)然后,根據(jù)裁剪得到的葉節(jié)點(diǎn)得到對應(yīng)的激光點(diǎn)云數(shù)據(jù)分塊,采用視覺感知驅(qū)動的最優(yōu)細(xì)節(jié)層次自動確定方法,計算出每個點(diǎn)云分塊應(yīng)繪制激光點(diǎn)總數(shù)draw_num,實(shí)現(xiàn)方法為,設(shè)在屏幕上繪制的最小目標(biāo)半徑為min_radius,min_radius根據(jù)具體顯示分辨率設(shè)置,按公式(9)計算出為達(dá)到最優(yōu)繪制細(xì)節(jié)層次,每個分塊應(yīng)繪制激光點(diǎn)總數(shù)draw_num,draw_num=Rscreen/min_radius(10)最后,逐塊繪制與裁剪得到的葉節(jié)點(diǎn)對應(yīng)的激光點(diǎn)云數(shù)據(jù)分塊,如果當(dāng)前繪制的激光點(diǎn)云數(shù)據(jù)分塊的應(yīng)繪制激光點(diǎn)數(shù)draw_num大于激光點(diǎn)云數(shù)據(jù)分塊中的總點(diǎn)數(shù),則繪制該激光點(diǎn)云數(shù)據(jù)分塊中全部的激光點(diǎn);如果應(yīng)繪制激光點(diǎn)總數(shù)draw_num小于激光點(diǎn)云數(shù)據(jù)分塊中的總點(diǎn)數(shù),則隨機(jī)提取該激光點(diǎn)云數(shù)據(jù)分塊中draw_num個激光點(diǎn)進(jìn)行繪制,繪制方式為遍歷提取激光點(diǎn)云數(shù)據(jù)分塊中的點(diǎn),然后判斷該點(diǎn)是否在裁剪框內(nèi),如果在就繪制該點(diǎn),直到已繪制的點(diǎn)數(shù)達(dá)到應(yīng)繪制激光點(diǎn)數(shù)draw_num或者該激光點(diǎn)云數(shù)據(jù)分塊中的全部點(diǎn)遍歷完。
2.如權(quán)利要求1所述的海量機(jī)載激光掃描點(diǎn)云實(shí)時繪制方法,其特征在于在步驟1.5 建立完整的四叉樹之后,為四叉樹的所有節(jié)點(diǎn)編寫索引號后進(jìn)行序列化,即將步驟1. 5中 所得四叉樹中的節(jié)點(diǎn)按照節(jié)點(diǎn)索引號順序存儲到文件中,形成線性四叉樹;在步驟2. 2提 取激光點(diǎn)云數(shù)據(jù)分塊中激光點(diǎn)進(jìn)行繪制時,用索引號計算出相應(yīng)葉節(jié)點(diǎn)在文件中的位置, 從而直接提取激光點(diǎn)云數(shù)據(jù)分塊中激光點(diǎn)。
3.如權(quán)利要求2所述的海量機(jī)載激光掃描點(diǎn)云實(shí)時繪制方法,其特征在于由于四叉 樹中的每個父節(jié)點(diǎn)都具有四個子節(jié)點(diǎn),設(shè)四個子節(jié)點(diǎn)將父節(jié)點(diǎn)所覆蓋的空間劃分為四個象 限,根據(jù)象限實(shí)現(xiàn)編寫索引號,實(shí)現(xiàn)過程如下,設(shè)定四叉樹中的某個節(jié)點(diǎn)的索引號celljdx,其父節(jié)點(diǎn)索引號parentjdx,該節(jié)點(diǎn)所 在其父節(jié)點(diǎn)的象限號quadrant通過比較該節(jié)點(diǎn)的圓心位置(cell_x,cell_y)與父節(jié)點(diǎn)的 圓心位置(parent),parent_y)來計算,計算方法見(11);該節(jié)點(diǎn)的索引號cell_idx根 據(jù)父節(jié)點(diǎn)索引號parentjdx及所在父節(jié)點(diǎn)的象限號quadrant計算得到,計算方法見公式 (12);將四叉樹的根節(jié)點(diǎn)的編號設(shè)為0,自根節(jié)點(diǎn)開始,逐層向下計算各個節(jié)點(diǎn)的索引號;
4.如權(quán)利要求1或2或3所述的海量機(jī)載激光掃描點(diǎn)云實(shí)時繪制方法,其特征在于 在步驟2中,通過漸進(jìn)繪制技術(shù)和渲染時間控制,實(shí)現(xiàn)海量點(diǎn)云數(shù)據(jù)的實(shí)時交互;所述漸進(jìn)式繪制技術(shù),是最初繪制點(diǎn)云數(shù)據(jù)的粗略概況,然后逐漸精化;并利用雙緩沖 繪制方法,每次繪制都先繪制到后備緩沖上,然后進(jìn)行前后緩沖的交換,以避免在繪制過程 中出現(xiàn)抖動現(xiàn)象;所述渲染時間控制,是通過一個監(jiān)控器來監(jiān)控當(dāng)前外部輸入事件,當(dāng)無交互請求時,則 分配一段時間給渲染器進(jìn)行點(diǎn)云繪制,當(dāng)收到用戶交互請求時,則將渲染器掛起,保證優(yōu)先 響應(yīng)用戶請求。
全文摘要
本發(fā)明提供了一種基于四叉樹索引的海量機(jī)載激光掃描點(diǎn)云實(shí)時繪制方法,對原始的激光點(diǎn)云數(shù)據(jù)建立四叉樹索引,并對四叉樹索引進(jìn)行序列化,利用建立的四叉樹索引,對海量激光點(diǎn)云進(jìn)行快速視場裁剪,并通過點(diǎn)云繪制時的繪制細(xì)節(jié)控制和繪制時間控制,實(shí)現(xiàn)海量點(diǎn)云的實(shí)時高質(zhì)量繪制。
文檔編號G01S17/06GK101908068SQ20101024513
公開日2010年12月8日 申請日期2010年8月3日 優(yōu)先權(quán)日2010年8月3日
發(fā)明者張靖, 江萬壽, 王建超, 郭大海 申請人:武漢大學(xué);中國國土資源航空物探遙感中心
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1