望曉尉,付仲良
(1.武漢大學(xué)遙感信息工程學(xué)院,湖北 武漢 430079)
實(shí)景三維模型的應(yīng)用經(jīng)歷了以其為基底構(gòu)筑數(shù)字城市、智慧城市、數(shù)字孿生城市以及城市信息模型的發(fā)展過(guò)程[1]。隨著應(yīng)用逐步廣泛,針對(duì)實(shí)景三維模型的技術(shù)需求也與日俱增,如傾斜攝影模型單體化技術(shù)、點(diǎn)云密度提升技術(shù)等。隨著深度學(xué)習(xí)的研究發(fā)展,較多學(xué)者將模型單體化的研究聚焦到了傾斜攝影模型密集匹配點(diǎn)云上[2-3]。但由于模型精細(xì)度以及模型數(shù)據(jù)量問(wèn)題,部分較簡(jiǎn)單的實(shí)景三維模型不能滿足點(diǎn)云分類(lèi)分割的要求。在點(diǎn)云密度提升技術(shù)方面,Kinder[4]提出了高階插值函數(shù)的多項(xiàng)式插值算法,比雙線性插值準(zhǔn)確度更高;楊成松[5]提出了一種基于不規(guī)則三角網(wǎng)的DEM 表面插值模型,比傳統(tǒng)算法更準(zhǔn)確。
本文在傳統(tǒng)研究的基礎(chǔ)上,深入剖析實(shí)景三維模型的數(shù)據(jù)結(jié)構(gòu),以模型數(shù)據(jù)產(chǎn)品為基礎(chǔ),逆向獲取三維模型的點(diǎn)云數(shù)據(jù),計(jì)算紋理坐標(biāo),重新構(gòu)筑其頂點(diǎn)索引。本文方法能從簡(jiǎn)單的實(shí)景三維模型析出點(diǎn)云,并利用點(diǎn)云插值增加稠密程度,提升模型精細(xì)度,獲取能滿足點(diǎn)云分類(lèi)與分割要求的三維模型。
目前的實(shí)景三維模型大多以O(shè)SGB 格式為主流,這種格式的優(yōu)勢(shì)在于應(yīng)用群體大、數(shù)據(jù)結(jié)構(gòu)清晰、代碼生態(tài)原生。OSGB 格式的三維模型對(duì)所有基于OpenGL 以及OSG 所開(kāi)發(fā)的三維地理信息系統(tǒng)都有較為良好的兼容性,有著龐大的用戶群體;其三維數(shù)據(jù)具有較強(qiáng)的可讀性,結(jié)構(gòu)清晰且易于構(gòu)建,在數(shù)據(jù)傳輸、格式轉(zhuǎn)換、內(nèi)容壓縮方面都有明顯的優(yōu)勢(shì);與此同時(shí),該格式的數(shù)據(jù)結(jié)構(gòu)在邏輯層級(jí)滿足C++的反射要求,能夠較為輕松地從對(duì)應(yīng)的數(shù)據(jù)格式中解析出其代碼結(jié)構(gòu),從而為后續(xù)開(kāi)發(fā)提供便利。本文針對(duì)該類(lèi)型的實(shí)景三維模型,從文件結(jié)構(gòu)、網(wǎng)格表示以及數(shù)據(jù)模型等三方面分別闡述其數(shù)據(jù)結(jié)構(gòu)。
傾斜攝影測(cè)量在使用無(wú)人機(jī)拍攝的影像進(jìn)行實(shí)景三維建模時(shí),一般會(huì)采用區(qū)塊處理的方式來(lái)提高建模效率,故而其原始文件的組織呈現(xiàn)一種空間橫向瓦片剖分,層次縱向細(xì)節(jié)剖分的結(jié)構(gòu)特性。
以四川崇州某區(qū)域的實(shí)景三維模型數(shù)據(jù)為例,由于該區(qū)域的瓦片文件以Tile_x_y的格式命名,故將其按(x,y)坐標(biāo)進(jìn)行展繪可得到如圖1所示的橫向瓦片切分結(jié)構(gòu)圖。該圖描述了實(shí)景三維模型數(shù)據(jù)在磁盤(pán)空間上的文件組織方式,其中的紅色區(qū)域?yàn)楸疚膶?shí)驗(yàn)區(qū)域。
圖1 實(shí)景三維模型橫向瓦片切分結(jié)構(gòu)
在層次縱向細(xì)節(jié)剖分層級(jí)上,對(duì)單個(gè)瓦片文件的內(nèi)部數(shù)據(jù)資源調(diào)度進(jìn)行分析,將細(xì)節(jié)層次模型的第14-21 層級(jí)按模型加載順序由頂向下進(jìn)行繪制,可得如圖2所示的金字塔。
圖2 實(shí)景三維模型縱向細(xì)節(jié)剖分金字塔
由上圖可知,三維模型數(shù)據(jù)加載時(shí)細(xì)節(jié)層級(jí)模型的調(diào)度方式符合四叉樹(shù)索引結(jié)構(gòu),在生成點(diǎn)云時(shí)可以根據(jù)此調(diào)用結(jié)構(gòu)找到最適宜生成點(diǎn)云的底層模型;本文以此為基礎(chǔ),進(jìn)一步研究實(shí)景三維數(shù)據(jù)的三維網(wǎng)格模型表達(dá)。
三維模型一般是指空間中物理實(shí)體對(duì)象的數(shù)學(xué)表示,其表達(dá)方式包括點(diǎn)云表達(dá)、體素表達(dá)以及多邊形網(wǎng)格表達(dá)等3種[6]。本文主要研究其中2種,即由三維模型的多邊形網(wǎng)格表達(dá)轉(zhuǎn)換為點(diǎn)云表達(dá)。
三維模型的多邊形網(wǎng)格表達(dá)是目前計(jì)算機(jī)圖形學(xué)中最常用的三維模型繪制方法。其具有易于獲取、曲面逼近性好、保留表面信息、形狀簡(jiǎn)單等優(yōu)點(diǎn)[7],目前最常用的多邊形網(wǎng)格為三角形網(wǎng)格。而點(diǎn)云表達(dá)通常為生成多邊形網(wǎng)格模型的過(guò)渡數(shù)據(jù)表達(dá),一般不具備拓?fù)浣Y(jié)構(gòu)。
通過(guò)本文的研究,可以將三維網(wǎng)格模型轉(zhuǎn)換為密集點(diǎn)云模型,進(jìn)而借助點(diǎn)云模型的數(shù)據(jù)特性為后續(xù)的點(diǎn)云分割等研究提供技術(shù)依托。
以O(shè)SGB 格式存儲(chǔ)的三維網(wǎng)格模型將紋理信息、頂點(diǎn)坐標(biāo)信息、三維網(wǎng)格索引信息以及紋理坐標(biāo)信息均保存在同一個(gè)文件中,提取其關(guān)鍵結(jié)構(gòu)并分析可得到OSGB模型(如圖3)。
圖3 OSGB數(shù)據(jù)模型
以O(shè)SGB 數(shù)據(jù)模型為例,采用三角形網(wǎng)格進(jìn)行表達(dá)的三維模型包含2 175 個(gè)頂點(diǎn)以及5 634 個(gè)面片;OSGB數(shù)據(jù)在保存上述幾何信息的同時(shí)還存儲(chǔ)了2 175個(gè)紋理坐標(biāo)以及相應(yīng)的紋理圖片,以此來(lái)提高實(shí)景三維模型與真實(shí)世界的相似性。
本文所提出的面向OSGB 格式三維模型的實(shí)景三維模型點(diǎn)云析出方法主要包括以下3 個(gè)步驟:首先,利用節(jié)點(diǎn)遍歷技術(shù)提取實(shí)景三維模型最精細(xì)一級(jí)文件的頂點(diǎn)坐標(biāo);隨后,利用局部泰森插值對(duì)提取的頂點(diǎn)坐標(biāo)進(jìn)行點(diǎn)云插值,從而得到密集點(diǎn)云數(shù)據(jù);最后,將實(shí)景三維網(wǎng)格模型的紋理信息作為圖像進(jìn)行導(dǎo)出。在導(dǎo)出紋理的過(guò)程中需要獲取插值點(diǎn)的紋理坐標(biāo)并重建面片索引來(lái)輸出新的模型,這一方法將在下一章節(jié)中進(jìn)行介紹。
本文針對(duì)OSGB 模型的特點(diǎn),采用節(jié)點(diǎn)遍歷的方式獲取實(shí)景三維模型的最底層精細(xì)模型的頂點(diǎn)信息、紋理坐標(biāo)信息以及面片信息,并從中提取出可用的頂點(diǎn)坐標(biāo)數(shù)據(jù)進(jìn)行析出。
實(shí)景三維模型數(shù)據(jù)本身對(duì)頂點(diǎn)結(jié)構(gòu)進(jìn)行了一定程度的簡(jiǎn)化,以此步驟分析出的頂點(diǎn)坐標(biāo)信息實(shí)際上是一種稀疏點(diǎn)云。為了進(jìn)一步提高析出數(shù)據(jù)的可用性,本文采用點(diǎn)云插值算法對(duì)稀疏點(diǎn)云進(jìn)行插值,獲取細(xì)節(jié)更為豐富的稠密點(diǎn)云。
目前的點(diǎn)云插值算法主要包括2 種:經(jīng)典插值算法插值以及神經(jīng)網(wǎng)絡(luò)插值[8-11]。經(jīng)典插值算法能夠很快得到插值結(jié)果,但其插值效果與計(jì)算量大小密切相關(guān)[8];點(diǎn)云的神經(jīng)網(wǎng)絡(luò)插值算法具有很好的表現(xiàn)性能,但對(duì)原始模型拓?fù)鋷缀涡畔⒌募嫒菪暂^差。
本文分析2 種方法的各自特點(diǎn),針對(duì)建筑物實(shí)景三維模型的平面性結(jié)構(gòu),提出面向三角形網(wǎng)格模型的局部泰森插值算法,算法的流程如圖4所示。
圖4 局部泰森插值算法流程圖
本文提出的局部泰森插值算法的主要流程為:
將行列式展開(kāi)為平面方程的一般形式,即Ax+By+Cz+D=0。由此平面方程確定系數(shù)A1,B1,C1,D1,由空間三角形外接圓的性質(zhì)聯(lián)立方程確定系數(shù)A2,B2,C2,D2以及A3,B3,C3,D3,由此可推圓心O0的坐標(biāo)為:
3)檢查鄰域三角面片的拓?fù)涮匦裕瑢?duì)于非建筑表面的三角面片還需要以鄰域泰森多邊形角點(diǎn)的坐標(biāo)作最小二乘法曲面擬合,在上一步求出的圓心坐標(biāo)O0的基礎(chǔ)上做偏移操作,使得泛函誤差最小,得到最優(yōu)化的插值點(diǎn)。
如圖5所示,取三角面片F(xiàn)0,則其鄰域三角面片集合為{F1,F(xiàn)2,F(xiàn)3,F(xiàn)4,F(xiàn)5,F(xiàn)6,F(xiàn)7,F(xiàn)8} ,作F0的外接圓求得其圓心為O0。通過(guò)對(duì)其進(jìn)行鄰域拓?fù)錂z查,最終確定參與第三步曲面擬合的三角形為F3,F(xiàn)6,F(xiàn)8,得到其圓心坐標(biāo)O3,O6,O8,則最終的最優(yōu)化插值點(diǎn)可由4個(gè)圓心坐標(biāo)做協(xié)同計(jì)算而得到。
圖5 插值算法示意圖
以O(shè)SGB 格式存儲(chǔ)的三維網(wǎng)格模型將紋理信息以圖片的形式保存在同一個(gè)二進(jìn)制文件中,在通過(guò)節(jié)點(diǎn)遍歷的方式進(jìn)行稀疏點(diǎn)云析出時(shí)可以同步導(dǎo)出模型對(duì)應(yīng)的紋理圖片。
在3D 模型的紋理貼圖中常使用UV 映射將3D 網(wǎng)格轉(zhuǎn)換到2D 平面便于對(duì)其包裹2D 紋理圖片,其中U和V指的是2D空間的水平軸和垂直軸。實(shí)景三維模型中存儲(chǔ)的紋理實(shí)際上就是一張執(zhí)行完UV展開(kāi),將三角網(wǎng)格與參數(shù)平面建立一一映射后得到的圖片(如圖6)。
圖6 導(dǎo)出的部分模型紋理示意圖
輸出新的三維模型需要新的面片索引,在插值生成點(diǎn)云數(shù)據(jù)后,需要根據(jù)插值后得到的新三角面片的頂點(diǎn)坐標(biāo)以及頂點(diǎn)對(duì)應(yīng)的紋理坐標(biāo)來(lái)完成對(duì)面片索引的重建。
如上文的紋理導(dǎo)出一節(jié)所說(shuō),經(jīng)過(guò)UV 展開(kāi)得到的紋理貼圖中3D網(wǎng)格和2D紋理是一一映射的,構(gòu)成模型的三角網(wǎng)的每個(gè)頂點(diǎn)都有自己的紋理坐標(biāo),由插值得到的點(diǎn)無(wú)法直接從紋理圖片中得到其紋理坐標(biāo)。UV 展開(kāi)保留了三角面片這一構(gòu)成實(shí)景三維模型的最小單元,以此為原則,本文提出了基于平面單應(yīng)性轉(zhuǎn)換獲取插值點(diǎn)的紋理坐標(biāo)的方法。
平面單應(yīng)性轉(zhuǎn)換將一個(gè)平面內(nèi)的點(diǎn)映射到另一個(gè)平面,這里的平面是指圖像或者三維中的平面表面,由于UV 展開(kāi)在紋理圖片中保留了模型三角面片,利用面片頂點(diǎn)坐標(biāo)與紋理坐標(biāo)之間的映射關(guān)系以及三角面片本身具有的邊對(duì)邊約束關(guān)系,能夠較為良好的解決本文所述的插值點(diǎn)的紋理坐標(biāo)求解問(wèn)題。
該投影坐標(biāo)系可以進(jìn)行任意尺度的縮放,為齊次坐標(biāo)系,單應(yīng)性矩陣H的自由度為8。因此通過(guò)三對(duì)點(diǎn)到點(diǎn)映射以及三角形的邊對(duì)邊約束,可以用直接線性變換法求解(3)式中矩陣H。得到該矩陣后,即可在執(zhí)行點(diǎn)云插值后,根據(jù)插值點(diǎn)的坐標(biāo)求得其紋理坐標(biāo),實(shí)現(xiàn)新增的頂點(diǎn)從紋理圖片中調(diào)度其對(duì)應(yīng)顏色的需求。
經(jīng)過(guò)局部泰森插值算法的處理,原始的三角片面面片F(xiàn)0或其鄰域三角面片將以插值點(diǎn)O0為中心裂變3 個(gè)新的三角面片,將此過(guò)程稱為面片索引重建,其操作流程為:
首先,檢查圓心O0所在的三角面片;由于三角形外接圓的圓心并不一定會(huì)落在當(dāng)前三角形內(nèi),所以需要對(duì)此進(jìn)行判斷,若令該圓心落在三角形面片{v1,v2,v3} 中,則該面片即為原始三角形面片F(xiàn)。
接下來(lái),添加外接圓圓心數(shù)據(jù)到稀疏點(diǎn)云列表中并得到其頂點(diǎn)坐標(biāo)索引為vk;由此即可將原始三角面片F(xiàn)裂變?yōu)?個(gè)新的三角面片,分別為F1’={vk,v2,v3} ,F(xiàn)2’={vk,v1,v3} 以及F3’={vk,v1,v2} 。
最后,將新的三角面片F(xiàn)1’,F(xiàn)2’,F(xiàn)3’ 添加到面片索引列表中,并對(duì)應(yīng)刪除原始三角面片F(xiàn),至此,本文完成了對(duì)面片索引的重建工作。
對(duì)四川崇州某城市區(qū)域的OSGB 三維模型進(jìn)行實(shí)驗(yàn),導(dǎo)出實(shí)驗(yàn)結(jié)果如圖7、8所示。
圖7 析出點(diǎn)云示意圖
圖8 輸出模型示意圖
本實(shí)驗(yàn)遍歷原始的三維模型頂點(diǎn)并析出點(diǎn)云,使用的本文提出的插值方法并經(jīng)過(guò)兩次迭代的點(diǎn)云插值計(jì)算和最小二乘曲面擬合得到插值點(diǎn)云和新的面片,求出插值點(diǎn)的紋理坐標(biāo)后,對(duì)面片索引進(jìn)行重建,最后輸出新的三維模型。
由圖9a 和9b 對(duì)比看出,通過(guò)插值頂點(diǎn)個(gè)數(shù)從4 284 增加到38 898,切實(shí)提升了點(diǎn)云數(shù)量和稠密度。從圖10a 和10b 對(duì)比看出,由實(shí)驗(yàn)得到的三維模型較原有模型,精細(xì)程度得到提升,地物邊界更加明顯,紋理的顯示效果良好,且析出模型點(diǎn)云也能較好的符合實(shí)際情況。
圖9 點(diǎn)云插值前后頂點(diǎn)數(shù)量對(duì)比
圖10 插值前后模型細(xì)節(jié)對(duì)比
本文提出的算法能夠在不借助傾斜攝影測(cè)量原始相片以及點(diǎn)云數(shù)據(jù)的條件下,保持建筑物原有平面幾何結(jié)構(gòu),生成符合點(diǎn)云編輯、分割以及重建要求的稠密點(diǎn)云數(shù)據(jù),并通過(guò)實(shí)驗(yàn)證明了析出點(diǎn)云構(gòu)建的模型保持了良好的幾何和紋理特性,為實(shí)景三維模型基于點(diǎn)云數(shù)據(jù)的進(jìn)一步應(yīng)用提供了理論基礎(chǔ),也為后續(xù)模型點(diǎn)云相關(guān)工作的展開(kāi)創(chuàng)造了數(shù)據(jù)條件。
當(dāng)然后續(xù)工作中還需要改進(jìn)不足之處,一方面需要改善插值算法的迭代次數(shù)與迭代的判斷條件,避免場(chǎng)景較大點(diǎn)云過(guò)多時(shí)插值的計(jì)算量太大;另一方面需要發(fā)掘更高效的曲面擬合方法,提升不同平面的面片經(jīng)過(guò)曲面擬合后產(chǎn)生的三維曲面的精細(xì)度。