倪 曙,方源敏,李國柱,陳 杰
(1.昆明市測繪研究院,云南昆明 650051;2.昆明理工大學(xué)國土資源工程學(xué)院,云南昆明 650093)
K-鄰近條件下空間實體三維建模算法研究
倪 曙1,方源敏2,李國柱1,陳 杰2
(1.昆明市測繪研究院,云南昆明 650051;2.昆明理工大學(xué)國土資源工程學(xué)院,云南昆明 650093)
空間形體的三維建模算法是當(dāng)前測繪制圖和GIS領(lǐng)域研究的重點。傳統(tǒng)的建模算法一般以平面作為定義域,實數(shù)空間的子集作為其值域,定義域與值域存在唯一的映射關(guān)系,由此產(chǎn)生的函數(shù)關(guān)系決定了傳統(tǒng)建模算法的二維本質(zhì)。函數(shù)是用數(shù)學(xué)術(shù)語來描述現(xiàn)實世界的主要工具。
傳統(tǒng)的建模算法多以Delaunay三角網(wǎng)、Voronoi圖(又稱Thiessen多邊形)為核心進行擴展,DEM就是其中的典型代表。不管是附加約束條件的DEM[1],還是分段拼接來表達空間形體的建模算法,實際上都在函數(shù)的范圍內(nèi)。前者理論上可以通過一體化的函數(shù)來表示,后者則可以使用分段函數(shù)表示。而對于“懸崖”這樣的地貌,前述算法則無能為力,因為在數(shù)學(xué)上已經(jīng)跨出了函數(shù)的范疇。
針對空間離散點集進行三維建模的算法種類較多,包括雕刻家算法[2]、距離函數(shù)算法[3]、表面生長算法[4]和基于空間閉合投影面的建模算法[5-7]等。在點群密度不均勻或存在噪聲的情況下,容易導(dǎo)致拓?fù)溥B接錯誤;而對于基于空間投影面的建模算法,在投影法線確定的前提下,存在多個點投影于同一點的問題等;通過以各點位投影中心進行切平面投影的算法[8]建模效率較高,但是無形中也會帶來局部變形。
本文從理論出發(fā),研究了一種三維建模算法。在逐點插入的過程中進行實時優(yōu)化,同時采用有效的方法規(guī)避了由于K取值有限所導(dǎo)致的局部“孤立點群”的問題,同時對“同棱點”也作了有效的處理。結(jié)合具體應(yīng)用,如針對地下采空區(qū)進行激光掃描獲取的點云數(shù)據(jù)進行處理時,對點群進行逆向計算求定站心坐標(biāo)作為本算法中的虛擬中心,建模結(jié)果能夠最大化地逼近采空區(qū)的真實形態(tài)。
研究對象及目標(biāo):給定空間離散點集
式中,Pi=(xi,yi,zi),n≥4。當(dāng)且僅當(dāng)n≥4時,4點不共面,對其進行三維建模。
關(guān)于方向的確定,本文遵循右手法則。對于給定的三角形面片,對其法線方向使用右手準(zhǔn)則,相對觀察者而言,如果頂點以逆時針順序排列時,則為該三角形面片的正面;反之則為背面。
如圖1中的三棱錐P4―P1P2P3所示,對于面P1P2P3,v1為其外法線方向,按照右手準(zhǔn)則,正面的頂點環(huán)繞順序如圖中箭頭所示為P1→P2→P3→P1,背面的頂點序則為P3→P2→P1→P3。在本文中,面片的記法按照上述的表述進行(記法中隱含了該面片的法線方向)。
圖1 右手法則
在給定三角形頂點的環(huán)繞順序后,面片的外法線向量也隨之被確定。以圖1中的面片P1P2P3為例,對應(yīng)的外法線向量v1可通過向量之間的叉積計算得到
對于點集Pn的一種閉合三角構(gòu)造,若內(nèi)部存在一點P,使得P點到各三角面片中心的向量VD與各面片的外法線向量Vn的點積VD·Vn≥0(用于確定三角面片外法線的方向),且不相鄰的三角面片不相交,則稱該構(gòu)造為針對點集Pn的一個簡單空間構(gòu)造,對應(yīng)的實體模型為簡單空間實體,點P稱為該構(gòu)造的核點。點P的集合稱為對應(yīng)于該構(gòu)造的核。
根據(jù)建模算法的需要,定義一些基本的數(shù)據(jù)結(jié)構(gòu),主要包括點、邊和面,見表1、表2、表3。
表1 點
點是基本的數(shù)據(jù)單位,其中,標(biāo)志位用于標(biāo)記該點的狀態(tài),包括未用、已用或是同棱點。
表2 邊
表3 三角面片(外法線逆時針排序)
邊是直接用來描述模型的基本結(jié)構(gòu)之一。使用索引有一系列的優(yōu)點,可以避免由于在建模過程中執(zhí)行處理或后期空間分析時的浮點運算導(dǎo)致模型開裂等問題。
如圖2所示,邊P1P2左側(cè)的三角形為P1P2P3,右側(cè)的三角形為P1P4P2,左右側(cè)的三角形拓?fù)湫畔⑹褂孟鄳?yīng)三角形的索引編號進行設(shè)置,由此,邊P1P2便成為內(nèi)部邊。對于邊P1P4、P4P2、P2P3和P3P1,只有左側(cè)三角形,左側(cè)三角形的拓?fù)湫畔⑹褂孟鄳?yīng)三角形的索引編號設(shè)置,右側(cè)三角形的索引編號則設(shè)置為-1。邊代表了實體模型構(gòu)建過程中的一個側(cè)面,如果兩側(cè)均處于使用狀態(tài),則該側(cè)面位于內(nèi)部;如果只有單側(cè)處于使用狀態(tài),則為外部側(cè)面。在構(gòu)建模型的過程中,內(nèi)部邊/面將不再參與構(gòu)建工作,算法拓?fù)渫七M的過程中只遍歷外側(cè)面。
圖2 邊的拓?fù)湫畔?/p>
面也是模型的基本拓?fù)浣Y(jié)構(gòu)之一。本文中涉及的面由三角形表示。對于頂點的索引,從頂點1→頂點2→頂點3,按照外法線右手法則確立;對于邊信息,采用相應(yīng)的邊索引號填充。標(biāo)志位記錄了構(gòu)成當(dāng)前面片邊的方向信息。如果構(gòu)成當(dāng)前三角形的邊與邊表中的邊同向,則相應(yīng)的bit置位;否則復(fù)位。
如圖3所示,如果構(gòu)成當(dāng)前三角面片的1號邊與邊表中的邊同向,則b0設(shè)置為1,反向則設(shè)置為 0;同理,如果2號邊與邊表中的邊同向,則b1設(shè)置為1,反向則設(shè)置為 0;如果3號邊與邊表中的邊同向,則b2設(shè)置為1,反向則設(shè)置為0。
最終建模算法中用到的主要數(shù)據(jù)容器包括主點集列表、K-鄰接表、邊表和面表。
圖3 三角面片的標(biāo)志位
以空間點集Pn為對象,具體的三維構(gòu)造算法如下:1)剔除同位點,并建立鄰接表。設(shè)立閾值Epsilon,對于給定的兩點P1和P2,如果兩點間的距離
則視點P1和P2為同位點,將其中的一點從主點集中剔除。同時,在遍歷點集的過程中,以每個點為鄰接表的表頭,計算出與其相鄰的最近K個點,并記錄在鄰接表中,本文中選K=8(經(jīng)驗值)。在構(gòu)建鄰接表的過程中,對每條記錄內(nèi)部的K個鄰接點按照距離由小到大進行排序,對于全部的鄰接表則依全部記錄中每條記錄的第1個鄰接點的距離由小到大進行排序處理,所采用鄰接表的形式見表4。
表4 鄰接表的形式
3)起始邊及起始面片的確立。從鄰接表中選取最短邊作為起算邊,并通過篩選該最短邊的K臨近點,按照最小角最大化的原則選擇最優(yōu)點建立起始三角面片。以點C為中心,構(gòu)建初始三棱錐。使用公式VD·Vn≥0,確立三角面片的環(huán)繞方向。其中,VD為點C到三角面片中心的方向向量,Vn為自然順序下求得的法線向量。如果兩個向量的點積滿足大于等于0的條件,則使用自然順序;反之則將點位反序排列。創(chuàng)建面片變量,按計算確定的順序填充對應(yīng)的頂點信息域,并將其加入到面表中。
創(chuàng)建3個邊變量,使用初始面片的信息填充變量的各個域,并將它們加入到邊表中。按照邊表中邊的信息,填充面片中相應(yīng)邊的索引信息,將構(gòu)成該起始面片的3個頂點設(shè)置為“已使用”的狀態(tài)。
4)建立循環(huán)遍歷鄰接表。在遍歷鄰接表的時候遵循兩個原則,在建模的過程中建立變量跟蹤待插入點。優(yōu)先從前插入點的K個近鄰中選擇點作為當(dāng)前插入點;如果其近鄰都已執(zhí)行完插入操作,則順次遍歷鄰接表,取下一個表頭點作為當(dāng)前點。這種處理能夠有效地解決由于鄰接表K取值的有限性所導(dǎo)致的局部點群“被孤立”的問題。
判斷當(dāng)前點與以C為中心的已有各表面片的位置關(guān)系。在本文中,邊是有方向的。對于給定的點P,點P和邊PiPj的位置關(guān)系可轉(zhuǎn)換為向量VCP和面PiPjC的位置關(guān)系。計算PiPjC的外法線向量Vn,并計算點積VCP·Vn。設(shè)定閾值Epsilon2,如果VCP·Vn的絕對值小于Epsilon2,則認(rèn)為點P位于邊PiPj上;如果VCP·Vn>Epsilon2,則點P位于邊PiPj的左側(cè);反之,則位于右側(cè)。
如果點P位于面表中某一面片3條邊的左側(cè),計算向量VCP與當(dāng)前面片外法線向量的點積,如果大于等于0,則該點位于三棱錐內(nèi)部。如果點P位于某條邊上,繼續(xù)測試點P與起點的距離是否小于當(dāng)前邊的長度,如果小于則位于邊上;反之則位于外部;如果點P既不在棱錐內(nèi)部,又不在某條邊上,則為外部點。待插入點與三棱錐構(gòu)成如下3種位置關(guān)系。
a.矢量VCPi在三棱錐內(nèi)部,如圖4所示。
圖4 當(dāng)前點位于某三棱錐內(nèi)部
b.矢量VCPi在三棱錐側(cè)面上,如圖5所示。
圖5 當(dāng)前點位于某棱錐的側(cè)面上
由于邊和面的拓?fù)湫畔⑹窍嚓P(guān)的,需做好新增面片和邊的記錄,以便于在插入完成后,更新相應(yīng)的拓?fù)湫畔ⅰ?/p>
c.矢量VCPi在三棱錐的外側(cè),如圖6所示。
圖6 當(dāng)前點位于已有棱錐的外側(cè)
如果當(dāng)前點位于已建立棱錐的外側(cè),則進一步對其測試是否與已有棱錐的側(cè)棱同棱,如果當(dāng)前點與已有棱錐的某條棱同棱,則將其標(biāo)記置為“同棱點”,等待后續(xù)處理;否則繼續(xù)執(zhí)行主建模流程。
如圖6所示,點Pi位于已有棱錐的外側(cè),遍歷邊表,如果邊表中當(dāng)前邊的兩側(cè)面片的拓?fù)湫畔⒍加行?不為-1)則跳過;如果只有一側(cè)有效,則判斷向量VCPi和該邊的位置關(guān)系,在一條邊只能被兩個面片所共享的條件下,完成外側(cè)邊的插入操作。圖6(a)中所示的VCPi只能看到部分棱錐,而圖6(b)中的VCPi則能看到當(dāng)前已有棱錐的全部外側(cè)面。執(zhí)行相應(yīng)的插入操作,并更新面表和邊表中相應(yīng)的拓?fù)湫畔ⅰ?/p>
隱含說明:在經(jīng)過上述位置判斷后,如果直接執(zhí)行插入操作,則最終的建模結(jié)果將會包含許多較深的“凹角”,數(shù)學(xué)上就是對應(yīng)二面角的平面角過小所導(dǎo)致的。在執(zhí)行插入操作的過程中,需在最小角最大化原則下,對新增面片執(zhí)行拓?fù)鋬?yōu)化。
5)將當(dāng)前點的標(biāo)志記為“已使用”的狀態(tài),循環(huán)直到K鄰接表的表頭點全部處于“已使用”或“同棱點”狀態(tài)。
6)同棱點的處理。遍歷主點集列表,將每個標(biāo)記為同棱點的點插入到與其最近鄰的點構(gòu)成的面片中。其中包括了局部面片的打破和重建操作,以獲取最佳拓?fù)溥B接。
使用C語言對本算法進行了實現(xiàn),采用兩套數(shù)據(jù)集進行了試驗。數(shù)據(jù)集1是采用算法隨機生成的空間球面上的500個點,數(shù)據(jù)集2是某大型金屬礦山地下采空區(qū)的點云數(shù)據(jù),其中有頂點23 939個。算法建模效果如圖7、圖8所示。
圖7 球面隨機采樣點集的建模效果
圖8 地下采空區(qū)點集的建模效果
本文從幾何的角度出發(fā),研究了一種三維建模算法。在沒有考慮各點空間屬性的情形下,將各點對虛擬中心向量的權(quán)重選擇為1.0(即各點在數(shù)學(xué)上具有均等性)進行建模的工作。最終的模型由三角面片組成,建模的結(jié)果非常方便體積和表面積等的計算。本文的建模算法可作為空間大型復(fù)雜實體或一體化建模的基石。下一步的研究工作是:①對算法進行優(yōu)化,以期能采用更優(yōu)的復(fù)雜度來解決建模問題;②附加頂點屬性的權(quán)重Ki的計算方法及其對最終模型的影響。
[1]陳學(xué)工,李源,曹建,等.Delaunay三角網(wǎng)剖分的約束邊嵌入改進算法[J].計算機工程與應(yīng)用,2009,45(24):235-237.
[2]EDELSBRUNNER H,MUCKE E P.Three-dimensional Alpha Shapes[J].ACM Transactions on Graphics,1994,13(1):43-72.
[3]HOPPE H,DEROSE T.Surface Reconstruction from Unorganized Points[J].Computer Graphics,1992,26(2):71-78.
[4]LIN H,TAI C L,WANG G.A Mesh Reconstruction Algorithm Driven by Intrinsic Property of Point Cloud[J]. Computer-Aided Design,2004,36(1):1-9.
[5]張帆,黃先鋒,李德仁.基于球面投影的單站地面激光掃描點云構(gòu)網(wǎng)方法[J].測繪學(xué)報,2009,38(1):48-54.
[6]鄭德華,龐逸群,曹操.基于橢球面投影的散亂點云建立三角格網(wǎng)方法[J].測繪工程,2010,19(4):19-23. [7]鄭德華,張云濤.基于物體表面散亂三維激光掃描點的三角形格網(wǎng)建立[J].測繪工程,2004,13(4):62-65.
[8]鄭順義,蘇國中,張祖勛.3維點集的自動表面重構(gòu)算法[J].武漢大學(xué)學(xué)報:信息科學(xué)版,2005,30(2):154-157.
A Method of Three-dimensional Modeling over Spatial Unorganized Points Based on the K-nearest Neighbours
NI Shu,F(xiàn)ANG Yuanmin,LI Guozhu,CHEN Jie
以空間離散點集Pn={P1,P2,…,Pi,…,Pn}為研究對象,研究了一種三維建模算法。在預(yù)先約定外法線方向和優(yōu)化原則(最小角最大化)的基礎(chǔ)上進行三維建模。第1步,對點集進行同位點的剔除,并建立K-鄰近鄰接表;第2步,確定權(quán)重的計算方法,并計算虛擬中心點、各點相對于虛擬中心的向量及其長度范數(shù);第3步,求定起始邊及起始面片;第4步,遍歷K-鄰接表,選擇當(dāng)前待插入點,分3種情況討論了待插入點與已有面表中面片和已有邊表中邊的關(guān)系,進行插入和格網(wǎng)優(yōu)化操作,直到主點集中的點都處于“已使用”或“同棱點”的狀態(tài);第5步,處理“同棱點”。通過上述環(huán)節(jié)完成對空間離散點集的三維建模操作,最后用C語言對算法進行了實現(xiàn),并采用相關(guān)的數(shù)據(jù)進行了試驗,試驗結(jié)果證明了本算法的有效性。
空間離散點集;三維建模;空間實體;K-鄰近;地下采空區(qū)
P208
B
0494-0911(2014)10-0036-05
2013-09-09
國家自然科學(xué)基金(41161071);昆明理工大學(xué)自然科學(xué)研究基金(KKSY201321063)
倪 曙(1969―),男,云南賓川人,高級工程師,主要研究方向為三維GIS、工程測量及大地測量。
倪曙,方源敏,李國柱,等.K-鄰近條件下空間實體三維建模算法研究[J].測繪通報,2014(10):36-40.
10.13474/j.cnki.11-2246. 2014.0323