周 岳 王 銳 曾文勝
(廣東省鐵路規(guī)劃設(shè)計(jì)院有限公司,廣東 廣州 510600)
隨著勘測(cè)技術(shù)的發(fā)展,高精度衛(wèi)航片的獲取成本越來(lái)越低,開(kāi)始廣泛應(yīng)用于鐵路選線設(shè)計(jì)[1-2]。將高精度衛(wèi)片、航片作為選線設(shè)計(jì)的底圖,可以形象、直觀、準(zhǔn)確地感知線路與周圍環(huán)境的空間關(guān)系,尤其是在居民區(qū)、既有路網(wǎng)、管線較多的復(fù)雜區(qū)域;同時(shí)還可以顯著提升線路方案的出圖、匯報(bào)、展示效果。
線路設(shè)計(jì)具有點(diǎn)多、線長(zhǎng)、面廣的特點(diǎn),研究范圍動(dòng)輒萬(wàn)平方公里級(jí)[3]。將沿線高精度衛(wèi)航片一次性全部加載到選線系統(tǒng),目前的硬件條件難以滿足該要求。而且AutoCAD 本身對(duì)插入的參照?qǐng)D片總大小有一定限制,只能加載少量的圖片。因此,現(xiàn)在的高清衛(wèi)片航片只能用于小范圍局部方案的調(diào)整;而且還需要不停地手動(dòng)加載、卸載衛(wèi)航片,操作極為煩瑣。另外在大范圍選線時(shí),設(shè)計(jì)人員需要感知宏觀層面的高山、河流、城鎮(zhèn)分布,高精度的衛(wèi)航片反而無(wú)法滿足要求。
為最大程度發(fā)揮高清衛(wèi)航片的作用,突破AutoCAD 平臺(tái)對(duì)參照?qǐng)D片內(nèi)存的限制,該研究建立了多層次細(xì)節(jié)衛(wèi)航片模型,提出與視口相關(guān)的衛(wèi)航片調(diào)度方法,構(gòu)建自動(dòng)加載、卸載模式,在選線過(guò)程中,能夠?qū)崟r(shí)、流暢、大規(guī)模地顯示衛(wèi)航片。
選線設(shè)計(jì)過(guò)程中既需要反映宏觀特征的粗分辨率模型,也需要刻畫(huà)局部細(xì)節(jié)的高分辨率模型。單一細(xì)節(jié)層次的衛(wèi)航片顯然無(wú)法滿足需求,該研究借鑒Open Scene Graph中對(duì)地形的處理模式[3],建立了多層次細(xì)節(jié)衛(wèi)航片模型。
假設(shè)大范圍高清衛(wèi)航片的大小為r0×c0像素的圖片M0,無(wú)法一次性加載到AutoCAD 中。而滿足在AutoCAD 中可快速加載和順暢交互的正方形圖片的像素為n×n。我們可將原始衛(wèi)航片M0分割為n×n一系列像素的小圖片陣列。該陣列的圖片數(shù)為R0行、C0列。
R0=[r0/n]
C0=[c0/n]
由于r0、c0極有可能無(wú)法被n整除,因此上述公式為商值向上取整,而對(duì)不能整除的像素則可用RGB(0,0,0)來(lái)填充。
該圖像陣列是由原始圖像無(wú)損分割而成,筆者稱其為第0 層圖像陣列,記為M0,其中的第i行,j列的圖像記為M0i,j。注意,該處的行、列號(hào)i,j從0 開(kāi)始。該層圖像在選線設(shè)計(jì)需要最精細(xì)數(shù)據(jù)時(shí)加載到AutoCAD。在第0 層圖像陣列之上,該研究將采用圖像重采樣的方式,生成逐層粗糙的多細(xì)節(jié)層次圖像陣列,具體方法如下。
如圖1,從圖像陣列的左下角開(kāi)始,至下而上,自左往右,逐行掃描,每2×2 個(gè)圖像合并成一個(gè)新圖像且新圖像像素?cái)?shù)量n×n保持不變,即:第0 層的M00,0,M00,1,M01,0,M01,1合并為第1 層的M10,0;M10,0,M10,1,M11,0,M11,1,再合并成第2 層的M20,0;最終第2 層的4 個(gè)圖像合并成M30,0。需要注意的是,如果行、列數(shù)不是偶數(shù),可以在最上面或者最右側(cè)增加一行或者一列RGB(0,0,0)的空白圖像。設(shè)第k層i行,j列的圖像Mk i,j,則第k+1 層,j列的圖像Mk+1i,j的函數(shù)如下。
圖1 多層次細(xì)節(jié)圖像
F為像素重采樣函數(shù)。該研究采用圖像處理中計(jì)算速度與圖像質(zhì)量較為均衡的雙線性插值法[4]來(lái)計(jì)算重采樣后的每個(gè)像素RGB值。
采樣上述方法不斷對(duì)圖像進(jìn)行重采樣,每次采樣圖片數(shù)量都只剩下1/4,每個(gè)圖片都增大到上一層的4 倍,經(jīng)過(guò)L層的重采樣,最終形成一張分辨率低的可以快速調(diào)入AutoCAD 的n×n像素圖像ML。此時(shí),可以將所有的分層圖像采用如圖2 的四叉樹(shù)進(jìn)行存儲(chǔ),每個(gè)節(jié)點(diǎn)內(nèi)存儲(chǔ)一個(gè)圖像,并記錄下該圖像的層級(jí)k,圖像陣列中的行號(hào)i,列號(hào)j。每個(gè)父節(jié)點(diǎn)的范圍剛好完全包括下屬4 個(gè)子節(jié)點(diǎn)且精細(xì)程度增加一倍,從而形成了一個(gè)多層次的細(xì)節(jié)模型。
圖2 多層次四叉樹(shù)結(jié)構(gòu)
在AutoCAD 內(nèi)定線時(shí),當(dāng)需要進(jìn)行宏觀線位規(guī)劃時(shí),設(shè)計(jì)人員通常會(huì)將視口拉遠(yuǎn),希望從衛(wèi)航片中看到高山、河流、城市邊界;而在進(jìn)行細(xì)部的曲線半徑、緩長(zhǎng)調(diào)整時(shí),通常會(huì)將視口拉近,希望看到細(xì)節(jié)的房屋、道路等。不同層次細(xì)節(jié)的模型前面已經(jīng)建立,為滿足上述需求,還需要建立一套視相關(guān)調(diào)度方法。
在實(shí)時(shí)瀏覽和縮放AutoCAD 繪圖窗口過(guò)程中,筆者可以通過(guò)ObjectARX 開(kāi)發(fā)包獲取AutoCAD 繪圖窗口的大地坐標(biāo)及在屏幕上的像素坐標(biāo)。設(shè)左下角PLB點(diǎn)的大地坐標(biāo)、屏幕像素坐標(biāo)分別為(xLB,yLB),(HLB,HLB);右上角點(diǎn)PRU的大地坐標(biāo)、屏幕像素坐標(biāo)分別為(xRU,yRU),(HRU,HRU)。則屏幕上1 個(gè)像素代表的AutoCAD 中圖形的實(shí)際長(zhǎng)度如下。
dpp=(xRU-xLB)/(HRU-HLB)
如果要完全無(wú)損地在AutoCAD 中展現(xiàn)衛(wèi)航圖像,dpp應(yīng)大于當(dāng)前加載的衛(wèi)航片的圖像的精度。設(shè)衛(wèi)航片的原始測(cè)繪精度為d0,第k級(jí)時(shí)衛(wèi)航片精度為d0×2k,應(yīng)滿足以下條件。
d0×2k 考慮到實(shí)際選線設(shè)計(jì)過(guò)程中,設(shè)計(jì)人員并不會(huì)分辨平面上每個(gè)像素點(diǎn),往往2×2 個(gè)甚至4×4 個(gè)像素點(diǎn)范圍內(nèi)有1 個(gè)衛(wèi)航片像素點(diǎn)即可滿足要求。因此可在上述公式的dpp前乘以1 個(gè)容許模糊系數(shù)f。 通過(guò)上述的視相關(guān)調(diào)度方法,可以計(jì)算出與用戶AutoCAD 視口相關(guān)的且最少數(shù)量的圖像文件。在真正的定線過(guò)程中,還需要一套自適應(yīng)動(dòng)態(tài)調(diào)度機(jī)制來(lái)管理這些圖像文件的加載、卸載,使AutoCAD 的圖像占用內(nèi)存始終處于一個(gè)合理的范圍,從而保證在各類交互式定線過(guò)程中能夠流暢地顯示與刷新圖像。 該研究在動(dòng)態(tài)加載機(jī)制中記錄了上次已載入AutoCAD的所有圖像集合UPre,圖像的層級(jí)k,該視口變化需要增加和刪除的圖像集合UAdd,UDel,AutoCAD 最大容許加載圖像數(shù)量Nmax,并對(duì)AutoCAD 的視口進(jìn)行實(shí)時(shí)監(jiān)控,只要視口發(fā)生變化就將進(jìn)入以下流程:1)如果視口只進(jìn)行了平移,表明無(wú)須更改圖像層級(jí),此時(shí)可根據(jù)平移量與第kk層圖像大小之間的關(guān)系,只遍歷UM附近的圖像,計(jì)算與新視口是否存在交集,可快速確定需要增加的圖像集合UAdd和可刪除的圖像集合UDel,轉(zhuǎn)步驟3);2)如果視口發(fā)生縮放,此時(shí)需根據(jù)視相關(guān)調(diào)度算法計(jì)算新的圖像層級(jí)k以及需要增加的圖像集合UAdd和可刪除的圖像集合UDel;轉(zhuǎn)步驟3);3)考慮到圖像的加載和刪除需要申請(qǐng)和釋放資源,速度較慢,因此優(yōu)先使用更新圖像的方法,分以下幾種情況處理。①當(dāng)UPre+UAdd的圖像數(shù)量 通過(guò)上述自適應(yīng)動(dòng)態(tài)加載機(jī)制,可以用較小的代價(jià)將實(shí)時(shí)定線過(guò)程中最關(guān)心的衛(wèi)航片加載到AutoCAD。 基于上述的原理與方法,該研究采用Visual Studio 2012、ObjectARXARX2016 開(kāi)發(fā)了運(yùn)行于AutoCAD2016 的大規(guī)模衛(wèi)航片自適應(yīng)動(dòng)態(tài)加載程序,可對(duì)高精度衛(wèi)航片進(jìn)行自動(dòng)分割、重采樣,建立多層次細(xì)節(jié)的圖像模型;在定線過(guò)程中,可以根據(jù)用戶的視角、視口自動(dòng)加載定線關(guān)系的衛(wèi)航片資源(如圖3),幫助設(shè)計(jì)人員形象直觀地判定線路與周圍環(huán)境的關(guān)系,提高選線設(shè)計(jì)效率。 圖3 自適應(yīng)動(dòng)態(tài)加載的選線衛(wèi)航片 將高精度衛(wèi)片、航片作為選線設(shè)計(jì)的底圖,可以形象、直觀、準(zhǔn)確地感知線路與周圍環(huán)境的空間關(guān)系,顯著提升線路方案的出圖、匯報(bào)、展示效果。但選線設(shè)計(jì)常用的AutoCAD平臺(tái)無(wú)法直接加載大規(guī)模的衛(wèi)航片資源。為破解該難題,該文建立多層次細(xì)節(jié)衛(wèi)航片模型,提出視相關(guān)的圖像調(diào)度方法,構(gòu)建自適應(yīng)動(dòng)態(tài)加卸載模式,編制了AutoCAD 衛(wèi)航片自動(dòng)加載插件,在選線過(guò)程中,可以大規(guī)模、實(shí)時(shí)、流暢地顯示衛(wèi)航片,輔助提升了選線設(shè)計(jì)的效率與質(zhì)量。該技術(shù)不僅可用于鐵路選線設(shè)計(jì),也適用于在AutoCAD 平臺(tái)上開(kāi)展的公路、電力、管道等設(shè)計(jì),具有廣闊的應(yīng)用前景。3 衛(wèi)航片自適應(yīng)動(dòng)態(tài)加卸載
4 程序開(kāi)發(fā)與應(yīng)用
5 結(jié)語(yǔ)