趙琳琳


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