唐 浩, 王紅旗, 茹淑慧
(河南理工大學 電氣工程與自動化學院,河南 焦作 454000)
隨著移動機器人的快速發展,移動機器人需要完成的任務多種多樣,例如物體抓取、空間探索、農業植保、搜索救援等,這些任務對移動機器人的定位提出了更高要求[1]。對于距離傳感器,激光傳感器價格昂貴,應用門檻太高,超聲波傳感器較大的誤差也限制其應用;輪式里程計結合慣性測量單元(inertial measurement unit,IMU)的應用得到了一定的推廣,但輪式里程計需要構建準確的車輪數學模型,存在遠距離運動后誤差累計的問題。視覺里程計僅僅利用攝像機采集到的圖片來估計出相對運動,提供了精確的軌跡估計,相對位置誤差范圍為0.1 %~2 %[2],能夠在信號遮擋,GPS導航系統不能用的地方如水下,室內等進行位姿定位。單目視覺里程計與雙目視覺里程計相比,因為僅僅使用了一個攝像頭,成本更低,圖像處理速度更快[3],并且在現有的硬件基礎上也更容易配置,因此單目視覺里程計具有更高的應用前景[4]。Nister D等人[5]對單目視覺里程計進行了早期研究,采用Harris算法提取特征點,結合5點和隨機抽樣一致性算法來進行運動估計,該方法對圖形的旋轉、縮放等變換適應性較差。Pretto A[6]采用尺度不變特征變換(scale invariant feature transform,SIFT)算法提取特征點,結合5點算法完成運動估計,采用SIFT算法對于圖像的平移、旋轉等有較好的適應性。文獻[7] 基于平面假設,將光流跟蹤與特征點匹配進行融合,通過卡爾曼濾波更新機器人的位置和姿態,該方法提高了定位精度,采用SURF算法對圖像的平移、旋轉、縮放等有較好的魯棒性,但SURF算法計算量比較大。經過改進的定向二進制(orientated binary,ORB)算法計算速度快、精度高,可以與光流法進行融合,提高視覺里程計的性能。
1.1.1 基于FAST算子角點檢測
在圖像中以像素點p為圓心,以3個像素單位為半徑畫圓,通過求出p點灰度值與該圓周上各像素點灰度值的差值,并統計該差值的絕對值大于某個閾值εd的點的個數,以此判斷p點是否為角點,則角點響應函數N為
(1)
式中I(i)為p點的圓周上第i個像素點的灰度值,對于給定的閾值N0(這里取N0為9),當N>N0時,認為p點為角點[8]。
1.1.2 基于LK法光流跟蹤
LK光流法基于三個假設:圖像光照變化不大;目標在幀間的位移比較?。痪植啃∴徲騼认袼攸c運動參數相同,依照前2個假設建立光流方程[9]
Ixu+Iyv+It=0
(2)
式中I為整幅圖像,Ix,Iy和It分別為圖像對x,y,t方向的導數,u,v分別為x,y方向的速度[10],利用超定方程組求解得到中心點的運動參數,其方程可表示為

(3)
如果圖像中的紋理區域最少包含兩個方向,就可以得到式(3)的定解,光流法跟蹤如圖1所示。

圖1 光流法跟蹤
1.1.3 位姿恢復
由對極幾何約束[11]可知,任意相鄰兩幀圖像上的對應點x,x′,滿足
x′TFx=0
(4)
式中F為基礎矩陣。得到基礎矩陣F后,用式(5)計算本質矩陣E
E=KTFK
(5)
式中K為相機內參矩陣,對本質矩陣E奇異值(SVD)分解,可以得到機器人相鄰幀間的旋轉矩陣R和平移向量T。
1.2.1 Hessian矩陣特征點檢測

