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