專(zhuān)利名稱(chēng):一種在MultiGen-Vega中對(duì)場(chǎng)景圖進(jìn)行實(shí)時(shí)圖像處理的方法
技術(shù)領(lǐng)域:
本發(fā)明屬于虛擬現(xiàn)實(shí)和視景仿真領(lǐng)域,涉及在基于三維視景仿真軟件 MultiGen-Vega的視景系統(tǒng)中對(duì)場(chǎng)景圖進(jìn)行實(shí)時(shí)圖像處理的方法。
背景技術(shù):
MultiGen-Vega是美國(guó)MultiGen-Paradigm公司專(zhuān)門(mén)針對(duì)可視化仿真行業(yè)應(yīng)用特點(diǎn)開(kāi)發(fā)的實(shí)時(shí)可視化三維視景仿真軟件系統(tǒng)(本發(fā)明中稱(chēng)=MultiGen-Vega)。它最基本的功能是驅(qū)動(dòng)、控制、管理虛擬場(chǎng)景并支持快速?gòu)?fù)雜的視覺(jué)仿真系統(tǒng),快速創(chuàng)建各種實(shí)時(shí)交互的三維環(huán)境和虛擬現(xiàn)實(shí)系統(tǒng)。目前,Vega已經(jīng)應(yīng)用于城市規(guī)劃仿真、建筑設(shè)計(jì)漫游、飛行仿真、海洋仿真、地面戰(zhàn)爭(zhēng)模擬、車(chē)輛駕駛仿真、三維游戲開(kāi)發(fā)等方面并不斷向新的領(lǐng)域擴(kuò)展。隨著Vega的應(yīng)用日趨廣泛,在許多復(fù)雜的視景仿真應(yīng)用中,出現(xiàn)了一些新的仿真需求,對(duì)場(chǎng)景圖進(jìn)行一些簡(jiǎn)單的圖像處理就是其中一種。比如在CCD成像仿真系統(tǒng)中,為模擬出調(diào)焦的過(guò)程需要對(duì)場(chǎng)景圖進(jìn)行模糊化;在目標(biāo)跟蹤仿真系統(tǒng)中,需要對(duì)場(chǎng)景圖進(jìn)行邊緣檢測(cè)。然而Vega本身自帶的功能模塊和API (Application Program hterface,應(yīng)用程序接口 )中并沒(méi)有包含對(duì)場(chǎng)景圖進(jìn)行圖像處理的支持,同時(shí)由于實(shí)時(shí)性的要求,將場(chǎng)景圖保存為圖像數(shù)據(jù)然后按常規(guī)的方法進(jìn)行圖像處理也變得不可行。因此,對(duì)Vega進(jìn)行二次開(kāi)發(fā)以實(shí)現(xiàn)對(duì)場(chǎng)景圖的實(shí)時(shí)圖像處理成為一種需要。Vega本身是基于OpenGL的場(chǎng)景圖系統(tǒng),利用OpenGL圖像處理子集(OpenGL Imaging Subset)中的卷積濾波功能,可以實(shí)現(xiàn)對(duì)場(chǎng)景圖的一些圖像處理,包括模糊、銳化和邊緣檢測(cè)等。但卷積濾波所能進(jìn)行的處理只能以卷積的形式進(jìn)行處理,所能進(jìn)行的圖像處理種類(lèi)有限,而且速度慢無(wú)法應(yīng)用在實(shí)時(shí)視景仿真中。
發(fā)明內(nèi)容
本發(fā)明要解決的技術(shù)問(wèn)題是針對(duì)Vega自帶的功能模塊和API在對(duì)場(chǎng)景進(jìn)行圖像處理方面的不足,對(duì)Vega進(jìn)行二次開(kāi)發(fā)。提出一種在MultiGen-Vega中實(shí)時(shí)對(duì)場(chǎng)景圖進(jìn)行圖像處理的方法,該方法基于Vega系統(tǒng)的結(jié)構(gòu)、Vega的通道回調(diào)機(jī)制以及現(xiàn)代圖形硬件強(qiáng)大的圖形能力和可編程性,在Vega系統(tǒng)中利用GLSL編寫(xiě)的片元著色器代替OpenGL的固定紋理映射功能,在進(jìn)行紋理映射的同時(shí)完成對(duì)紋理的圖像處理操作,最終產(chǎn)生經(jīng)過(guò)處理的場(chǎng)景圖。從而實(shí)現(xiàn)對(duì)Vega系統(tǒng)場(chǎng)景圖的實(shí)時(shí)圖像處理。本發(fā)明的技術(shù)方案是一種在MultiGen-Vega中對(duì)場(chǎng)景圖進(jìn)行實(shí)時(shí)圖像處理的方法,其特征在于包括以下步驟,其流程圖如圖1所示(1)利用三維實(shí)景仿真系統(tǒng)Vega提供的API函數(shù)vgAddFunc,對(duì)場(chǎng)景所屬通道創(chuàng)建標(biāo)識(shí)為VGCHAN_POSTDRAW的通道回調(diào)函數(shù);(2)利用OpenGL著色語(yǔ)言GLSL編寫(xiě)片元著色器,所述片元著色器能對(duì)傳入的紋理進(jìn)行像素操作實(shí)現(xiàn)對(duì)紋理的圖像處理;
(3)在場(chǎng)景圖的渲染過(guò)程中,每當(dāng)場(chǎng)景圖在幀緩存中繪制好后,步驟(1)中創(chuàng)建的回調(diào)函數(shù)將被調(diào)用,此時(shí)場(chǎng)景圖還未顯示出來(lái),因此可以在此回調(diào)函數(shù)中對(duì)場(chǎng)景圖進(jìn)行圖像處理,當(dāng)調(diào)用結(jié)束后就可以顯示經(jīng)過(guò)了圖像處理的場(chǎng)景圖;(4)在回調(diào)函數(shù)中將場(chǎng)景圖通過(guò)相關(guān)OpenGL函數(shù)保存為二維紋理,通過(guò)GLSL中的 uniform變量機(jī)制將此紋理傳遞給步驟O)的片元著色器;(5)在回調(diào)函數(shù)中啟用步驟O)的片元著色器,通過(guò)OpenGL相關(guān)函數(shù)畫(huà)與場(chǎng)景相同大小的矩形覆蓋整個(gè)場(chǎng)景,也即替換了場(chǎng)景,并將場(chǎng)景圖紋理映射到此矩形上;(6)在步驟(5)中,啟用的片元著色器代替了 OpenGL的固定紋理映射功能,因此將場(chǎng)景圖紋理映射到矩形上實(shí)際上是由著色器完成的,而著色器中又添加了對(duì)紋理的像素操作,此像素操作也就是對(duì)紋理的圖像處理,因而映射完成后得到的矩形就是經(jīng)過(guò)了圖像處理的場(chǎng)景圖;(7)完成映射后,需要禁用片元著色器,經(jīng)過(guò)圖像處理的場(chǎng)景被顯示出來(lái),當(dāng)前幀的處理完成;(8)重復(fù)進(jìn)行步驟C3)至(7),完成后續(xù)幀的渲染。所述步驟O)中片元著色器對(duì)紋理進(jìn)行的像素操作是著色器所能夠?qū)崿F(xiàn)的所有像素操作,包括高通濾波、低通濾波、傅里葉變換等,所實(shí)現(xiàn)的圖像處理效果包括銳化、模糊、邊緣檢測(cè)、腐蝕和膨脹等。本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)點(diǎn)1、充分利用了現(xiàn)代圖形硬件強(qiáng)大的圖形能力和可編程性,通過(guò)其編程語(yǔ)言GLSL 編寫(xiě)片元著色器讓圖形硬件完成圖像處理操作,處理速度極快滿(mǎn)足實(shí)時(shí)性的要求;2、具有極大的靈活性,在片元著色器中可以根據(jù)需要進(jìn)行不同的像素處理以實(shí)現(xiàn)不同的圖像處理操作,還可以結(jié)合頂點(diǎn)著色器實(shí)現(xiàn)更為復(fù)雜的效果;3、本方法還可以用在其它的基于OpenGL的場(chǎng)景圖系統(tǒng)。
圖1為本發(fā)明方法的步驟流程框圖;圖2為本發(fā)明的具體實(shí)現(xiàn)流程圖;圖3為本發(fā)明實(shí)現(xiàn)的幾種圖像處理效果的實(shí)驗(yàn)仿真圖,其中圖3(a)的圖像處理處理效果為模糊,圖3(b)為銳化、圖3 (c)為邊緣檢測(cè),圖3(d)為膨脹,圖3(e)為侵蝕,圖 3(f)則是沒(méi)有進(jìn)行任何圖像處理的原始場(chǎng)景。
具體實(shí)施例方式本發(fā)明基于Vega系統(tǒng)的結(jié)構(gòu)、Vega的通道回調(diào)機(jī)制以及現(xiàn)代圖形硬件強(qiáng)大的圖形能力和可編程性,在Vega系統(tǒng)中利用GLSL編寫(xiě)的片元著色器代替OpenGL的固定紋理映射功能,在進(jìn)行紋理映射的同時(shí)完成對(duì)紋理的圖像處理操作,最終產(chǎn)生經(jīng)過(guò)處理的場(chǎng)景圖。 其具體流程圖如圖2所示,具體步驟如下(1)初始化Vega系統(tǒng);(2)用GLSL編寫(xiě)片元著色器,此著色器對(duì)傳入的紋理進(jìn)行像素操作,完成對(duì)傳入紋理的圖像處理操,在Vega系統(tǒng)中對(duì)此片元著色器進(jìn)行創(chuàng)建、編譯和鏈接,等需要使用的時(shí)候就可以啟用;(3)對(duì)場(chǎng)景所屬的通道注冊(cè)標(biāo)識(shí)為“VGCHAN_POSTDRAW”的回調(diào)函數(shù),具體語(yǔ)句為vgAddFunc (channel, VGCHAN_POSTDRAff, MyCalIbackFunc,MyData);其中,channel 就是需要進(jìn)行圖像處理的場(chǎng)景所屬的通道,MyCallbackFunc就是注冊(cè)的回調(diào)函數(shù),MyData 是用戶(hù)可能需要用到的一些自定義數(shù)據(jù);(4)在Vega系統(tǒng)進(jìn)行場(chǎng)景渲染的過(guò)程中,當(dāng)前幀場(chǎng)景在幀緩存中繪制完成之后, 步驟(3)中的MyCalIkickFimc回調(diào)函數(shù)將被調(diào)用,此時(shí)當(dāng)前幀場(chǎng)景還沒(méi)有顯示在屏幕上; 之后的處理將在此函數(shù)中進(jìn)行;(5)使用OpenGL函數(shù)glCopyTexImage2D (僅在第一幀使用這個(gè)函數(shù))或者函數(shù) glCopyTexSublmagdD(第一幀之后使用)將存儲(chǔ)在幀緩存中的場(chǎng)景圖保存為二維紋理;(6)在程序中啟用步驟O)的片元著色器,并通過(guò)GLSL的內(nèi)置變量將步驟(5)保存的場(chǎng)景紋理傳遞給著色器;(7)通過(guò)OpenGL相關(guān)函數(shù)畫(huà)與場(chǎng)景相同大小的矩形覆蓋場(chǎng)景,并將場(chǎng)景紋理映射到此矩形上;紋理大小與矩形大小一樣,映射將是一個(gè)紋素對(duì)應(yīng)一個(gè)像素;(8)在映射的過(guò)程中,啟用的片元著色器代替了 OpenGL的固定紋理映射功能,將場(chǎng)景圖紋理映射到矩形上實(shí)際上是由著色器完成的;而著色器中又添加了對(duì)紋理的像素操作,此像素操作也就是對(duì)紋理的圖像處理,因此映射完成后得到的矩形就是經(jīng)過(guò)了圖像處理的場(chǎng)景圖;要完成何種樣的圖像處理則取決于編寫(xiě)的片元著色器中像素操作的內(nèi)容;(9)映射完成后,禁用片元著色器,否則會(huì)影響到下一幀Vega自身的一些紋理映射;回調(diào)函數(shù)調(diào)用結(jié)束,經(jīng)過(guò)了圖像處理的場(chǎng)景圖顯示出來(lái),當(dāng)前幀的處理完成;(10)重復(fù)完成步驟(4)至步驟(9),實(shí)現(xiàn)一后續(xù)幀的場(chǎng)景渲染。利用本方法對(duì)Vega系統(tǒng)場(chǎng)景圖進(jìn)行幾種圖像處理的實(shí)驗(yàn)仿真圖如圖2所示,圖 2(a)至(f)依次為模糊、銳化、邊緣檢測(cè)、膨脹、侵蝕和原始場(chǎng)景。圖2中每種效果的場(chǎng)景圖的分辨率為10MX1024,整個(gè)場(chǎng)景都進(jìn)行了圖像處理,每一幀的繪制時(shí)間都不超過(guò)5ms,有的甚至少于ans,完全滿(mǎn)足實(shí)時(shí)性的要求。于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō)可顯而易見(jiàn)的得出其他優(yōu)點(diǎn)和修改。因此,具有更廣方面的本發(fā)明并不局限于這里所示出的并且所描述的具體說(shuō)明及示例性實(shí)施例。因此, 在不脫離由隨后權(quán)利要求及其等價(jià)體所定義的一般發(fā)明構(gòu)思的精神和范圍的情況下,可對(duì)其作出各種修改。
權(quán)利要求
1.一種在MultiGen-Vega中對(duì)場(chǎng)景圖進(jìn)行實(shí)時(shí)圖像處理的方法,其特征在于包括以下步驟(1)利用三維實(shí)景仿真系統(tǒng)Vega提供的API函數(shù)vgAddFimc,對(duì)場(chǎng)景所屬通道創(chuàng)建標(biāo)識(shí)為VGCHAN_POSTDRAW的通道回調(diào)函數(shù);(2)利用OpenGL著色語(yǔ)言GLSL編寫(xiě)片元著色器,所述片元著色器能對(duì)傳入的紋理進(jìn)行像素操作實(shí)現(xiàn)對(duì)紋理的圖像處理;(3)在場(chǎng)景圖的渲染過(guò)程中,每當(dāng)場(chǎng)景圖在幀緩存中繪制好后,步驟(1)中創(chuàng)建的回調(diào)函數(shù)將被調(diào)用,此時(shí)場(chǎng)景圖還未顯示出來(lái),因此可以在此回調(diào)函數(shù)中對(duì)場(chǎng)景圖進(jìn)行圖像處理,當(dāng)調(diào)用結(jié)束后就可以顯示經(jīng)過(guò)了圖像處理的場(chǎng)景圖;(4)在回調(diào)函數(shù)中將場(chǎng)景圖通過(guò)相關(guān)OpenGL函數(shù)保存為二維紋理,通過(guò)GLSL中的 uniform變量機(jī)制將此紋理傳遞給步驟O)的片元著色器;(5)在回調(diào)函數(shù)中啟用步驟O)的片元著色器,通過(guò)OpenGL相關(guān)函數(shù)畫(huà)與場(chǎng)景相同大小的矩形覆蓋整個(gè)場(chǎng)景,也即替換了場(chǎng)景,并將場(chǎng)景圖紋理映射到此矩形上;(6)在步驟(5)中,啟用的片元著色器代替了OpenGL的固定紋理映射功能,因此將場(chǎng)景圖紋理映射到矩形上實(shí)際上是由著色器完成的,而著色器中又添加了對(duì)紋理的像素操作, 此像素操作也就是對(duì)紋理的圖像處理,因而映射完成后得到的矩形就是經(jīng)過(guò)了圖像處理的場(chǎng)景圖;(7)完成映射后,需要禁用片元著色器,經(jīng)過(guò)圖像處理的場(chǎng)景被顯示出來(lái),當(dāng)前幀的處理完成;(8)重復(fù)進(jìn)行步驟C3)至(7),完成后續(xù)幀的渲染。
2.根據(jù)權(quán)利要求1所述的對(duì)場(chǎng)景圖進(jìn)行實(shí)時(shí)圖像處理的方法,其特征在于所述步驟 (2)中片元著色器對(duì)紋理進(jìn)行的像素操作是著色器所能夠?qū)崿F(xiàn)的所有像素操作,包括高通濾波、低通濾波、傅里葉變換等,所實(shí)現(xiàn)的對(duì)紋理圖像處理包括銳化、模糊、邊緣檢測(cè)、腐蝕和膨脹等。
全文摘要
一種在MultiGen-Vega中對(duì)場(chǎng)景圖進(jìn)行實(shí)時(shí)圖像處理的方法在Vega中,對(duì)場(chǎng)景所屬通道創(chuàng)建回調(diào)函數(shù);通過(guò)OpenGL著色語(yǔ)言GLSL編寫(xiě)片元著色器,其功能是對(duì)傳入的紋理進(jìn)行像素操作;在回調(diào)函數(shù)中將場(chǎng)景圖保存為紋理;啟用片元著色器,通過(guò)紋理映射用場(chǎng)景圖紋理覆蓋場(chǎng)景圖;片元著色器將代替OpenGL的固定紋理映射功能,在映射的同時(shí)完成對(duì)紋理的圖像處理,覆蓋后的場(chǎng)景圖就是經(jīng)過(guò)圖像處理的。本發(fā)明利用了現(xiàn)代圖形硬件強(qiáng)大的圖形能力實(shí)時(shí)的完成對(duì)Vega場(chǎng)景圖的圖像處理;具有靈活性,在片元著色器中可進(jìn)行各種像素操作實(shí)現(xiàn)各種圖像處理效果,結(jié)合頂點(diǎn)著色器還能實(shí)現(xiàn)更為復(fù)雜的效果;同時(shí)也可以用在其它的基于OpenGL的場(chǎng)景圖系統(tǒng)。
文檔編號(hào)G06F9/44GK102306097SQ20111023047
公開(kāi)日2012年1月4日 申請(qǐng)日期2011年8月12日 優(yōu)先權(quán)日2011年8月12日
發(fā)明者付承毓, 劉興法, 熊帥 申請(qǐng)人:中國(guó)科學(xué)院光電技術(shù)研究所