陳潤華
摘 要:文章針對數(shù)字城市三維建模的需求,提出了使用FME結(jié)合三維矢量線和航片進(jìn)行快速建模的方法,介紹了實現(xiàn)過程。
關(guān)鍵詞:FME;三維矢量線;航片;建模
1 概述
雖以Smart3D為代表的利用照片建模的三維重建技術(shù)正在迅速普及,但受限于使用此種方法得到的場景模型尚未實現(xiàn)模型單體化,在需要制作精細(xì)模型的項目中,仍然使用屋頂三維線結(jié)合航片影像生成模型的技術(shù)。
2 總體流程設(shè)計
3 實現(xiàn)過程
3.1 準(zhǔn)備源數(shù)據(jù)。提取第三方航測軟件生成的空三成果,整理成CSV格式文件方便在FME中使用,整理好的文件格式如下:外方位元素文件:相片文件路徑,X,Y,Z,Phi,Omega,Kappa。測區(qū)參數(shù)文件:相機(jī)焦距,像主點x0,像主點y0,相片高(像素),相片寬(像素),像素大小,地面分辨率。準(zhǔn)備屋頂三維矢量線和DEM文件。
3.2 檢查、處理屋頂矢量線
首先對屋頂矢量線做必要的檢查,包括檢查不閉合的面、檢查面邊界是否有弧、重復(fù)頂點、面自相交、面重疊等。針對圖形規(guī)范的檢查和自動處理,可以使用GeometryValidator轉(zhuǎn)換器。
人工采集屋頂矢量線的過程中,容易出現(xiàn)因捕捉不到位造成的頂點間以及點線間的縫隙,需要對其進(jìn)行一定容差內(nèi)的規(guī)范處理,包括二三維捕捉和給人字形屋頂加中線。其中人字形屋頂?shù)乃许旤c不在同一個平面上,屬于不規(guī)范圖形。但因為此類要素較多,如果采集過程中分別采集兩個屋頂面,會嚴(yán)重降低作業(yè)效率??梢栽贔ME處理過程中針對此類圖形自動添加屋脊線,將其分隔成兩個面。
3.3 檢查屋頂線與相片是否重合
使用InsidePointReplacer轉(zhuǎn)換器得到各屋頂投影面的中心點,使用NeighborFinder轉(zhuǎn)換器求出離各屋頂面中心點最近的相片文件,然后根據(jù)攝影測量專業(yè)的共線條件方程,將矢量線的各頂點坐標(biāo)計算到相片坐標(biāo),然后輸出到FME Data Inspector中查看。在Inspector轉(zhuǎn)換器中按相片全路徑分組,矢量線對應(yīng)的相片路徑會直接顯示在FME Data Inspector數(shù)據(jù)列表的節(jié)點上,可以更方便的檢查。若屋頂線與相片不套合,最常見的原因是相片的外方位元素不規(guī)范,航測條帶轉(zhuǎn)向后坐標(biāo)系正方向未保持一致。程序提供根據(jù)航帶號的奇偶性進(jìn)行自動糾正的功能。
3.4 獲取底面
源數(shù)據(jù)確認(rèn)無誤后,使用SurfaceDraper轉(zhuǎn)換器將每個屋頂面投影到DEM上,得到對應(yīng)的底面。但通常每幢房屋范圍內(nèi)的DEM的高度都是不相等的,而最終房屋模型底面各頂點的高程就有不同的選擇。最常見的要求是整幢房屋底都是平的,其次是要求房屋各頂點都正好貼到地表,最復(fù)雜的要求是對房屋邊線進(jìn)行頂點內(nèi)插,使得整條線都貼合在地表上。第二種情況處理最簡單,但是生成的模型從側(cè)面看就會不美觀。第三種會造成底面邊線生成過多頂點,不僅會極大增加模型的體積,還會嚴(yán)重影響側(cè)面紋理效果。第一種要求需要統(tǒng)計投影面各頂點的Z值,根據(jù)需要取最小值、最大值或平均值。
3.5 掏空模型
掏空模型指對同一幢房屋(投影面相鄰或重疊)的各部分進(jìn)行體布爾運算,刪除體內(nèi)部表面,只保留最外部表面。此步驟可以使用FME Store上共享的SolidDissolver轉(zhuǎn)換器完成。
3.6 裁切紋理
根據(jù)共線方程求出矢量線各頂點在相片上的坐標(biāo)后,使用PointConnector轉(zhuǎn)換器將點重新連接成面,然后使用Clipper轉(zhuǎn)換器裁切離面中心點最近的相片得到紋理。
3.7 處理紋理
因為裁切得到的紋理是相片坐標(biāo),需要根據(jù)原屋頂線的所有頂點,使用AffineWarper轉(zhuǎn)換器將其糾正回空間直角坐標(biāo)。程序根據(jù)實際需求,提供了紋理最大像素限制和紋理轉(zhuǎn)正的功能。因為常見的三維平臺對紋理像素有限制,可以使用RasterResampler轉(zhuǎn)換器進(jìn)行重采樣。另外因為紋理柵格文件是正矩形,當(dāng)屋頂面的斜外接矩形與正南正北方向存在一定角度時,會存在多余的紋理。使用BoundingBoxReplacer轉(zhuǎn)換器得到屋頂面斜外接矩形,求出旋轉(zhuǎn)角后同時將屋頂面和已裁切的紋理旋轉(zhuǎn)至水平方向并再次裁切,得到轉(zhuǎn)正后紋理。紋理轉(zhuǎn)正不會影響模型效果,卻能有效的減少紋理文件大小。
3.8 輸出模型
使用AppearanceSetter轉(zhuǎn)換器對屋頂貼紋理。因為頂面、側(cè)面是分開的要素,為保證輸出后一幢房屋為一個模型對象,可以使用Aggregator轉(zhuǎn)換器聚合同幢房屋的頂面和側(cè)面。
3.9 使用自定義轉(zhuǎn)換器分組處理
在最初測試中發(fā)現(xiàn),當(dāng)紋理數(shù)量較多時程序的處理效率非常慢,經(jīng)檢查發(fā)現(xiàn)主要原因是紋理糾正步驟使用的AffineWarper轉(zhuǎn)換器目前在FME中沒有提供原生的分組處理功能。后將紋理糾正步驟保存成自定義轉(zhuǎn)換器,使用自定義轉(zhuǎn)換器提供的分組功能實現(xiàn)并行處理。對比后發(fā)現(xiàn),分組并行處理1000個紋理的效率是單進(jìn)程處理的30倍以上。
4 結(jié)束語
整個處理流程共405個轉(zhuǎn)換器,相比完全用代碼實現(xiàn),F(xiàn)ME提供的方案實在是簡單、易用、可靠。在實際使用中,搭配多核CPU計算機(jī),使用FME的并行處理功能,可以極大的提高處理效率,完全滿足實際需求。
參考文獻(xiàn)
[1]張劍清,潘勵,王樹根.攝影測量學(xué)[M].武漢:武漢大學(xué)出版社,2000.
[2]李永泉,韓文泉,黃志洲.數(shù)字城市三維建模方法比較分析[J].現(xiàn)代測繪,2010,33(2).