(6)
式中 (x,y)為圖像坐標點,σ為尺度因子,Lxx(x,y,σ)為高斯拉普拉斯算子LOG,在此用DOG算子D(x,y,σ),取代LOG算子來近似的表達。則近似Hessian矩陣的行列式可表示為:det(Happrox)=DxxDyy-(wDxy)2,其中w為比例系數,在此取為0.9,如果近似Hessian矩陣的行列式det(Happrox)的符號為正,則該點為極值點[12]。
1.2.2 生成特征描述子
采用灰度質心法,給特征點增加方向信息,然后使用ORB構造特征描述子的方法,計算出特征描述子,進而得到了既具有旋轉不變性又有尺度不變性的特征描述子。
1.2.3 漢明距離匹配
由于使用ORB構造的是二進制描述子,所以可以利用漢明距離對特征點進行匹配,為了設定域值來篩選匹配點,本文的設置是當描述子之間的距離大于2倍的最小距離時,即視為匹配有誤,但最小距離有時會非常小,為此設置一個經驗值30作為下限。
1.2.4 剔除誤匹配對
找到兩幅圖像之間單應性矩陣,通過單應矩陣建立兩幅圖像間的關聯,采用RANSAC算法使用比較少的點對模型估算,再用余下的點去驗證模型的正確性,找到較為準確的模型,根據此模型篩選誤匹配點。改進ORB法特征匹配圖如圖2所示。

圖2 改進ORB法特征匹配
1.2.5 位姿恢復
同1.1.3位姿恢復方法類似,由相鄰幀的匹配點對,計算出相鄰幀間的本質矩陣,然后對獲得的本質矩陣使用奇異值分解得到旋轉矩陣R和平移向量T。
光流法計算速度快,定位頻率高,適合車輛的實時定位,但是誤差會隨著跟蹤點數的丟失而增加。改進ORB算法定位法精度較高,但定位頻率低,兩者的性能具有較好的互補性。本文提出一種光流法與改進ORB融合方法,具體步驟如圖3所示。

圖3 光流法和改進ORB特征點匹配融合算法流程
如圖3所示,在2幀圖像之間利用光流法獲得旋轉矩陣R和平移向量T,當第ln+1幀跟蹤特征點數小于設定的閾值時,對于ln幀和ln+1幀利用改進ORB特征點匹配法獲得兩幀間的旋轉矩陣R和平移向量T,同時重新檢測ln幀圖像并在ln幀和ln+1幀圖像間進行跟蹤,并通過地面的平面單應性矩陣來估計具體平移尺度[13],對之前得到的T進行更新,然后對于光流法的結果和特征點匹配得到的結果進行累積,不斷循環,得到最終的R和T。
為了驗證本文算法的有效性,在公開數據集KITTI上進行了測試,本文選取數據集序列5作為測試對象。實驗計算機參數為:Pentium(R) Dual-Core CPU,2 GB內存,64位操作系統。實驗所用的程序是在Visual Studio2015中使用C++編寫,并借助OpenCV3.0開源庫和Cmake3.8.0編譯工具。序列5中的800幀屬于靜態場景,同時含有相機校正文件,從中可讀出相機的焦距和主點坐標。在Visual Studio上進行仿真測試后,記錄下結果數據并用Matlab處理,得到與傳統光流法對比的定位結果比較如圖4(a)所示。

圖4 仿真結果對比
為了保證光流計算的精度,本文中對每幀檢測的最少特征點數設為800,當跟蹤特征點數低于這一閾值時,采用改進ORB算法進行幀間位移定位。另外本文算法平均每23幀執行一次循環,同光流法一樣具有較快的計算速度,從圖像幀中選取的8幀及其對應的運行時間如表1所示。

表1 里程計運行時間
從圖4(a)中可以看出,本文方法估計的軌跡更加接近真實軌跡,因為在拐彎處跟蹤點數快速減少,使用光流法估計的精度下降,所以在拐彎處兩種方法的差距更加明顯。從圖4(b)中可以看出,在前二百多幀時光流法定位精度稍高于本文方法,但隨著誤差的累積,之后光流法定位誤差越來越大,而本文方法因為融合了改進ORB算法精度得到提高,累積誤差導致的定位誤差比光流法小的多,在800幀范圍內誤差曲線始終在2 m范圍內波動。
本文設計了一種光流法和改進ORB特征點匹配算法融合的單目視覺里程計方法,采用光流和改進ORB基于閾值循環運行,突出了光流法處理時間短和改進ORB特征點匹配算法精度高的優點,相比于傳統的光流法視覺里程計,精度得到了提高。實驗結果表明,本文算法有著比較好的定位結果,對視覺里程計的開發有一定的指導意義。