詹勇,馬紅
(1.重慶市勘測院,重慶 401121; 2.智能城市空間(CIM+)創(chuàng)新中心,重慶 401121;3.重慶市地理國情監(jiān)測工程技術(shù)研究中心,重慶 401121)
在新型基礎(chǔ)測繪、實景三維中國建設(shè)、城市信息模型CIM(CIM,City Information Modeling)等智慧城市建設(shè)的重大項目中,利用傾斜攝影開展實景三維建模已成為一種獲取三維模型的重要方法[1,2],因其具有建模速度快,自動化程度高、真實性強(qiáng)的特點,在城市規(guī)劃、工程建設(shè)、自然資源調(diào)查監(jiān)測管理等領(lǐng)域中得到了廣泛的應(yīng)用[3,4]。在實際生產(chǎn)和應(yīng)用中,由于實景三維模型的紋理來自傾斜航空攝影,受航攝批次、天氣、照片曝光程度等因素的影響,可能導(dǎo)致傾斜影像色彩不一致、紋理偏暗或曝光過度等問題,使得實景三維模型色彩色調(diào)不佳(如圖1所示)。此時,需要對實景三維模型進(jìn)行勻光勻色,獲得色調(diào)、明暗度一致的三維模型。
圖1 需要勻光勻色的實景三維模型
無論實景三維模型采用何種流程進(jìn)行勻光勻色,最終都需要對模型的紋理進(jìn)行勻光勻色處理,很多學(xué)者研究了常用的普通影像勻光勻色算法,包括Mask勻光法、Wallis勻光法等[5]。在航空影像、遙感影像以及無人機(jī)影像的勻光勻色方法方面,王邦松[6]等研究了航空影像色彩一致處理方法,吳海平[7]等研究了多源多尺度遙感色彩平衡方法及工程化應(yīng)用,俞小波[8]等研究了無人機(jī)影像勻光處理方法等。王云川[9]等采用直方圖均衡化和灰度拉伸方法,分別以原始影像和經(jīng)色調(diào)勻化處理后的影像為數(shù)據(jù)源,構(gòu)建實景三維模型并進(jìn)行模型質(zhì)量對比分析;凌毅力[10]對傾斜影像采集與預(yù)處理方案進(jìn)行了優(yōu)化研究,提出了相機(jī)標(biāo)定、直方圖均衡化等影像預(yù)處理方案。
這些研究重點是圖像的勻光勻色方法及其改進(jìn),可應(yīng)用到實景三維模型紋理調(diào)整中。本文不提出具體的勻光勻色方法,而是主要側(cè)重一種基于GPU的實景三維模型實時勻光勻色流程探討。如圖2所示,是傾斜攝影實景三維建模的主要流程,包括原始傾斜影像獲取、空三計算、自動化批量建模、獲得模型成果,其中耗時最長的是自動化批量建模。一般情況下實景三維模型勻光勻色工作,可以選擇兩個階段進(jìn)行。一是在獲取傾斜影像后、開展空三計算之前進(jìn)行,二是在模型完成建模以后,通過讀取模型的紋理進(jìn)行。顯然,在沒有開始建模時,在第一階段更合適,但如果模型是不同時間生產(chǎn)的或者不同來源的模型,則選擇第二個階段更合適,這是由于前者在重新勻光勻色后,還需要重新建模,耗時長。
圖2 傾斜攝影實景三維建模流程
而此時在第二階段開展勻光勻色工作,通常需要逐個讀取模型的紋理,選用勻光勻色方法進(jìn)行處理,處理完成后再把紋理寫入模型中,并保存到磁盤上,這種方式依然有較大的局限性,具體包括:一是單個實景模型工程數(shù)據(jù)量可能有GB,乃至TB級,紋理包含幾千上萬張。如果采用類似傳統(tǒng)PS圖片的批量修改的模式,計算、讀取,特別是保存的工作量巨大,至少需要幾個小時乃至數(shù)天時間。二是這種方法每次處理只能獲得一個調(diào)整結(jié)果,如果用戶對結(jié)果不滿意,則還需要重新進(jìn)行勻光勻色工作,直至用戶滿意為主,靈活性不足。三是實景三維模型多級LOD結(jié)構(gòu)復(fù)雜,需要從每個實景三維模型LOD中解析出紋理圖片,并處理完后再寫入,增加了復(fù)雜度和工作量。
本文針對這種情況,面向?qū)嵕叭S模型勻光勻色流程,提出了一種基于GPU編程的實景三維模型實時勻光勻色流程,該處理流程并不對紋理進(jìn)行實際處理(將處理后的紋理保存在磁盤上),而是利用GPU實現(xiàn)不同勻光勻色方法,在展示端實時顯示勻光勻色結(jié)果。該方法工作量小,實時性高,靈活性強(qiáng),下面具體介紹。
如前文所述,在實景三維模型進(jìn)行勻光勻色時,通常會遇到以下幾個問題:
(1)磁盤讀寫工作量大。由于實景三維模型紋理量大,導(dǎo)致處理過程產(chǎn)生大量磁盤讀寫工作,工作量大,耗時長。
(2)實景三維模型結(jié)構(gòu)復(fù)雜。實景三維模型為多細(xì)節(jié)層次模型,每個細(xì)節(jié)層級模型都包含紋理,詳見2.2節(jié),需要解析出紋理后,才能進(jìn)行勻光勻色處理。
(3)勻光勻色成果反饋不及時。通常需要在模型重新生成后,在三維可視化平臺中進(jìn)行查看才能最終確認(rèn)勻光勻色成果是否滿足要求,若不能滿足,則需要重新勻光勻色,然后在三維可視化平臺中查看建模成果,這種不能所見即所得的方式會進(jìn)一步增加工作量。
勻光勻色流程如圖3所示。在實景三維模型建成完成以后,獲得需要勻色的實景三維瓦塊,遍歷不同層級的LOD得到紋理。通過GPU編程建立不同的勻色方法庫,用戶根據(jù)需要選擇勻光勻色方法,然后給定實現(xiàn)參數(shù)實現(xiàn)勻光勻色結(jié)果可視化展示。如果對結(jié)果不滿意,可以選擇調(diào)整參數(shù),也可以選擇其他勻光勻色方法進(jìn)行調(diào)整,直到滿足用戶要求為止,最后保存結(jié)果參數(shù)。
圖3 勻光勻色技術(shù)流程
該流程具有以下特點:一是實時性強(qiáng),交互性好。本流程是基于三維渲染可編程管線實現(xiàn)勻光勻色算法,用戶可以利用可視化平臺隨時動態(tài)調(diào)整模型參數(shù),即可實時獲得實景三維模型勻光勻色可視化結(jié)果。二是工作量小,靈活性高。由于結(jié)果通過可視化方式在展示端呈現(xiàn),處理結(jié)果通常只保存具體參數(shù)即可,在顯示時利用三維平臺執(zhí)行勻光勻色算法得到勻色結(jié)果,用戶還可以保存多個結(jié)果參數(shù),實現(xiàn)不同勻色結(jié)果的快速保存,提高了靈活性。
實景三維模型通常采用OSG(OSG,OpenSceneGraph)格式[11],一個實景三維模型工程包含多個瓦塊,如圖4左所示。每個瓦塊包含多個細(xì)節(jié)層級LOD(Levels of Detail)模型,如圖4中所示。不同LOD包含的紋理,由于經(jīng)過了紋理重排,不是簡單的分辨率不同,而是幾乎完全不同的紋理,如圖4右所示L16和L18層級分別對應(yīng)的紋理,因此所有的紋理都需要勻光勻色。
圖4 實景模型文件結(jié)構(gòu)
在三維平臺中讀取每個實景三維瓦塊的不同LOD模型,形成可視化三維場景。三維場景繪制的核心是構(gòu)建場景樹和渲染狀態(tài)樹,場景樹描述了三維場景中模型的組織結(jié)構(gòu)和幾何形狀,而渲染狀態(tài)樹則決定了場景最終展現(xiàn)的樣式,例如透明度、顏色、紋理樣式等。渲染狀態(tài)集是渲染狀態(tài)樹中描述每個Drawable的繪制渲染的集合,利用OSG開源定義的三維模型的存儲格式及相應(yīng)的功能函數(shù),可以獲得每個繪制單元Drawable,然后得到幾何類型Geometry。
利用Geometry獲得紋理的方法如下:
Geometry
—StateSet
——Material
——Texture2D
———file "Tile_+001_+001_0.jpg"
首先,得到每個Geometry的渲染狀態(tài)集StateSet[11,12],然后在StateSet中通過獲得幾何體的材質(zhì)Material。材質(zhì)分成包含紋理和不包含紋理兩種方式,包含紋理的情況通常采用Texture2D來獲得[13,14],Texture2D存儲了模型幾何面與紋理的綁定信息,由此可以獲得具體的紋理名稱和紋理數(shù)據(jù)位置,進(jìn)而解析出紋理。
利用可編程管線可用于圖形處理、三維繪制以及高效計算等方面??删幊坦芫€的核心為GPU是針對圖形運(yùn)算而生的處理器,如今的主流游戲PC機(jī)都會有一個高性能的GPU。本文采用GPU可編程管線技術(shù),通過對勻色結(jié)果的顯示改變,實現(xiàn)勻光勻色可視化調(diào)整,而并不實際修改圖片,因此節(jié)約了磁盤IO,隨著參數(shù)的調(diào)整,可以迅速得到可視化結(jié)果。一個Opengl著色器(下簡稱著色器)由一個頂點著色器與片段著色器構(gòu)成,它們負(fù)責(zé)的工作大部分是不同的,僅有少部分交集。
在本文實景三維模型實時勻光勻色流程中,利用GPU編程可實現(xiàn)不同的勻光勻色方法。具體做法是在片元著色器中基于GPU編寫不同的算法,例如亮度、對比度調(diào)整等算法;編寫完成后,將調(diào)整參數(shù)作為一致性變量Uniform提供給外部應(yīng)用程序,作為用戶可調(diào)整的參數(shù),從而實現(xiàn)模型紋理色彩的快速調(diào)整。例如一種簡單的亮度與對比度調(diào)整方法,利用一致性變量Uniform傳入亮度與對比度調(diào)整參數(shù)b,c。
unifrom flaot b
unifrom flaot c
color.rgb=color.rgb*c+b
該算法僅依賴像素值計算即可實現(xiàn),通過傳入的調(diào)整參數(shù),即可得到最終顯示的像素color的rgb分量值。
其次,對于有些勻光勻色算法,例如色階調(diào)整,圖像曲線等,需要獲取整個場景的直方圖信息或者圖像平均灰度植等。此時首先獲取原始實景三維模型在當(dāng)前視口下的截圖,統(tǒng)計得到直方圖信息(也可以獲取多個視口的截圖,得到取平均統(tǒng)計值),然后作為統(tǒng)計參數(shù)傳入到片元著色器中基于GPU編寫算法。
傾斜模型是按瓦塊(Tile)為單元進(jìn)行建模的,因此在對三維場景進(jìn)行勻光勻色時,首先要明確勻光勻色的最小單元是一個實景三維瓦塊,可以利用三維引擎選中一個或多個需要同時調(diào)整的瓦塊,然后選擇不同的勻光勻色算法(例如亮度對比度、色階、曲線等),利用外部程序,通過調(diào)整一致性變量值(即參數(shù)值),實現(xiàn)勻光勻色方法的GPU計算,然后在可視化平臺中實時查看調(diào)整結(jié)果。通過不同實景瓦塊的調(diào)整,實現(xiàn)整個工程乃至多個工程的調(diào)整。通過不斷調(diào)整參數(shù),直到效果滿意為止,保存參數(shù)值。如圖5所示,實現(xiàn)了亮度、對比度、RGB分量調(diào)整,實時展示原始偏暗模型的不同調(diào)整結(jié)果。
圖5 實時勻光勻色處理器
對于同一個三維可視化平臺,可在場景加載和渲染時,使用勻光勻色器,調(diào)用保存的參數(shù)值,直接展示實景三維模型勻光勻色結(jié)果。此時還可以根據(jù)用戶不同的需求,進(jìn)行實時快速調(diào)整,從而提高實景模型處理效率。
其次,利用圖片處理技術(shù),實現(xiàn)與GPU編程相同的勻光勻色算法。遍歷實景三維模型瓦塊,導(dǎo)出每個瓦塊不同層級的紋理圖片,使用勻光勻色算法對紋理圖像進(jìn)行處理,最后得到勻光勻色后的實景三維模型成果,該成果可以被不同的三維平臺使用,數(shù)據(jù)處理的效率也比重新建模要更加便捷。
在進(jìn)行實景三維模型勻光勻色處理時,可以通過解析出每個瓦塊的圖像文件,然后利用圖像處理工具對圖像進(jìn)行處理,最后再寫入文件中,實行模型成果的勻光勻色。
比如利用Photoshop[15]軟件進(jìn)行處理,首先利用其處理基準(zhǔn)圖片,記錄處理動作,最后采用批處理工具,對所有的圖片進(jìn)行批量處理,得到勻光勻色結(jié)果。經(jīng)過測試,該方法優(yōu)點在于可以充分利用Photoshop各種強(qiáng)大的圖像處理算法,但由于一個實景三維模型工程包含了海量圖片文件(本項目測試數(shù)據(jù)原始影像分辨率 5 cm,1 km2模型文件包含約5萬張圖片),易造成處理效率不高、批處里出錯等情況,而且沒有顧及不同航攝批次的影像差異,同樣的批處理動作很難達(dá)到處理效果的一致性。而本文基于GPU編程的實景三維模型實時勻光勻色方法,并是一種所見即所得的實時勻光勻色方法,在解析模型結(jié)構(gòu)的基礎(chǔ)上,利用GPU編程實現(xiàn)勻光勻色方法,不需要對圖片進(jìn)行實際處理,只需要保存調(diào)整參數(shù)即可。該勻光勻色流程能滿足海量多源實景三維模型的實時勻光勻色,且針對不同的應(yīng)用需求,可靈活調(diào)節(jié)處理參數(shù),處理效率高,容錯性高。
可視化效果是三維場景的基本要求,本文面向?qū)嵕叭S模型后期勻光勻色需求,研究了實景三維模型勻光勻色方法,提出一種利用GPU編程實現(xiàn)的模型實時勻光勻色技術(shù),通過三維可視化平臺,實現(xiàn)實景模型的色彩快速調(diào)整。該方法主要優(yōu)勢是:一是減少了模型勻光勻色處理的復(fù)雜度,減少了模型重建的工作量;二是調(diào)整結(jié)果所見即所得,能夠快速得到用戶滿意的模型效果;三是該方法的相關(guān)結(jié)果可用于傳統(tǒng)圖片處理,遍歷處理并保存實景三維模型紋理,實現(xiàn)模型成果的延伸應(yīng)用。
由于實景三維模型的紋理與一般紋理圖像不同,是重排后的破碎紋理,丟失了原始照片的結(jié)構(gòu)信息,因此一些顧及周邊像素特點的遙感影像勻光勻色方法不能很好地適用,是可以進(jìn)一步優(yōu)化和改進(jìn)的方向。