[摘要]首先分析了攝影仿真系統(tǒng)目的和功能。然后闡述系統(tǒng)實(shí)現(xiàn)中的主要技術(shù),重點(diǎn)探討了彈出式功能菜單的實(shí)現(xiàn)、焦距調(diào)節(jié)和照片生成技術(shù)。測(cè)試結(jié)果表明系統(tǒng)運(yùn)行穩(wěn)定,能實(shí)時(shí)生成照片。系統(tǒng)為虛擬實(shí)驗(yàn)的開發(fā)和應(yīng)用提供了新的思路。
[關(guān)鍵詞]虛擬實(shí)驗(yàn);攝影;仿真
[中圖分類號(hào)]G434 [文獻(xiàn)標(biāo)識(shí)碼]B [論文編號(hào)]1009-8097(2008)05-0114-94
引言
虛擬實(shí)驗(yàn)的研究對(duì)提高教育技術(shù)水平、改善實(shí)驗(yàn)實(shí)訓(xùn)環(huán)境、優(yōu)化教學(xué)過程、促進(jìn)教學(xué)場(chǎng)所的變化、節(jié)省教育投資、提高學(xué)生的動(dòng)手和創(chuàng)新能力產(chǎn)生具有重要意義?!洞髮W(xué)攝影》是一門實(shí)踐性較強(qiáng)的課程,目前攝影實(shí)驗(yàn)中主要存在以下問題:相機(jī)數(shù)量相對(duì)有限,學(xué)生只能分組實(shí)驗(yàn),效率較低;相機(jī)關(guān)鍵部件(如鏡頭等)容易損壞:數(shù)碼產(chǎn)品更新?lián)Q代較快,由于經(jīng)費(fèi)等原因,用于實(shí)驗(yàn)的相機(jī)型號(hào)相對(duì)陳舊,降低了學(xué)生實(shí)驗(yàn)的興趣。如何有效的解決這些問題成為大家關(guān)注的熱點(diǎn),基于網(wǎng)絡(luò)的攝影仿真系統(tǒng)提供了一種解決思路。
一 系統(tǒng)分析與設(shè)計(jì)
1 系統(tǒng)分析
攝影仿真系統(tǒng)是為了加深學(xué)生對(duì)相機(jī)的了解,供學(xué)生在漫游虛擬場(chǎng)景中進(jìn)行拍攝訓(xùn)練,最終達(dá)到提高學(xué)生攝影技能的目的。學(xué)生可以在虛擬場(chǎng)景中觀摩三維相機(jī)模型,了解相機(jī)主要部件及功能;進(jìn)行調(diào)節(jié)焦距、調(diào)節(jié)光圈、調(diào)節(jié)快門和拍照等攝影訓(xùn)練。要求系統(tǒng)可以在網(wǎng)絡(luò)上運(yùn)行:交互性好,方便用戶操作相機(jī);實(shí)時(shí)性好,即當(dāng)用戶按下快門后,能實(shí)時(shí)產(chǎn)生照片;仿真程度高,拍攝的照片能反映相機(jī)的參數(shù)。
虛擬現(xiàn)實(shí)建模語(yǔ)言VRML是一種網(wǎng)絡(luò)上使用的三維形體和交互環(huán)境的場(chǎng)景描述語(yǔ)言,具有交互性和平臺(tái)無關(guān)性等優(yōu)點(diǎn)。Java在網(wǎng)上具有強(qiáng)大生命力,具有面向?qū)ο?、跨平臺(tái)、安全和可移植等特點(diǎn)。基于Java與VRML的交互技術(shù)可以實(shí)現(xiàn)復(fù)雜運(yùn)算、邏輯處理、網(wǎng)絡(luò)通信和精確控制場(chǎng)景基于Java與VRML的交互技術(shù)目前已經(jīng)比較成熟,應(yīng)用比較廣泛,利用該技術(shù)開發(fā)攝影仿真系統(tǒng)是可行的。
2 系統(tǒng)功能設(shè)計(jì)
根據(jù)系統(tǒng)分析,攝影仿真系統(tǒng)主要功能模塊分解如下:場(chǎng)景漫游、相機(jī)觀摩、焦距調(diào)節(jié)、光圈調(diào)節(jié)、快門調(diào)節(jié)和照片拍攝,系統(tǒng)功能結(jié)構(gòu)如圖1所示。
需要構(gòu)建一個(gè)逼真的拍攝場(chǎng)景,讓用戶可以在虛擬場(chǎng)景中自由漫游;通過觀摩相機(jī)了解相機(jī)主要部件及功能,對(duì)一些禁止操作進(jìn)行警告,并真實(shí)再現(xiàn)損壞情況,如鏡頭變模糊等;通過調(diào)節(jié)焦距直觀的感受到所拍攝景物的變化;通過調(diào)節(jié)光圈和快門設(shè)置相機(jī)參數(shù);通過按快門實(shí)現(xiàn)照片拍攝,實(shí)時(shí)獲得與相機(jī)參數(shù)相對(duì)應(yīng)的照片。
二 系統(tǒng)實(shí)現(xiàn)
簡(jiǎn)單場(chǎng)景可直接通過VRML編輯器建立,相機(jī)模型等復(fù)雜造型需要先在3dmax中創(chuàng)建。然后導(dǎo)成VRML格式文件,在VRML中借助腳本、路由及Java技術(shù)實(shí)現(xiàn)交互,用戶通過含插件的瀏覽器進(jìn)行攝影訓(xùn)練。系統(tǒng)開發(fā)中的主要技術(shù)如下:
1 取景框、顯示屏幕與相機(jī)分離
實(shí)際拍攝中,用戶通過取景器來確定所要拍攝的景物,通過顯示屏幕觀看相機(jī)參數(shù)和進(jìn)行相機(jī)功能切換。在攝影仿真系統(tǒng)中,相機(jī)模型相對(duì)較小,其取景器、顯示屏幕等就更小了,用戶無法通過如此小的部件來選擇景物,查看相機(jī)參數(shù)和切換相機(jī)功能。借鑒部分?jǐn)?shù)碼相機(jī)顯示屏幕可以展開到一定位置和角度的思想,系統(tǒng)將小部件進(jìn)行分解和擴(kuò)大:將相機(jī)上方的一個(gè)矩形區(qū)域定義為取景框,將顯示相機(jī)參數(shù)的屏幕定義在場(chǎng)景的左下方,將進(jìn)行功能切換的功能菜單定義在右下方。
將取景框、顯示屏幕和功能菜單與相機(jī)分離能夠突出主要信息,方便用戶操作。如何讓這些分離的部件隨用戶在場(chǎng)景中移動(dòng)而同步移動(dòng)是關(guān)鍵。瀏覽器對(duì)Transform節(jié)點(diǎn)嵌套的子節(jié)點(diǎn)能自動(dòng)進(jìn)行坐標(biāo)變換,只要將這些部件及相機(jī)等都定義在視點(diǎn)坐標(biāo)系內(nèi),借助路由實(shí)時(shí)更新視點(diǎn)坐標(biāo)系(位置和朝向)就可以實(shí)現(xiàn)相機(jī)及其部件隨視點(diǎn)同步移動(dòng)。
2 彈出式功能菜單的實(shí)現(xiàn)
在拍攝實(shí)驗(yàn)中,相機(jī)具有拍攝、調(diào)節(jié)焦距、調(diào)節(jié)光圈、調(diào)節(jié)快門等多種狀態(tài),每種狀態(tài)都對(duì)應(yīng)相機(jī)的不同姿態(tài),可借助觸發(fā)器來實(shí)現(xiàn)這些狀態(tài)的切換。為保證用戶對(duì)場(chǎng)景的瀏覽效果,用于功能切換的觸發(fā)物體要盡可能的小。比較常見方法是為各種功能設(shè)置一個(gè)觸發(fā)球,并在觸發(fā)球旁用文字進(jìn)行功能說明。當(dāng)功能較多時(shí),功能觸發(fā)球及功能說明將隨之增加,占據(jù)了場(chǎng)景屏幕的大部分空間,勢(shì)必影響了用戶對(duì)場(chǎng)景的觀賞效果。在windows操作系統(tǒng)中,彈出式菜單具有按需顯示,占空間少等優(yōu)點(diǎn),結(jié)合這種思想,我們?cè)O(shè)計(jì)并實(shí)現(xiàn)了基于VRML虛擬場(chǎng)景的彈出式功能菜單。
對(duì)三維空間中的一個(gè)物體進(jìn)行縮放變換時(shí),若縮放比例為(1,1,1)時(shí),變換后的物體和原來的相同,若縮放比例為(0,0,0)時(shí),變換后的物體縮小到原點(diǎn),此時(shí)可認(rèn)為該物體已經(jīng)消失了。
利用上面的縮放變換原理,根據(jù)功能需求設(shè)計(jì)了若干個(gè)菜單項(xiàng),每個(gè)菜單項(xiàng)實(shí)質(zhì)為貼有圖片的矩形平面,圖片顯示了相應(yīng)功能名稱,這些菜單項(xiàng)從上到下依次排列。各菜單項(xiàng)所在的局部坐標(biāo)系Transform節(jié)點(diǎn)scale域初始值為(000),即默認(rèn)各菜單項(xiàng)不顯示;當(dāng)鼠標(biāo)單擊其父菜單時(shí),更新子菜單項(xiàng)scale域值為(111),將顯示各菜單項(xiàng)物體,即彈出各菜單項(xiàng)。對(duì)菜單項(xiàng)的單擊處理事件需要借助腳本和路由實(shí)現(xiàn),在此不再贅述。
3 焦距調(diào)節(jié)
焦距是鏡頭最重要的性能指標(biāo),焦距的長(zhǎng)短對(duì)拍攝影像的拍攝視角、拍攝景深、空間透視感和放大率等都會(huì)產(chǎn)生影響。其規(guī)律是焦距變大(小),拍攝視角將變小(大),空間透視感將變?nèi)?強(qiáng)),景深將變小(大)。焦距調(diào)節(jié)訓(xùn)練的目的是讓學(xué)生體驗(yàn)焦距變化對(duì)拍攝效果的影響,鍛煉實(shí)驗(yàn)者調(diào)節(jié)焦距的技能。
用戶通過鼠標(biāo)點(diǎn)擊調(diào)焦環(huán)實(shí)現(xiàn)其轉(zhuǎn)動(dòng),同時(shí)實(shí)時(shí)更新焦距值,取景框內(nèi)顯示拍攝影像的變化(目前主要考慮拍攝視角和拍攝景深),其控制流程如圖2所示。
實(shí)現(xiàn)上述流程控制是通過VRML腳本及路由實(shí)現(xiàn)的,其關(guān)鍵問題是焦距的變化對(duì)攝影視角和景深的影響,下面將分別討論。
(1)焦距變化對(duì)拍攝視角的影響
取景框定義在視點(diǎn)坐標(biāo)系內(nèi),它隨著視點(diǎn)及視線的變化而同步變化。為了反映焦距變化規(guī)律,在焦距變大(小)的同時(shí),按當(dāng)前視線方向向前(后)移動(dòng)視點(diǎn),即移動(dòng)視點(diǎn)坐標(biāo)系的原點(diǎn),移動(dòng)距離s與焦距變化幅度d的關(guān)系為:s=k*d;其中k為變換系數(shù),可根據(jù)不同相機(jī)的焦距變化范圍設(shè)置不同的值,本系統(tǒng)中k的值為2時(shí)攝影視角變化比較明顯。
設(shè)視點(diǎn)坐標(biāo)系原點(diǎn)的原坐標(biāo)為(x0,y0,z0),由于視線始終為視點(diǎn)坐標(biāo)系z(mì)軸負(fù)方向,則視點(diǎn)坐標(biāo)系的新坐標(biāo)(X,y,Z)變?yōu)椋簒=x0;y=y0;z=z0+s;用(x,y,z)的值借助路由更新視點(diǎn)坐標(biāo)系的translation域值。
(2)焦距變化對(duì)景深的影響
景深是指能夠在畫面中形成相對(duì)清晰影像的景物前后范圍。為了體現(xiàn)焦距變小(大)時(shí),景深變大(小)的規(guī)律,采用視點(diǎn)沿視線方向向后(前)移動(dòng);同時(shí)采用VRML的霧化效果節(jié)點(diǎn)Fog,放大(縮小)其可見域visibilityRange的域值。visibilityRange域值越小,場(chǎng)景產(chǎn)生的霧化效果越強(qiáng),使得被拍攝物后方的景物模糊狀態(tài)越來越加劇。visibilityRange域值與焦距變化幅度的關(guān)系為:v=-a*d+v0其中v表示visibilityRange域的新值,a為系數(shù),可根據(jù)不同相機(jī)的焦距變化范圍設(shè)置不同的值,本系統(tǒng)取a的值為-11時(shí)霧化效果比較明顯,d為焦距變化幅度,v0為visibilityRange的當(dāng)前值。
焦距對(duì)拍攝視角和景深的影響如圖3所示,焦距為85ram時(shí)拍攝視角較小,景深較小,人物后面的房子處在景深以外,比較模糊:焦距縮小為37mm時(shí)拍攝視角變大,房子處在景深以內(nèi),比較清晰。
4 照片生成及顯示
攝影仿真系統(tǒng)的最終目的是生成照片,照片的生成速度、真實(shí)感程度及能否如實(shí)反映當(dāng)前相機(jī)的各項(xiàng)參數(shù)等將直接影響整個(gè)系統(tǒng)的性能,處理好照片的生成對(duì)整個(gè)系統(tǒng)具有重要意義。
結(jié)合基于圖像的繪制(IBR)思想,我們提出了基于場(chǎng)景圖的照片生成技術(shù):捕獲與視點(diǎn)相關(guān)的視景框內(nèi)的區(qū)域作為初始圖像,然后結(jié)合相機(jī)參數(shù)采用一定算法對(duì)初始圖像進(jìn)一步處理形成最終照片。
由于VRML本身沒有捕獲功能,照片也需要在一定區(qū)域顯示,在此需要借助Java技術(shù)協(xié)助實(shí)現(xiàn)。引入Java Applet與場(chǎng)景在一個(gè)網(wǎng)頁(yè)中,JavaApplet區(qū)域?qū)崟r(shí)顯示拍攝的照片,并提供功能面板設(shè)置相機(jī)參數(shù)。
設(shè)屏幕中視景框區(qū)域?yàn)榫匦?x,y,w,h),其中(x,y)為矩形坐上角坐標(biāo),w,h為矩形的寬度和高度。則實(shí)現(xiàn)圖片抓取及在Java Applet區(qū)域顯示的關(guān)鍵代碼如下:
(1)包的引入,Applet子類成員變量的定義及初始化
importjava.a(chǎn)wt.image.*;//引入圖象處理包,其他包略
//2立與當(dāng)前JavaApplet區(qū)域同樣大小的Image對(duì)象,用于存放抓取的新圖
Image Buf=createlmage(this.size().width,this.size().height);
int[]pixels=newinl[w*h];//定義一塊內(nèi)存空間,用于存放圖片各象素信息
(2)相應(yīng)用戶按相機(jī)快門事件的處理代碼
//抓取屏幕中視景框所在區(qū)域(x,y,w,h),存入對(duì)象screenshot由
Bufferedlmage screenshot=(new Robot()),createScreenCapture(new Rectangle(x,y,w,h));
PixelGrabber pg=new
PixelGrabber(screenshot,0,0,w,h,pixels,(),w);
pg.grabPixels();//將圖片各像素信息讀入數(shù)組pixels中,用于結(jié)合相機(jī)參數(shù)處理圖片
disposeByCameraParam(相機(jī)參數(shù));//根據(jù)相機(jī)參數(shù)處理pixels中的象素?cái)?shù)據(jù),參數(shù)由虛擬場(chǎng)景獲得
Image newPic=createlmage(new MemoryImageSource(w,h,pixels,0,w));//生成新圖片
Buf.drawlmage(newPic,0,0,this);//將新圖片寫入Buf中;
(3)在方法paint(Graphics g)中顯示新圖片
g.drawlmage(Buf,0,0,this);
5 測(cè)試結(jié)果
在解決上述關(guān)鍵問題的基礎(chǔ)上我們實(shí)現(xiàn)了攝影仿真系統(tǒng),系統(tǒng)用戶界面如圖4所示,場(chǎng)景左下方實(shí)時(shí)顯示相機(jī)當(dāng)前參數(shù);場(chǎng)景右下方為彈出式功能菜單,用戶鼠標(biāo)點(diǎn)擊其父菜單“實(shí)時(shí)操作”將自動(dòng)展開,通過該菜單進(jìn)行各種功能的切換;場(chǎng)景中間下方為相機(jī),其上方為取景框。界面右側(cè)為Java Applet區(qū)域,用于顯示拍攝照片和設(shè)置相機(jī)參數(shù)。用戶可以隨時(shí)通過網(wǎng)絡(luò)平臺(tái)進(jìn)行虛擬漫游、觀摩相機(jī)和攝影訓(xùn)練,既可在虛擬場(chǎng)景中通過鼠標(biāo)直觀的調(diào)節(jié)焦距、光圈和快門,也可在控制面板中直接輸入其值,真實(shí)的體驗(yàn)光圈快門的變化對(duì)照片的影響。
在圖4所示的視點(diǎn)和視線下,調(diào)整相機(jī)參數(shù)(光圈和快門)所拍攝的部分結(jié)果如圖5所示。當(dāng)照片大小為112×70時(shí),部分客戶端機(jī)型的最大響應(yīng)時(shí)間(從按下快門到照片顯示的最大時(shí)間間隔)如表1所示。測(cè)試表明,系統(tǒng)運(yùn)行穩(wěn)定,照片生成速度較快,相機(jī)參數(shù)的改變對(duì)拍攝結(jié)果的影響比較明顯。
三 結(jié)論及未來工作
攝影仿真系統(tǒng)為《大學(xué)攝影》實(shí)驗(yàn)中目前存在的問題提供了一種解決思路。該系統(tǒng)可供學(xué)生熟悉相機(jī),鍛煉調(diào)節(jié)焦距、調(diào)節(jié)光圈、調(diào)節(jié)快門和拍攝等基本技能,理解焦距、光圈及快門等參數(shù)的變化對(duì)成像結(jié)果的影響。需要說明的是攝影仿真系統(tǒng)畢竟是虛擬的,不能完全代替實(shí)際拍攝實(shí)踐,可作為攝影實(shí)驗(yàn)的入門實(shí)驗(yàn),為拍攝實(shí)踐打下良好基礎(chǔ)。
系統(tǒng)目前需要根據(jù)絕對(duì)坐標(biāo)抓場(chǎng)景圖,這對(duì)屏幕分辨率有較大的依賴性(本系統(tǒng)采用1024*768),今后將探討在多種屏幕分辨率下自動(dòng)獲取視景框相對(duì)坐標(biāo)的方法;現(xiàn)在僅考慮光圈和快門對(duì)拍攝結(jié)果的影響,下一步將結(jié)合其他相機(jī)參數(shù),尋求更符合相機(jī)成像規(guī)律的算法;對(duì)動(dòng)態(tài)場(chǎng)景拍照及錄像功能仿真正在研究開發(fā)中。