文獻標(biāo)識碼: A
文章編號: 0258-7998(2012)10-0116-03
增強現(xiàn)實AR(Augmented Reality)是將計算機產(chǎn)生的虛擬物體或信息與真實環(huán)境進行融合,借以增強或擴充現(xiàn)實景象的技術(shù)[1]。增強現(xiàn)實是虛擬現(xiàn)實技術(shù)VR(Virtual Reality) 發(fā)展的一個重要分支,也是近年來的一個研究熱點[2-4]。隨著科學(xué)技術(shù)的發(fā)展,增強現(xiàn)實技術(shù)不斷完善的同時,增強現(xiàn)實設(shè)備的價格也在不斷下降, 推動了增強現(xiàn)實技術(shù)在醫(yī)療、制造、維修、機器人動作路徑規(guī)劃、娛樂、軍事、旅游等領(lǐng)域的發(fā)展和應(yīng)用。特別是近年來平板電腦、智能手機的迅速發(fā)展,將AR系統(tǒng)與便攜式計算機相結(jié)合,使用戶可以在戶外真實環(huán)境中隨意走動,轉(zhuǎn)換視點,大大增加了AR的應(yīng)用范圍。
隨著經(jīng)濟的不斷發(fā)展,出國旅游成為人們增長自身見識、了解世界的重要方法。但由于各國使用語言和文字的不同,使游客面對旅游地很多日常的信息都無法了解,為了解決這個問題,本文提出一種利用增強現(xiàn)實技術(shù)實現(xiàn)圖文解說功能的方法,針對旅客經(jīng)??匆姷穆放?、名畫、餐牌、標(biāo)志等現(xiàn)實事物以游客熟悉的文字進行解說,可以真正地讓游客體會到賓至如歸的感覺。
1 SURF與ARToolkit
1.1 OpenCV中SURF算法的相關(guān)函數(shù)
OpenCV[5](Open Source Computer Vision Library)是一種用于數(shù)字圖像處理和計算機視覺的函數(shù)庫,由Intel微處理器研究實驗室(Intel Microprocessor Research Lab)的視覺交互組(The Visual Inter activity Group)開發(fā)。OpenCV由一系列C函數(shù)和少量C++類構(gòu)成,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。SURF(Speeded Up Robust Features)算法是SIFT(Scale Invariant Feature Transform)算法的加速版,OpenCV的SURF算法在適中的條件下完成兩幅圖像中物體的匹配,基本實現(xiàn)了實時處理。SURF特征提取算法的流程主要包括三部分:特征點檢測、特征點描述和特征點匹配。
1.1.1 特征點檢測
特征點的檢測[6]是基于尺度空間理論,使用Hessian矩陣的行列式作為判別式來尋找局部極大值。尺度為σ的圖像某點處的Hessian矩陣定義為:
1.1.2 特征點描述
SURF特征點描述[6]采用Haar小波作為特征描述子,Harr特征最大的特點是速度快、能減少計算時間且增加魯棒性。SURF描述符的構(gòu)造分為主方向分配和生成特征向量兩部分,且都是在特征點所在的尺度σ上進行的。以特征點為圓心,計算半徑為6σ圓內(nèi),x和y方向上的Haar小波響應(yīng)系數(shù);在60°的扇形區(qū)域內(nèi),求x和y方向上的系數(shù)之和, 以此構(gòu)建一個新向量。轉(zhuǎn)動扇形遍歷整個圓,選擇最長向量的方向為主方向。
1.1.3 特征點匹配
特征點匹配[6]就是在高維向量空間中尋找最相似的特征向量,而在大量的數(shù)據(jù)中尋找最近鄰是一個復(fù)雜繁瑣的計算過程。SURF算法在構(gòu)造特征描述符時,對每個特征點都會添加Laplacian標(biāo)識符。由Hessian矩陣的跡的值定義,若Hessian矩陣的跡大于0,則該標(biāo)識符為1,否則為-1。該標(biāo)識符用于區(qū)分暗背景上的亮斑和亮背景上的暗斑,只有相同類型的特征點才能互為匹配。由此只需對相同類型數(shù)據(jù)進行比較,既能獲得較精確的匹配結(jié)果,又降低了計算量。
OpenCV函數(shù)庫提供了CvSURFParams()函數(shù)和cvExtractSURF()函數(shù)來實現(xiàn)SURF算法。
1.2 ARToolkit
ARToolKit是由日本廣島城市大學(xué)與美國華盛頓大學(xué)聯(lián)合開發(fā)的增強現(xiàn)實系統(tǒng)二次開發(fā)工具。利用計算機視覺技術(shù)計算觀察者相對于已知標(biāo)識的位置和姿態(tài)的視點,支持將Direct3D、OpenGL圖形和VRML場景合并到視頻流中,同時支持顯示器和頭盔顯示器等多種顯示設(shè)備。其實時、精確的三維注冊功能可使工程人員非常方便、快捷地開發(fā)增強現(xiàn)實應(yīng)用系統(tǒng)[7]。
ARToolKit包含了跟蹤庫及其完整源代碼,開發(fā)者可以根據(jù)平臺的不同調(diào)整接口,也可以自己設(shè)計跟蹤算法代替跟蹤庫。
ARToolKit工作流程為[8]:(1)進行標(biāo)識檢測,即根據(jù)用戶設(shè)定的閾值將攝像機采集到的一幀彩色圖像轉(zhuǎn)換成一幅二值黑白圖像; (2)對該二值圖像進行連通域分析,找出其中所有的四邊形區(qū)域作為候選匹配區(qū)域,將每一候選區(qū)域與系統(tǒng)模板庫中的模板進行匹配。如果匹配成功,則ARToolKit認(rèn)為找到了一個標(biāo)識,利用該標(biāo)識區(qū)域的變形來計算攝像機相對于已知標(biāo)識的位置和姿態(tài);(3)根據(jù)得到的變換矩陣實現(xiàn)虛實之間的注冊。
2 圖文解說增強現(xiàn)實的設(shè)計
2.1設(shè)計環(huán)境
本文所設(shè)計的圖文解說增強現(xiàn)實以Windows XP系統(tǒng)為平臺,以VC++ 6.0為開發(fā)環(huán)境,安裝了OpenCV庫和ARToolkit二次開發(fā)包,視頻攝取采用一個支持USB2.0的CCD攝像頭。
2.2 設(shè)計流程
圖文解說增強現(xiàn)實設(shè)計流程包括:讀取模板圖片、計算模板圖片的特征點,攝像頭攝入一幀,進行圖片灰度化,計算SUPF特征點,求出與模版圖匹配的圖像區(qū)域,計算所要疊加模型的變換矩陣,對攝入幀RGB轉(zhuǎn)RGBA、疊加模型及顯示一幀輸出圖像。如圖1所示。
2.3 模塊設(shè)計
2.3.1計算模板圖片的特征點
計算出模板圖片的特征點是整個流程的第一步。只有計算出這些特征點,才可以將模板圖片的特征點與攝像頭實時采集的圖像的特征點作圖像匹配。這里用cvLoadImage函數(shù)以灰度圖的形式讀入模板圖片,用cvSURFParams函數(shù)設(shè)定SURF算法的初始參數(shù),用cvExtractSURF提取模板圖片的SURF特征。
2.3.2 攝像
本文使用OpenCV函數(shù)庫打開攝像頭并捕捉圖像流來實現(xiàn)圖文解說。用cvCreateCameraCapture函數(shù)讀入攝像頭圖像,并將其內(nèi)容的變量地址返回一個cvCapture*類型的變量。cvQueryFrame函數(shù)的參數(shù)為cvCapture結(jié)構(gòu)的指針。用來將下一幀視頻文件載入內(nèi)存(實際是填充或更新cvCapture結(jié)構(gòu)中),返回一個對應(yīng)當(dāng)前幀的指針。
關(guān)鍵代碼如下:
//初始化部分
cvCapture* m_Video;
IplImage *newFrame;
if (!m_Video)
m_Video=cvCreateCameraCapture(0);
if (!m_Video)
{
printf("無法打開攝像頭");
return 0;
}
//循環(huán)部分
static void mainLoop(void){
newFrame=cvQueryFrame(m_Video);
//.......
}
2.3.3灰度化
計算特征點前,需要對原始圖像進行灰度化處理。這是因為OpenCV中計算SURF特征的函數(shù)是相對灰度圖進行操作。一張 RGB 圖像是由 R(紅色)、G(綠色)和B(藍色)三種顏色分量所組成,其中R=G=B的值為灰度值,而灰度是將三種顏色分量轉(zhuǎn)換成亮度值介于0~255之間的灰色,其中0代表最暗的黑色,255代表最亮的白色?;叶戎礩與RGB間的關(guān)系為:
Y=0.299R+0.587G+0.114B (3)
OpenCV中的cvCvtColor函數(shù)可以按式(3)將RGB圖像轉(zhuǎn)為灰度圖。
2.4 計算被識別圖片的特征點
用OpenCV中的cvExtractSURF函數(shù)計算被識別圖片的特征點。
2.5 計算模型的變換矩陣
ARToolkit中的arGetTransMatCont函數(shù)可以計算模型的變換矩陣。若使用這個函數(shù),需要先計算出標(biāo)識圖像的邊緣所在直線的位置,作為arGetTransMatCont函數(shù)的輸入?yún)?shù)。ARToolkit中以直線方程的標(biāo)準(zhǔn)式ax+by+c=0來表示一條直線,其中,a、b、c為常數(shù)。通過locatePlanarObject函數(shù)計算出標(biāo)識圖像的四角坐標(biāo),然后用這4個點求出標(biāo)識圖像的邊緣所在直線。具體計算方法如下: 將直線方程兩點式:■=■化為標(biāo)準(zhǔn)式,得到:
2.6 圖像轉(zhuǎn)換與顯示
OpenCV使用的是RGB三通道圖像,而ARToolkit使用的是RGBA四通道圖像。因此需要將RGB圖像轉(zhuǎn)換為RGBA圖像后,才可以使用ARToolkit中的相關(guān)函數(shù)顯示。具體操作方法:先用cvSplit函數(shù)將圖片分成R、G、B三個通道,再創(chuàng)建一個A通道,通過cvMerge將它們合并起來轉(zhuǎn)換成RGBA圖像,然后調(diào)用argDispImage函數(shù)顯示這個圖像。
2.7 疊加模型
OpenGL函數(shù)庫的工作主要是疊加模型。用OpenGL加載模型之前需要用argConvGlpara函數(shù)將ARToolkit的轉(zhuǎn)換矩陣變成OpenGL能夠使用的形式。加載模型之后,需要用argSwapBuffers函數(shù)將緩沖區(qū)的圖像顯示到屏幕上面。
3 實例測試
依據(jù)本文設(shè)計方法為到法國旅游的中國人設(shè)計了一個圖文解說增強現(xiàn)實功能軟件。當(dāng)游客用攝像頭拍攝如圖2所示的法國名畫時,系統(tǒng)會在拍攝畫面的周圍自動實時疊加與該名畫相關(guān)的中文解說信息,實現(xiàn)虛實疊加,讓游客對名畫有更詳細(xì)的了解。經(jīng)過測試,系統(tǒng)應(yīng)用功能穩(wěn)定,準(zhǔn)確完成位置正確的圖形疊加,實現(xiàn)圖文解說增強現(xiàn)實功能,如圖3所示。
本文提出一種基于SURF算法和ARToolkit的圖文解說增強現(xiàn)實應(yīng)用方法,不僅豐富了增強現(xiàn)實技術(shù)的應(yīng)用方向,而且對旅游產(chǎn)業(yè)的自動圖文解說技術(shù)發(fā)展具有應(yīng)用推廣意義。但研究只是做了一些基本的探索,要真正實現(xiàn)針對游客的圖文解說應(yīng)用,還需解決程序移植Android系統(tǒng)、視聯(lián)網(wǎng)搜索等問題。相信在科研人員不斷的努力下,這樣的功能一定可以得到更好的實現(xiàn)和應(yīng)用。
參考文獻
[1] 沈克,彭太樂.基于SURF的增強現(xiàn)實標(biāo)識物跟蹤注冊[J]. 計算機工程, 2010,36(13):254-256.
[2] CRYSTIAN W M, LIMA L J P, TEICHRIEB V, et al. Geometric modifications applied to real elements in augmented reality[C].2011 13th Symposium on Virtual Reality, SVR 2011, 2011:96-101.
[3] FANG H C,ONG S K,NEE A Y C.Interactive robot trajectory planning and simulation using Augmented Reality[J].Robotics and Computer-Integrated Manufacturing,2011,2(28):227-237.
[4] SEUNG P J. AR-Room: a rapid prototyping framework for augmented reality applications[J]. Multimedia Tools and Applications,2011,3(55):725-746.
[5] 黎松,平西建,丁益洪. 開放源代碼的計算機視覺類庫OpenCv的應(yīng)用[J].計算機應(yīng)用與軟件, 2005,22(8):134-136.
[6] 劉奇, 何明一.基于SURF特征匹配的圖像拼接算法[J]. 測控技術(shù),2010,29(10):27-31.
[7] 劉秀坤,郭貴洲.基于ARToolKit的戶外增強現(xiàn)實系統(tǒng)的設(shè)計和實現(xiàn)[J].測繪科學(xué), 2009(34):164-165,185.
[8] 常勇, 薛立明. 基于改進的ARToolKit的戶外增強現(xiàn)實系統(tǒng)構(gòu)建研究[J].系統(tǒng)仿真學(xué)報,2009(08):2273-2276.