趙琳琳
摘要 隨著我國經(jīng)濟和科學技術(shù)的不斷發(fā)展,智能化技術(shù)的應(yīng)用越來越普遍,根據(jù)國內(nèi)外增強現(xiàn)實技術(shù)研究概況,對增強現(xiàn)實系統(tǒng)的關(guān)鍵技術(shù) 跟蹤定位三維注冊技術(shù),作了詳細分析。確定采用Visual C++6.0,OpenCV,OpenGL等工具對系統(tǒng)進行開發(fā),構(gòu)建一個基于PC機的虛擬系統(tǒng)。
【關(guān)鍵詞】AR 虛擬系統(tǒng) 三維注冊 openGL
隨著大規(guī)模并行計算(Massive ParallelProcessing,MPP)技術(shù)、軟件工程、新一代網(wǎng)絡(luò)技術(shù)(IPV6)和無線通信技術(shù)的飛速發(fā)展,計算機輔助設(shè)計、3D建模、計算機視覺、模式識別、人工智能等計算機相關(guān)技術(shù)成為國際學術(shù)與工業(yè)應(yīng)用的研究熱點??陀^實物數(shù)字化得到的虛擬世界,數(shù)字化時代講求傳播共享,虛擬數(shù)據(jù)通過全世界的互聯(lián)網(wǎng)絡(luò)交叉?zhèn)鬏?,復制不再等同于簡單模仿,客觀與主觀之間的邊界也變得越來越不分明,人工建造的數(shù)據(jù)信息構(gòu)成了另外的客觀一一浸入式的虛擬.現(xiàn)實環(huán)境,虛擬.現(xiàn)實科技形成了新時代的數(shù)字媒介載體。
1 增強現(xiàn)實技術(shù)(AR)概況
增強現(xiàn)實技術(shù)誕生于上世紀六十年代,哈佛大學Ivan Sutherland教授制造了光學透明頭盔顯示器,將電腦構(gòu)建的立體圖像在頭盔顯示器上輸出,Ivan也因此公認是后來虛擬現(xiàn)實技術(shù)的先導者。
AR技術(shù)簡單來說就是在虛擬環(huán)境中添加真實世界的圖像,更側(cè)重于現(xiàn)實環(huán)境。增強現(xiàn)實不要求苛刻的完全浸入虛擬環(huán)境,它是把人工生成的虛擬對象與相應(yīng)的現(xiàn)實世界融合在一起,提供給操作者附帶有虛擬對象的真實場景,或者是建立在真實場景上的虛擬對象。增強現(xiàn)實技術(shù)是對真實環(huán)境做相應(yīng)的增補,使操作者能夠更方便的感受與認知外部世界。建立一個在細節(jié)上精確重現(xiàn)我們所處簡單自然環(huán)境的系統(tǒng)仍舊具有很大的難度,而增強現(xiàn)實可以不必需要大量的計算能力在提高虛擬環(huán)境的逼真度上下功夫,而是充分利用客觀世界的信息,根據(jù)需求進行增補,相應(yīng)就極大的減少了對系統(tǒng)整體計算能力的依賴。
AR技術(shù)涉及了計算機視覺、光電傳感器、模式識別、計算機圖形學、人工智能、自動化等多個領(lǐng)域,是一種使用計算機生成的虛擬數(shù)據(jù)對客觀環(huán)境的影像進行增強或擴展的技術(shù),提供接口使操作者和虛擬環(huán)境中的虛擬物體進行自然交流,為操作者帶來容易實施的、交互體驗好、多種體感、能夠強化用戶感覺的新體驗。增強.現(xiàn)實技術(shù)可以關(guān)聯(lián)很多領(lǐng)域,在機械裝配維護、醫(yī)學研究、航天軍工和商業(yè)娛樂等多個領(lǐng)域都能得到廣闊的應(yīng)用。
2 三維注冊技術(shù)概述
增強現(xiàn)實系統(tǒng)在設(shè)計時需要根據(jù)相應(yīng)的參數(shù)信息來確定生成的虛擬物體將要添加到真實空間坐標系中的位置,以便把虛擬物體準確的映射到投影平面,并在顯示裝置的正確位置進行顯示,所需的這些參數(shù)信息是通過在現(xiàn)場采集視頻圖像的攝像機相對于采集現(xiàn)場的位置和方向角(外部參數(shù))、成像系統(tǒng)(攝像機)的內(nèi)部參數(shù)(焦距以及像元高寬比等)計算得到的,這個過程也叫虛實配準,是增強現(xiàn)實系統(tǒng)設(shè)計中的一個關(guān)鍵步驟,經(jīng)過這一系列的注冊轉(zhuǎn)換,最終實現(xiàn)虛擬模型與真實環(huán)境的融合顯示,使用戶在觀察真實視頻信息的同時也能夠無縫獲得幫助其加深對現(xiàn)實世界理解的各種增強信息。
3 三維注冊技術(shù)在AR系統(tǒng)的具體設(shè)計與實現(xiàn)
3.1 系統(tǒng)分析
本系統(tǒng)提供的增強信息主要是以三維模型的形式存在,根據(jù)先驗數(shù)據(jù)來確定模型細節(jié)并創(chuàng)建虛擬物體,計算攝像機的內(nèi)外參數(shù)獲得虛擬物體將要添加進真實環(huán)境中的坐標信息,為下一步的虛實融合顯示做準備。在AR應(yīng)用中,攝像機本身的內(nèi)部參數(shù)(焦距、像素點參數(shù)等),以及觀察者(即攝像機)所處的位置與視線方向角,構(gòu)成了定標系統(tǒng)的內(nèi)外參數(shù)矩陣,以這些數(shù)據(jù)資料為基礎(chǔ),確定所創(chuàng)建的虛擬模型添加進世界坐標系中的映射位置,將虛擬對象正確變換到投影平面,在顯示模塊中顯示輸出,這就是增強現(xiàn)實系統(tǒng)中三維注冊所要完成的任務(wù)。上述流程也就是把人工制作的虛擬模型和真實場景中的對象“對齊”的流程。在拍攝視頻時,利用光學透視原理,將拍攝對象發(fā)出或反射的光線捕捉到相機的光學傳感器上,記錄成連續(xù)圖像幀的格式。從某個角度上說,視頻文件的拍攝過程也相當于一個從真實場景坐標系到成像平面坐標系的轉(zhuǎn)換過程,是通過攝像機的成像系統(tǒng),將實際環(huán)境中的三維對象數(shù)據(jù)轉(zhuǎn)換為二維圖像投影到攝像機的像平面上的過程。在計算機圖形學中,三維模型需要經(jīng)過視點變換、模型變換、投影變換、視口變換等一系列坐標變換在二維的顯示平面顯示出來,這個過程和實際攝像機的工作過程是一樣的,只是在計算機內(nèi)部由算法實現(xiàn)。所以我們可以假設(shè)一個虛擬攝像機模型,通過參數(shù)校準使其與真實攝像機的內(nèi)外參數(shù)保持一致,從而實現(xiàn)真實世界的視頻圖像和虛擬世界模型的融合顯示。因此,AR中的虛實配準過程實際上就是確定不同坐標系統(tǒng)之間的變換關(guān)系,明確了各坐標系之間的關(guān)系,就能將虛擬模型與真實場景適當?shù)娜诤?,得到增強后的現(xiàn)場影像。
3.2 整體框架
系統(tǒng)工作流程圖如上圖1所示。系統(tǒng)啟動后,首先要進行初始化,包括建立主程序窗口、加載OpenCV與OpenGL工具包并配置所需環(huán)境變量;然后系統(tǒng)讀取存儲器中攝像機拍攝的視頻文件并處理、另存儲為圖像文件備用,該步驟中如果視頻文件讀取失敗則報錯,將錯誤處理后重新進行讀取操作,反之則執(zhí)行下一步;根據(jù)正在處理的視頻圖像幀信息,將對應(yīng)時刻攝像機的內(nèi)外參數(shù)讀入,在OpenGL中定義紋理映射,將處理后的視頻圖像幀以紋理的形式顯示為背景,然后系統(tǒng)開始創(chuàng)建虛擬模型,包括輔助的文字參數(shù)、虛擬物體模型等,并將這些增強數(shù)據(jù)經(jīng)過內(nèi)部的投影轉(zhuǎn)換輸出到視頻窗口,另外也可以將上述參數(shù)進行相應(yīng)的可視化顯示;虛實融合后,最終得到的視頻被輸出到顯示終端,提供給實驗人員,在實驗結(jié)束前,上述流程反復循壞進行,當用戶選擇退出時,整個流程結(jié)束。
3.3 跟蹤定位三維注冊技術(shù)的實現(xiàn)
3.3.1 注冊原理
AR系統(tǒng)是否可以得到理想的終端輸出,三維注冊算法是非常重要的一環(huán),這個過程也常常稱作虛實注冊或配準,這個過程的著眼點是分析模型與采集環(huán)境之間對應(yīng)的參數(shù),以便計算出增強信息在攝像機坐標系中添加位置的三維坐標,使設(shè)備能夠據(jù)此將需要的信息顯示到終端屏幕上,使融合后的場景從視覺上看沒有分離感。上述過程的關(guān)鍵是利用攝像機的內(nèi)外參數(shù)將虛實場景聯(lián)系起來,因此要詳細了解內(nèi)外參數(shù)的定義,所謂的外參數(shù)是指攝像機在拍攝過程中的位置與角度,而內(nèi)參數(shù)則由攝像機鏡頭組本身固有的結(jié)構(gòu)決定(包括焦距、像素高寬比等)。因此,在實際模型分析中我們要修正光學鏡頭組采集光線過程中產(chǎn)生的光學偏差,這也是AR系統(tǒng)的攝像機標定的一個目的。此外,定標的過程還是攝像機坐標與真實環(huán)境坐標的轉(zhuǎn)換過程,真實環(huán)境空間是建立在物理單位的基礎(chǔ)上的。綜上所述,攝像機的成像模型,鏡頭組的畸變模型,這兩個模型共同定義了攝像機的內(nèi)參數(shù)。
3.3.2 模型信息繪制
虛擬信息(也叫增強信息)是AR系統(tǒng)呈現(xiàn)給操作者的重要信息,這些增強信息可以輔助用戶對現(xiàn)場充分觀察并完成任務(wù)。增強現(xiàn)實系統(tǒng)中的增強信息的表現(xiàn)形式一般包括有:幾何模型、文字說明、圖片和虛擬3D模型等。
分析了本設(shè)計的特點與現(xiàn)有的各種工具,選擇了OpenGL開發(fā)包來實現(xiàn)模型繪制。下面分別對不同信息進行分析。
①文字信息。文字顯示包括英文中英文雙語顯示。對于英文字母,有兩種顯示技術(shù),使用位圖數(shù)據(jù)繪制字符與使用顯示列表繪制字符。由于英文基礎(chǔ)字符很少,可以把ASCII字符編碼表中的字符繪制為單獨的字體文件,為各字體文件設(shè)置索引值,使用紋理貼圖的方式在內(nèi)存中預存,然后通過紋理映射將其顯示輸出。為了不將索引值弄混,在創(chuàng)建字符顯示列表時指定索引基數(shù)來進行區(qū)分。在雙顏色緩沖區(qū)模式(OpenGL工作方式)下,Windows的GDI字體管理和文本輸出函數(shù)無法直接用于OpenGL的繪圖設(shè)備,也就不能直接顯示字符串。針對這個問題,WGL包含的函數(shù)wglUseFontBitmaps()和wglUseFontOutlines()能夠分別用于位圖文本和輪廓文本的輸出。上述函數(shù)是Win32函數(shù),因此必須使用Windows的窗口平臺編程使用。我們只對位圖文本的顯示進行簡要介紹:把文本中的所有字符都看作普通的OpenGL對象,顯示字符之前,先為每個字符創(chuàng)建一個顯示列表,然后通過執(zhí)行顯示列表完成字符的輸出。OpenGL提供創(chuàng)建位圖字符顯示列表的函數(shù)是wglUseFontBitmaps(HDC hdc,DWORDfirst, DWORD count, DWORD listBase)。
從first(字符編碼)開始的count個字符分別創(chuàng)建一個顯示列表。它定義了當前OpenGL繪圖描述表的count個顯示列表,所有的顯示列表都有一個標識碼,第一個顯示列表的標識碼為listBase,所有的顯示列表也都含有一個glBitmap()調(diào)用,第listBase+j個位圖的含義是通過hdc指定的設(shè)備描述表中當前選定字體的第first+j個字模得到的。假如沒有定義字模,則該函數(shù)定義的顯示列表為空。
而對于漢字,因為其筆畫復雜多變,顯示起來也會更加有難度,可以采用兩種方法:
(1)貼圖。漢字顯示存在難度,但如果從圖像像素的定義出發(fā),可以順利地實現(xiàn)顯示字體和漢字。但這樣的方法太繁瑣,少部分漢字可以,大批量的顯示就不能勝任了,但這種顯示的思路是可以借鑒的。
(2)參考英文顯示方式,應(yīng)用顯示列表,首先需要定義好漢字字體。
Windows系統(tǒng)使用以下函數(shù)對漢字的字體進行定義:
BOOL CreateFont(
int h,∥邏輯單位標定的字體高度,取值可為正負或零,對于需要隨意定義字體高度的情況下通常取負值,以保證獲得實際尺寸的字體
int w//用于指定字體的平均寬度,由于Windows系統(tǒng)下的大多數(shù)字體都是比例字體因而采用平均寬度這個表示方法。若指定為O,則系統(tǒng)會自動根據(jù)適當?shù)谋壤詣犹幚韺挾取?/p>
int r∥/指定文本行和屏幕底邊之間的角度。旋轉(zhuǎn)方向為逆時針,0.1度為最小單位
int rz,///字符和屏幕底邊之間的角度,方向單位同上
int wz,///字體筆畫線粗,包括加細、正常、加粗,也可在[O,1000]自定義
BYTE i,///字體是否傾斜,TRUE為是,F(xiàn)ALSE為否
BYTE 1,///字體是否加下劃線。
BYTE del,///字體是否加刪除線。
BYTE char,∥/字符集
BYTE out,///字體輸出的結(jié)果與要求的匹配度
BYTE clip,///字體輸出如何剪輯落于剪裁區(qū)外的字符
BYTE q,///字體精度
BYTE d,///字體間距
LPCTSTR name,//字體名稱,如“隸書”等
);
用CFont類創(chuàng)建一個font黑體示例如下:
CFont font;
Font.CreatFonr(10,O,O,O,F(xiàn)W_BOLD,F(xiàn)ALSE, FALSE, GB2312_CHARSET, OUTSROKE_PRECIS,CLIP_STROKE_PRECIS,DRAFT_QUALITY, DEFAULT_PITCH FFMODERN,“黑體”);
然后建立相應(yīng)的顯示列表來進行顯示,此處使用前文介紹的創(chuàng)造字型多邊形顯示列表的函數(shù)wglUseFontOutlines(),因為單個漢字代碼為雙字節(jié),要經(jīng)過處理之后才能被OpenGL使用,處理過程如下:
If(::IsDBCSLeadByte(uChar》///字符是否為漢字
f//是,則使用雙字節(jié)
Dword=MAKEWORD(tesrtext[+(i+l)],uChar);
i++;}
///否,使用單字節(jié)
else Dword= (WORD)uChar;
///生成顯示列表
Int testlistl= glGenLists(l);
////調(diào)用字體函數(shù)
wglUseFontOutlines(pDC->GetSafeHde (),Dword,l,testlistl,O.Of,O.lf, 1,NULL);
///使用顯示列表
gICallList(testlistl);
②圖片信息:首先,創(chuàng)建或者讀取現(xiàn)成的圖片;然后保存為位圖格式,以紋理貼圖的方式對其進行顯示。關(guān)于紋理貼圖,會在虛實合成顯示模塊進行研究。
③幾何模型:簡單的幾何框架模型不需要制作的很精細,僅僅在幾何尺寸角度提供參考,使用OpenGL自帶的基本圖元工具就可以實現(xiàn)。而更為復雜的模型構(gòu)建,OpenGL制作起來會非常困難,并且效果不理想,此時可以使用專門的建模工具如3DSMAX、MAYA等生成模型并導入OpenGL模型庫里備用,具體導入方法可以根據(jù)上述軟件包的數(shù)據(jù)格式進行。
3.3.3 界面實現(xiàn)
圖2為系統(tǒng)讀取并顯示通過OpenGL建立的簡單立方體模型。該模塊將不同場景對應(yīng)的不同幾何模型繪制成模型庫,在虛實融合顯示模塊直接調(diào)用。
4 結(jié)束語
該系統(tǒng)接收遠程科學實驗過程中產(chǎn)生的視頻信息與工程遙測數(shù)據(jù),對視頻信息進行處理并顯示科學實驗現(xiàn)場的狀態(tài)和現(xiàn)象。對已有的增強現(xiàn)實相關(guān)技術(shù)的概況與發(fā)展進行了深入廣泛的調(diào)研與分析,在此基礎(chǔ)上,借助適當?shù)南嚓P(guān)技術(shù)工具對其在遠程科學實驗中的應(yīng)用搭建了一個的系統(tǒng)。增強現(xiàn)實是多學科交叉的一門技術(shù),許多相關(guān)領(lǐng)域的成果進展都可以促進AR的研究與應(yīng)用,雖然增強現(xiàn)實技術(shù)在之前的十幾年中得到了很大的發(fā)展,但仍需要在摸索與實踐中總結(jié)與發(fā)展。