劉 佳 閆 冬 郭 斌
(南京信息工程大學(xué)自動化學(xué)院, CICAEET, 南京 210044)
增強現(xiàn)實(augmented reality, AR)是在用戶觀察到的真實環(huán)境中添加計算機生成的虛擬物體或文字等信息的技術(shù)[1]。建立虛擬環(huán)境和現(xiàn)實物理世界的映射關(guān)系,智能實時地將相關(guān)信息融合呈現(xiàn)在位于現(xiàn)實環(huán)境的用戶前面,達到增強用戶臨場感知能力的目的[2]。該技術(shù)目前在手術(shù)醫(yī)療、軍事訓(xùn)練、工業(yè)維修、教育、交通導(dǎo)航上有著廣泛的應(yīng)用。增強現(xiàn)實的關(guān)鍵技術(shù)有跟蹤注冊、虛實融合和人機交互,這其中的核心是跟蹤注冊技術(shù)。目前基于視覺增強現(xiàn)實跟蹤注冊技術(shù)大致分為三大類,一類是基于四方黑白標(biāo)識的跟蹤注冊,一類是針對自然特征的匹配注冊,還有一類是通過建立局部地圖進行虛擬注冊。其中第1種方法由于臨場環(huán)境的局限性限制了發(fā)展空間;第2種由計算機性能和算法決定系統(tǒng)運行速度,不能保證系統(tǒng)實時處于穩(wěn)定狀態(tài);而第3種方法的代表則是SLAM/PTAM(simultaneous localization and mapping/parallel tracking and mapping),通過建立虛擬地圖獲得實時點的位姿關(guān)系進行注冊,系統(tǒng)本身復(fù)雜度高,并且為了保證系統(tǒng)的穩(wěn)定性而犧牲了不小的運行速度。
傳統(tǒng)基于自然特征點匹配的增強現(xiàn)實系統(tǒng)的實現(xiàn),是借助檢測算法檢測預(yù)存的目標(biāo)圖像和相機捕獲圖像之間的點對應(yīng)位置,計算之間的單應(yīng)性關(guān)系,從而實現(xiàn)虛實融合注冊。傳統(tǒng)的人工特征如尺度不變特征變換(scale invariant feature transform,SIFT)、加速魯棒特征[3](speeded-up robust features,SURF),兩者在移動端都不能實時穩(wěn)定運行。為了能在移動端使用此類特征,Ethan等人[4]在2011年提出快速特征點提取和描述算法(oriented fast and brief, ORB)。隨著神經(jīng)網(wǎng)絡(luò)的發(fā)展,部分研究者通過訓(xùn)練深度卷積神經(jīng)網(wǎng)絡(luò)以估計平面單應(yīng)性,這種算法在很大程度上節(jié)省了檢測和匹配所耗費的時間,提高了系統(tǒng)的實時性。例如Nguyen等人[5]提出的無監(jiān)督深度單應(yīng)性估計模型。除了這種端對端的訓(xùn)練方式,也有很多人開始使用神經(jīng)網(wǎng)絡(luò)結(jié)合傳統(tǒng)的人工特征的深度學(xué)習(xí)算法進行訓(xùn)練,如Verdie等人[6]提出的時間不變檢測器(temporally invariant learned detector,TILDE)算法,該特征對變化巨大的場景具備很好的魯棒性。盡管如此,TILDE算法卻缺少了特征描述符,需要借助傳統(tǒng)的方法進行匹配。而Yi等人[7]提出的基于學(xué)習(xí)的不變特征變換(learned invariant feature transform,LIFT)算法通過soft-argmax函數(shù)和空間變化網(wǎng)絡(luò)實現(xiàn)從檢測到匹配的完整步驟,因此穩(wěn)定效果很好。從實時性考慮,如果上述基于深度學(xué)習(xí)的特征不借助GPU的并行運算能力,很難達到實時運行的目的。因而考慮現(xiàn)實條件,傳統(tǒng)的特征匹配方法仍然具備很大的優(yōu)勢。
本文基于自然特征識別注冊方法考慮,通過改進FAST(features from accelerated segment test)檢測算法建立低維圖像空間進行直方圖匹配,使其能快速定位,進而利用SURF算法較好的魯棒性結(jié)合改進后的卡爾曼濾波[8]算法進行跟蹤注冊,實現(xiàn)匹配和跟蹤的結(jié)合。
本文提出了一種通過改進FAST檢測作圖像粗略定位的算法。FAST算法本身不具備尺度不變性,為了能夠減少尺度變化對檢測效果的影響,建立圖像金字塔進行降采樣(見圖1),使其具備尺度不變性。本文旨在提高檢測效率以保證在跟蹤目標(biāo)丟失時能快速定位目標(biāo)所在區(qū)域,在建立圖像金字塔時以1.2倍縮放采樣,采樣4次,當(dāng)檢測到關(guān)鍵點后保存關(guān)鍵點所在位置的RGB像素信息,將采集的像素信息重新分配到新建的3通道一維矩陣降低圖像維度。將新建的矩陣空間轉(zhuǎn)換成HSV圖像空間矩陣,然后建立HSV空間的顏色直方圖。除檢測目標(biāo)圖像外,還需將相機捕獲的圖像分割成5等份,分別建立顏色直方圖,以確定最大相似度[9](如圖2所示)。
圖1 采樣金字塔
圖2 5等分切割
本文使用的定位算法主要由以下3個要素構(gòu)成。
(1) 建立尺度空間
① 對第l層圖像進行高斯卷積運算。
② 將偶數(shù)行和列刪除:
gl-1(2i+m, 2j+n)
(1)
(2) 提取特征點
參考ORB算法的提取步驟,在粗提取時采用FAST特征檢測算法提取候選特征點,以提取的候選特征點p為圓心,畫一個以3像素大小為半徑的圓,在圓周上的16個點內(nèi),檢測1、5、9、13位置上的點的灰度值是否有3個或以上都大于或小于p點的灰度值,如果不滿足則排除這個候選點,如果滿足,檢測是否存在連續(xù)的12個點都大于或者小于p點的灰度值,如果滿足則此候選點為需要的特征點。使用非極大值抑制剔除密集點,以保證特征點的分散性。
(3) 區(qū)域相似度檢測
將檢測到的特征點所在位置的3通道像素信息重新寫入到3通道n行1列的矩陣中,為了方便比較,將RGB空間轉(zhuǎn)換成HSV空間,使用如下相關(guān)性比較的方法。
d(H1,H2)
(2)
當(dāng)d越接近1,則表明圖像越相似;當(dāng)d<0.5時則表示圖像不相關(guān)(本文將d設(shè)置為0.6)。在本文算法中,建立直方圖進行查找相關(guān)圖像是為了快速定位目標(biāo)圖像的大體區(qū)域,檢索的圖像尺度僅為320×240像素大小,為了提高待檢測圖像的準(zhǔn)確率,使用FAST算法在多尺度空間檢索特征點。將特征點的像素信息寫入新的一維圖像以加快檢測的速度,當(dāng)圖像跟蹤失敗時,可以更加快速穩(wěn)定地銜接視頻的連續(xù)性。
SURF算法是根據(jù)SIFT算法改進而來,也具備尺度不變性、旋轉(zhuǎn)不變性和光照一致性,它很好地應(yīng)用在增強現(xiàn)實和機器人建模等領(lǐng)域。通過構(gòu)造Hessian矩陣,計算特征值。取Hessian矩陣為
(3)
當(dāng)det(H)=0時,取得局部極值,則認(rèn)為這個點是關(guān)鍵點。SURF算法使用盒式濾波器代替高斯濾波,為了削減誤差,則在x、y的二階導(dǎo)的方向乘上0.9得到:
det(Happrox)=LxxLyy-(0.9Lxy)2
(4)
與SIFT算法不同,在尺度空間上,SURF算法通過改變卷積核實現(xiàn)多尺度圖像的并行處理,減少了算法時間復(fù)雜度。在選取旋轉(zhuǎn)的主方向時,SURF算法通過以6s(s為興趣的尺度大小)鄰域內(nèi),統(tǒng)計Haar小波特征,在60 °內(nèi)找到每個響應(yīng)值賦以高斯權(quán)重系數(shù),從而確定主方向(如圖3所示)。
圖3 特征方向選擇
計算SURF特征點的描述子時,在特征點周圍選取4×4的區(qū)域塊,每個塊對應(yīng)有∑dx、∑|dx|、∑dy、∑|dy| 4個分向量,因此SURF描述子共有64維向量。采用K-means聚類算法[10]建立快速最近鄰索引。
(1) 隨機選取k個聚類質(zhì)心點(本文選取32個)為u1,u2, …,uk∈RN。
(2) 重復(fù)以下過程直到收斂。
① 對于每個點,計算其應(yīng)該屬于的類:
(5)
② 對于每個類j,重新計算該類的質(zhì)心:
(6)
(3) 定義畸變系數(shù)。
(7)
畸變系數(shù)表示每個點到其質(zhì)心點的距離平方和,通過該算法將J約束到最小值。由于畸變系數(shù)是非凸函數(shù),所以質(zhì)心位置存在隨機性會導(dǎo)致最優(yōu)結(jié)果隨機化。但在多次實驗中發(fā)現(xiàn),SURF特征檢測算法結(jié)合K-means匹配算法依然具備很好的魯棒性和實時性。
在位姿估計方面,對成功匹配的兩幅圖像(目標(biāo)圖像與檢測到的區(qū)域圖像)進行單應(yīng)性矩陣[11]計算,通過隨機抽樣一致[12](random sample consensus,RANSAC)算法將不正常匹配的點剔除。當(dāng)確定兩幅圖像對應(yīng)點的坐標(biāo)位置后,可以使用下式進行矩陣計算:
(8)
對未知數(shù)Hij(i,j∈1,2,3)至少存在3組不共線的匹配點才能計算出單應(yīng)性矩陣H,所以使用盡可能多的匹配點可以保證計算結(jié)果更具備魯棒性。與傳統(tǒng)方法一樣,通過模板圖像的4個邊界角找到對應(yīng)當(dāng)前幀的4個點,即[xiyi1]T=H[xjyj1]T。對于增強現(xiàn)實的位姿計算來說,通過單目相機捕獲的二維像素坐標(biāo)和對應(yīng)確定的三維世界坐標(biāo)存在如下關(guān)系:
(9)
其中等號右邊的第1個矩陣表示相機的內(nèi)參矩陣,f為相機的焦距,Δx和Δy表示相機捕獲畫面的1個像素點在真實世界中的尺寸大小,u0和v0對應(yīng)相機的焦距中心點。第2個矩陣表示相機的外參矩陣,R為位姿的旋轉(zhuǎn)矩陣,表示為3×3的矩陣,T表示平移向量,表示為3×1的向量。式(9)中,旋轉(zhuǎn)矩陣R由世界坐標(biāo)的3個角度構(gòu)成,因此其構(gòu)成的3組方程中有6個未知量,其中1組不存在未知量,所以構(gòu)成了2組方程的6個未知量。為了求出6個未知量的解,則需要至少3組在平面坐標(biāo)中不共線的點構(gòu)成6組方程進行求解。對于相機內(nèi)參和畸變系數(shù)求解,可以通過文獻[13]的棋盤標(biāo)定法獲得。
基于自然特征增強現(xiàn)實的圖像識別算法,一般運用特征檢測算法進行全局檢測,通過匹配到相應(yīng)目標(biāo)圖像的相關(guān)特征點,使用光流法或直接法進行持續(xù)跟蹤。這樣方法的優(yōu)點是速度快,但也存在魯棒性差、虛擬物體易丟失等缺點。并且由于光流法和直接法本身的局限性,不適合在戶外等光照變換大的場景下使用,所以這類方法不具備普遍適用性。本文針對此類算法的局限性,提出了新的算法,可適用于移動端和戶外等光線強度變換較大的場景。本文通過聯(lián)合SURF和改進后的卡爾曼濾波算法,在連續(xù)跟蹤過程中,始終以最小的計算代價找到最大滿足SURF計算條件的區(qū)域。
圖4 改進觀測值選取原理圖
圖5 區(qū)域跟蹤原理
首先根據(jù)卡爾曼濾波滿足的線性條件建立一個四維的狀態(tài)向量和二維的觀測向量,四維的狀態(tài)向量分別表示x、y的位置點和其對應(yīng)的速度值。通過運動方程xk=Akxk-1+Bkμk+wk表示,由于缺少控制向量,則設(shè)Bk為0向量,滿足狀態(tài)轉(zhuǎn)移矩陣A=[[1,0,1,0][0,1,0,1][0,0,1,0][0,0,0,1]]T,可以理解為上一個狀態(tài)的位移量加上單位速度量則表現(xiàn)為當(dāng)前狀態(tài)的位移量,而考慮系統(tǒng)誤差和觀測誤差,令wk~N(0,Qk),vk~N(0,Rk)。觀測方程根據(jù)卡爾曼濾波表示為zk=Hkxk+vk,因為本文觀測方程和狀態(tài)方程的特殊關(guān)系,Hk為2×4的矩陣,其中觀測方程只和當(dāng)前狀態(tài)向量的前二維有關(guān),即位移點,所以取Hk=[[1,0,0,0][0,1,0,0]]T。為了滿足系統(tǒng)對狀態(tài)方程的最優(yōu)估計,需要在觀測階段對狀態(tài)值進行校正,此時引入?yún)f(xié)方差矩陣進行更新:
Pk|k-1=A·Pk-1|k-1·AT+Q
(10)
其中,Pk|k-1表示預(yù)測狀態(tài)值的協(xié)方差矩陣。通過當(dāng)前系統(tǒng)的預(yù)測結(jié)果和現(xiàn)在狀態(tài)的測量得到當(dāng)前狀態(tài)的最優(yōu)化估計:
xk|k=xk|k-1+Kk(zk-H·xk|k-1)
(11)
Kk表示當(dāng)前的卡爾曼增益系數(shù),由協(xié)方差矩陣P和測量矩陣H表示,即:
Kk=Pk|k-1·HT/(H·Pk|k-1·HT+R)
(12)
將此時的卡爾曼增益帶入最優(yōu)估計求解,并利用這個增益計算下一時刻所需要的協(xié)方差矩陣值:
Pk|k=(1-Kk·H)Pk|k-1
(13)
此時可以完整地通過觀測值預(yù)測下一時刻的中心點位置。但是觀測值的選取卻影響著整個系統(tǒng)的穩(wěn)定。如果觀測值出現(xiàn)較大的誤差,而預(yù)測值也將不準(zhǔn)確,在這里,本文通過改進對觀測值的選取來改善整個系統(tǒng)的性能,方法如下。
(1) 初始化階段
建立非線性的損失函數(shù)模型,本文設(shè)置模型為
f(x)-exp(a·x2+b·x+c)
(14)
定義觀測數(shù)據(jù)N組(本文N設(shè)置為20),通過觀測數(shù)據(jù)建立最小二乘函數(shù):
argmin∑x‖f(x)-exp(a·x2+b·x+c)‖2
(15)
同時對前N組的初始值進行賦值求解,如果對前N組全部賦值0,則最后求得的參數(shù)容易陷入局部最優(yōu)解,其待求參數(shù)在初始化階段被錯誤求解出來,因此在f(x)和x的取值為0的基礎(chǔ)上加上高斯擾動,令其處于波動狀態(tài)。
(2) 求解階段
在相機運動或者目標(biāo)物體運動過程中不完全符合本文所期待的運動方式,為了保證給定擬合的數(shù)據(jù)不隨時增長導(dǎo)致擬合參數(shù)不準(zhǔn)確并且計算量大幅提升,在接受新的數(shù)據(jù)同時剔除老舊的數(shù)據(jù)使其維持在N的參數(shù)范圍內(nèi)。利用L-M方法迭代求解,最后通過已知參數(shù)尋找下一時刻單位的解,即求解預(yù)測的“觀測點”。
(3)判定階段
此時本文得到兩組觀測點,一組是實際觀測到的點,另一組是預(yù)測的“觀測點”。希望實際觀測的點是準(zhǔn)確的,但是不論是噪聲存在或者光照因素影響,觀測到的數(shù)據(jù)總可能是錯誤的,這里本文引入第三方評測指標(biāo)來判斷哪個值更準(zhǔn)確。
假設(shè)之前的觀測數(shù)據(jù)都是準(zhǔn)確的(或者觀測數(shù)據(jù)被矯正過),而卡爾曼濾波的預(yù)測值和下一幀的觀測之間也存在誤差,誤差可能很小。將這些誤差的絕對值建立一組擬合數(shù)據(jù),根據(jù)誤差增長率來判斷選取哪一個“觀測值”更可靠,同樣建立N-1組的數(shù)據(jù)來擬合線性方程,通過對第N組數(shù)據(jù)的預(yù)測來判斷卡爾曼濾波預(yù)測的值和其“觀測值”的相對誤差更接近:
{||zk-pk-1|-gk|}‖
(16)
本實驗從實時性、穩(wěn)定性兩個因素進行分析,對500幀圖像進行尺度變換、旋轉(zhuǎn)變換、光照變換和視角變換這4種變化。使用全局SURF、ORB、FREAK[14]、ORB-LK[15]和本文提出的算法進行比對分析,觀察運行幀率和正確姿態(tài)注冊的圖像數(shù)目,采用fps為單位進行實時性比對,穩(wěn)定性的單位采用正確姿態(tài)的注冊百分比。本次實驗使用的測試平臺是Inter(R) Core(TM)i7-2600 CPU @ 3.2 GHz、8 G的DDR3內(nèi)存、羅技攝像頭、OpenCV3.3.1圖像視覺庫、OpenGL繪圖庫、Ubuntu16.04 LTS操作平臺。本文的總體流程圖如圖7所示。
圖6 改進后卡爾曼預(yù)測更新流程圖
圖7 全局流程圖
本次實驗設(shè)定攝像頭采集的分辨率為640×640像素、給定的模板圖像分辨率為415×585像素。為了提高穩(wěn)定跟蹤的實時性,在初始化和目標(biāo)丟失時需要重新定位目標(biāo)圖像的粗略位置以減少不必要的搜索空間。從實時性方向考慮,對給定的500幀圖像進行采樣分析,每10幀計算其平均幀率,采樣50次,用本文算法和傳統(tǒng)方法如SURF、ORB、使用SURF+FREAK的組合的方式,和深度學(xué)習(xí)方法如SuperPoint[16](self supervised interest point detection and description)分別進行比較,圖中的最低值為0,最高值為60,結(jié)果如圖8所示。
(a) SURF+FREAK
其中前3種算法屬于直接檢索全局圖像進行實時匹配分析圖像的位姿關(guān)系,而本文為了縮減前期的定位時間,使用FAST算法進行采集像素信息建立直方圖的方法以快速確定目標(biāo)圖像所在位置。本文算法中為了確保定位圖像的大部分區(qū)域?qū)儆谀繕?biāo)圖像,在相似度檢測算法方面設(shè)置閾值為0.6。
本文使用卡爾曼濾波器的預(yù)測值進行尺度定位,結(jié)合SURF算法的觀測值不斷修正預(yù)測值結(jié)果。與其他目標(biāo)跟蹤算法不同,增強現(xiàn)實(AR)的跟蹤算法不僅需要目標(biāo)的位置和尺度信息,更依賴相機的姿態(tài)信息。目前已知關(guān)于位姿跟蹤的相關(guān)算法有IC(incerse compositional)[17]、ESM(improving vision-based control efficient second-order minimization techniques)[18]、Struck(structured output tracking with Kernels)[19]、Gracker(graph-based planar object tracker)[20]等。其中基于模板的IC和ESM算法對于遮擋不具備魯棒性,Struck對于光照性比較差,而Gracker算法依賴的SIFT描述子,在實時性方面不具備優(yōu)勢。因此本文使用卡爾曼濾波的方法,預(yù)測目標(biāo)的位置和尺度信息,通過觀測位姿信息校正目標(biāo)位置和尺度,跟蹤效果如圖9所示。
圖9 預(yù)測跟蹤效果
如圖9所示,□位置框表示觀測狀態(tài)值,▼位置框表示選定的預(yù)測值,▽位置框表示預(yù)測的“觀測”值,□對應(yīng)點表示觀測點,▼對應(yīng)點表示預(yù)測點,▽對應(yīng)點表示預(yù)測的“觀測點”。每隔10幀進行取樣,得到一組如上所示軌跡圖。隨機選取目標(biāo)圖像由于目標(biāo)小,而預(yù)測的“觀測點”失誤,本系統(tǒng)很好地分析了哪組觀測點為正確的觀測點。對圖9(b)采樣500幀圖像,判斷預(yù)測區(qū)域和真實區(qū)域的交并比是否小于80%,如果小于此值判斷為丟失狀態(tài)。每50幀計算丟失次數(shù),共計10次。
表1 采樣跟蹤錯誤率
本文提出算法的實驗效果為圖10所示。
圖10 三維注冊效果
為了驗證本文算法的有效性,在不同的目標(biāo)上進行不同的虛擬物體注冊,得到如圖11所示效果。
如圖9所示,本文提出的算法能實時預(yù)測下一幀目標(biāo)圖像大體的位置,并適時地調(diào)整檢測區(qū)域大小,得到效果如圖10的右側(cè)小窗口所示。通過這樣的檢測方法,得到的誤差點少,合適的匹配點多,因此能盡可能地減少匹配誤差,也能通過檢索縮減的匹配空間來增加實時性能。本次實驗中,采集前500幀圖像,對第50幀、100幀、200幀、350幀和500幀進行采樣,通過對SURF、ORB、SURF+FREAK和ORB-LK等幾種經(jīng)典算法和SuperPoints基于深度學(xué)習(xí)的特征點檢測和匹配方法進行實時性和穩(wěn)定性比較,得到如表2和表3所示的結(jié)果。
圖11 隨機變換注冊
表2 各算法的實時性分析(單位為fps)
表3 各算法的穩(wěn)定性分析
從表中數(shù)據(jù)分析,使用ORB結(jié)合光流法代替匹配,可以大幅度提高算法的實時性,但是由于光流法對光照的敏感性,在第200幀之后穩(wěn)定性大幅度下降。使用SURF算法可以提高注冊結(jié)果的穩(wěn)定性,但是由于算法本身的時間復(fù)雜度高,所以其損耗的時間也比其他對比的算法時間長。本文算法在實時性方面比單純的SURF匹配提高了兩倍,其次在穩(wěn)定性方面和SURF全局算法相差無幾,因此本文提出的算法在幾種變換下都能很好地滿足實時性和穩(wěn)定性要求。
本文提出了一種基于改進卡爾曼濾波的增強現(xiàn)實跟蹤注冊算法。該算法使用FAST檢測器在不同的金字塔層進行采樣檢測并通過使用相關(guān)性比較的方法進行快速定位目標(biāo)區(qū)域,以幫助系統(tǒng)在丟失再恢復(fù)時提高了穩(wěn)定性。采用改進后的卡爾曼濾波結(jié)合SURF對目標(biāo)區(qū)域的位置和大小進行觀測從而預(yù)測下一幀目標(biāo)圖像的區(qū)域大小和位置,以幫助提高系統(tǒng)的實時性。算法使用最小二乘的方法對卡爾曼濾波算法進行改進,通過收集前N幀的先驗信息對下一幀進行約束矯正提高了系統(tǒng)的穩(wěn)定性。利用圖像的二維坐標(biāo)信息結(jié)合三維空間的坐標(biāo)信息,使用PnP算法獲得相機的位姿,利用OpenGL繪制虛擬物體,加載視圖矩陣以達到注冊的目的。實驗表明,該算法可以穩(wěn)定在40幀以上的均率運行,如果在穩(wěn)定性方向降低要求,使用ORB算法代替用來觀測的SURF算法還可以提高10幀左右的工作效率。總體上,本文提出的算法在光照變換、旋轉(zhuǎn)變換、尺度變換方面都具備魯棒性,并且具有優(yōu)越的實時性能,同樣適用于相關(guān)的位姿跟蹤領(lǐng)域。