秦 中
(遵義師范學(xué)院信息工程學(xué)院,貴州 遵義 563006)
采用計(jì)算機(jī)圖像模擬地表面場(chǎng)景具有較廣闊的應(yīng)用范圍,若能熟練應(yīng)用立體影像貼圖模擬技術(shù),亦可滿足地理信息系統(tǒng)設(shè)計(jì)的若干技術(shù)需求。相對(duì)于復(fù)雜曲面的場(chǎng)景處理技巧而言,球面紋理貼圖方法雖然有些復(fù)雜[1],卻是一種可以通過(guò)漸變方式加以處理的較規(guī)則類型[2,3]。
近些年來(lái)出現(xiàn)的新型立體環(huán)繞掃描成像技術(shù),可以高效率地支持一次性直接獲得物體外表面、周圍場(chǎng)景的環(huán)繞影像[4]。該項(xiàng)技術(shù)由于依靠專用硬件及其所屬影像數(shù)據(jù)結(jié)構(gòu)的處理軟件,在推廣應(yīng)用時(shí)難免會(huì)受到一些約束。
在球面上進(jìn)行立體影像貼圖,比較常見(jiàn)的方法之一就是將三維曲面細(xì)劃分為若干微小的準(zhǔn)平面矩形塊,然后根據(jù)空間坐標(biāo)對(duì)應(yīng)關(guān)系,給每個(gè)小矩形塊都貼上對(duì)應(yīng)的影像塊,構(gòu)建出球形立體表面的效果,即達(dá)到了球面紋理貼圖的目的。
在對(duì)地表面影像進(jìn)行準(zhǔn)確分析運(yùn)算處理之前,需要為具體的一幅影像建立確定的平面坐標(biāo)系。在此坐標(biāo)系內(nèi),理論上可以給影像內(nèi)的每一個(gè)像素點(diǎn)確定唯一的二維坐標(biāo),并與像素點(diǎn)的RGB數(shù)據(jù)構(gòu)成可匹配的聯(lián)結(jié)關(guān)系。
在實(shí)際操作測(cè)試時(shí),針對(duì)每一幅具體的平面影像,可以采取規(guī)則切分的矩形圖塊像素批量處理方法,以簡(jiǎn)化操作程序或者減少程序運(yùn)算量。
對(duì)于已經(jīng)定格于平面坐標(biāo)系內(nèi)的目標(biāo)柵格影像,可以分別沿其長(zhǎng)、寬方向按確定的等長(zhǎng)度單位,將影像切分為面積大小相同的若干圖塊。于是,該影像就成為了被切分后的、由若干細(xì)小矩形圖像塊組成的集合體。
據(jù)此切分獲得的每小塊圖像的四個(gè)頂點(diǎn)坐標(biāo)值,可以通過(guò)計(jì)算獲得。由于圖像內(nèi)各像素點(diǎn)的顏色數(shù)據(jù)是與坐標(biāo)系綁定而聯(lián)結(jié)在一起的,所編程序就可以根據(jù)每個(gè)圖像塊的四個(gè)頂點(diǎn)坐標(biāo),分別調(diào)用各個(gè)圖像塊內(nèi)像素點(diǎn)的RGB數(shù)值了。
在劃分球體表面之前,需要先給球體建立球面坐標(biāo)系。由于球面坐標(biāo)系內(nèi)的球面上各點(diǎn)都有唯一的經(jīng)緯度坐標(biāo),于是可以為地表面影像內(nèi)的對(duì)應(yīng)測(cè)試點(diǎn)賦予相同的經(jīng)緯度值。另一方面,經(jīng)緯網(wǎng)“矩形塊”的劃分方法是沿經(jīng)緯線方向分別進(jìn)行等角度劃分的,球面上的測(cè)試點(diǎn)坐標(biāo)也需要換算為三維坐標(biāo)表示,才能更好地體現(xiàn)相同測(cè)試點(diǎn)在球面、平面影像的坐標(biāo)對(duì)應(yīng)關(guān)系。正因?yàn)閮煞N坐標(biāo)之間存在一一對(duì)應(yīng)關(guān)系,就可為其建立空間坐標(biāo)關(guān)聯(lián)換算公式。
球體三維直角坐標(biāo)系的建立,是以球心為原點(diǎn),但要求Z軸與南北極的連線重合,XOY平面位于赤道面上,X軸必須經(jīng)過(guò)零度經(jīng)線與赤道面的交點(diǎn)。在此基礎(chǔ)之上,分別計(jì)算擬測(cè)試點(diǎn)在XYZ軸上的坐標(biāo)值,即可獲得球面上各點(diǎn)的三維坐標(biāo)(x、y、z),換算公式如下:
x[i][j]=radius*(float)(cos((float)i*PI)*sin((float)j*PI));
y[i][j]=radius*(float)(sin((float)i*PI));
z[i][j]=radius*(float)(cos((float)i*PI)*cos((float)j*PI));
式中:radius為球體半徑;i,j為緯度/經(jīng)度;PI為圓周率;float按浮點(diǎn)精度運(yùn)算。
整個(gè)球體表面按經(jīng)緯網(wǎng)劃分為若干個(gè)近似的矩形塊,但是在南北極點(diǎn)(N/S)則表現(xiàn)為環(huán)繞的三角面,這是因?yàn)榇颂幍木匦螇K有兩個(gè)角點(diǎn)為重合關(guān)系(圖1)。球體表面上經(jīng)過(guò)劃分獲得的每個(gè)準(zhǔn)矩形塊(梯形塊),都可以用四個(gè)頂點(diǎn)的三維坐標(biāo)來(lái)標(biāo)識(shí) (極點(diǎn)位置只需要三個(gè)坐標(biāo)點(diǎn))。
圖1 平面影像切分與球面經(jīng)緯網(wǎng)相對(duì)應(yīng)
整個(gè)球面被劃分為經(jīng)緯網(wǎng)格的同時(shí),也就與平面影像塊之間建立了對(duì)應(yīng)的關(guān)系。根據(jù)球面與影像對(duì)應(yīng)關(guān)系的一致性劃分結(jié)果及坐標(biāo)轉(zhuǎn)換公式[5],就可以編寫程序來(lái)計(jì)算兩種坐標(biāo)系間各測(cè)試點(diǎn)的坐標(biāo)轉(zhuǎn)換關(guān)系了。
由于平面圖像塊之間表現(xiàn)為左右、上下的延展關(guān)系,而球面上的圖像塊為環(huán)形閉合關(guān)系,因此在處理矩形塊間的對(duì)應(yīng)關(guān)系時(shí),程序必須明確兩者的起點(diǎn)和終點(diǎn),以便于在平面影像與球面之間形成可完全覆蓋的關(guān)系。
通過(guò)編程實(shí)現(xiàn)所切分影像塊的貼圖,也就是將圖塊對(duì)應(yīng)地繪制(填充)到球面上相應(yīng)位置的矩形塊內(nèi)(變形難免)。這在Visual C++編程環(huán)境內(nèi)測(cè)試時(shí),需要調(diào)用OpenGL繪圖函數(shù)進(jìn)行紋理貼圖,其中使用的繪圖函數(shù)主要有:加載圖像文件函數(shù)auxDIBI-mageLoad()、生成紋理索引 glGenTextures()、綁定圖像或紋理glBindTexture()、2D紋理映射gluBuild2 DMipmaps()等。
此影像貼圖方法處理的是球面與平面影像的矩形塊坐標(biāo)匹配,程序執(zhí)行時(shí)的處理方法為:將球面矩形塊按對(duì)角線劃分為兩個(gè)三角面,分別對(duì)其進(jìn)行映射貼圖。此貼圖方式可處理“矩形塊”四個(gè)頂點(diǎn)不在同一平面上的情況[6]。在極點(diǎn)(N/S)處只須按一個(gè)“三角面”處理更為簡(jiǎn)化。
球面3D影像的貼圖效果還與比例尺(分辨率)放大或縮小的尺度以及變形處理方法有關(guān)。對(duì)照?qǐng)D1可以看出,從原點(diǎn)O分別向N/S方向“投影”到球面上時(shí),表現(xiàn)為從“矩形塊”逐漸過(guò)渡到“梯形面”“三角面”的情形。因此,越是靠近極點(diǎn)(N/S),受影像變形影響的幅度將會(huì)更加顯著,那需要另作處理。
為了使得影像貼圖具有清晰的顯示效果,應(yīng)當(dāng)盡量調(diào)整平面柵格圖像與球面“矩形塊”之間的尺度范圍一致。除了受影像本身變形影響外,貼圖后的球面放大或縮小的比例,也會(huì)影響到圖像的分辨率[7]。
利用OpenGL提供的圖像處理函數(shù),測(cè)試了將平面影像貼圖到球面的編程模擬實(shí)現(xiàn)方法,并對(duì)球面影像模擬顯示方法進(jìn)行了分析說(shuō)明。這對(duì)于編程實(shí)現(xiàn)任意曲面的模擬效果及空間貼圖的技巧練習(xí)具有參考意義。值得一提的是,由于空間坐標(biāo)變換處理方法不同、影像變形處理等原因,難免存在顯示效果模糊的現(xiàn)象,這也是在程序設(shè)計(jì)時(shí)需要考慮的處理技巧之一。
由于沒(méi)有考慮影像插值的處理技巧,本次測(cè)試效果難免存在邊緣變形等諸多缺陷。采用此編程測(cè)試方案對(duì)復(fù)雜球面(曲面)進(jìn)行了較詳細(xì)的圖塊劃分處理,以及空間場(chǎng)景的模擬貼圖實(shí)現(xiàn),雖然還存在一些問(wèn)題,但對(duì)于3D影像的編程貼圖練習(xí)仍然是值得參考的捷徑之一。將來(lái)在此基礎(chǔ)上,再以更加精準(zhǔn)優(yōu)化的算法測(cè)試變形處理及分辨率等問(wèn)題,估計(jì)效果會(huì)更好。