楊幸彬,呂京國,2+,楊佳賓,王 琛,扈廷銳
(1.北京建筑大學 測繪與城市空間信息學院,北京 100044;2.北京建筑大學 城市空間信息工程北京市重點實驗室,北京 100044;3.信息工程大學 地理空間信息學院,河南 鄭州 450001)
視覺SLAM前端的穩定性直接決定了位姿估計結果的精度。目前,視覺SLAM前端處理的主流方式是通過序列圖像的特征點匹配結果實現影像同名點與環境地標點的關聯,達到影像的自主連續定位目的[1,2]。通常情況下序列影像的相鄰幀之間運動隨時間變化相對較緩慢,此時可以假設相鄰幀圖像并不存在尺度和旋轉等因素,因此已有研究將傳統光流點跟蹤算法應用于序列影像獲取匹配點和估計位姿[3,4]。
Hsiao等[5]提出多尺度LK光流跟蹤算法,有效改善了圖像運動量大的限制。賈開開等將LK光流法進行了擴展,將其應用于多幀影像間的特征點光流跟蹤,實現了多影像跟蹤算法[6]。劉彬等[7]對光流跟蹤初始位置進行了研究,提出基于單應變換的初始位置預測算法。
以上方法在解決圖像運動量較大時導致的光流跟蹤丟失問題上有一定效果,但由于相機的不規則運動,實際攝像機運動過程中會存在抖動、旋轉或視角變化等情況,此時相鄰幀影像間會產生較大的圖像變形,從而破壞光流法的空間一致性假設[8]。厲丹等[8]在多尺度影像求取位移量,有效解決了大尺度運動跟蹤丟失問題。李景衛[9]結合了SIFT算法和光流場的優點,實現了穩定精確的跟蹤算法。王澤民等[10]對光流跟蹤窗口像素進行加權處理,有效控制了光流偏差,提升了跟蹤精度。鄭馳等[11]結合光流與特征點匹配,獲取到了穩定的匹配點,但計算效率不高。
針對傳統光流法存在的問題,本文提出一種顧忌影像尺度與旋轉的改進光流點跟蹤算法,解決相機不規則運動對光流跟蹤點的影響,提高光流跟蹤點分布均勻度和精度。
光流法基于影像亮度一致性假設,通過對特征點局部窗口像素建立運動方程,從而求解特征點的光流運動變化量后得到跟蹤點坐標,由于該算法計算復雜度較低,比較容易滿足實時計算的要求,因此被廣泛地用于實時獲取序列圖像匹配點。光流法基于影像亮度一致性假設得到的約束方程如式(1)
I(x+Δx,y+Δy,t+Δt)=I(x,y,t)
(1)
式中:右側為像素點(x,y)在t時刻的灰度值,左側為初始位置跟蹤點在Δt時間變化范圍內像點偏移量(Δx,Δy)時的坐標位置亮度值。為了求解像素偏移量,可對式(1)左側進行一階泰勒展開,取一次項得式(2)

(2)
將式(2)帶入式(1)得
(3)
式中:?I/?x、?I/?y分別為像素點在x、y方向的灰度梯度,分別用Ix、Iy表示。u=Δx/Δt、v=Δy/Δt分別表示窗口內像素在x和y方向上的光流變化速率。為了求解像素的光流變化速率u、v,光流法首先假設在一個局部窗口W內所有的像素點具有相同大小的光流變化速率u、v,然后在窗口W內構建局部能量函數如式(4)
(4)
假設窗口W內像素數量為n=m×m(n>1),則對所有n個像素列出誤差方程如下,通過最小二乘原理可以求解得到像素點的光流變化量u、v
(5)
從式(4)構建的能量函數看,光流法求解的窗口W內的像素運動速率相同,即局部窗口的像素需要滿足空間一致性假設,同時像素的運動速率不能過大。然而,由于實際相機運動過程中除了平移運動,相機在空間中的旋轉以及運動尺度方向上也會存在一定的變化,由此會影響窗口像素的空間一致性假設,此外,影像的弱紋理信息也是造成跟蹤點精度下降的一個重要影響因素。圖1為相鄰兩幀圖像利用LK光流法[5]跟蹤后的匹配點結果,可以看出,由于深度和視角的變化,造成圖像右半部分幾乎沒有跟蹤到匹配點,而路面由于紋理信息量較少,也僅跟蹤到了極少數的點。綜合來看,圖像局部窗口的幾何變形和紋理信息量少是光流法跟蹤點少和精度受限的一個主要原因。

圖1 LK光流法獲取的相鄰兩幀影像跟蹤點
相機的不規則運動導致視角變化劇烈,直接影響了相鄰圖像的變形,因此難以獲得穩健的追蹤結果,甚至導致追蹤失敗。針對這一問題,提出一種改進的光流點跟蹤算法,其主要思路是利用初始的跟蹤點構建匹配三角形,利用三角形之間的尺度、旋轉關系獲取尺度旋轉不變窗口,然后進行光流跟蹤,由于對跟蹤窗口做了幾何糾正,使得窗口能夠更好地擬合圖像變形,從而提高了跟蹤精度,另外改進光流跟蹤算法采用DOG算子[12]檢測特征點,重現率較高,能夠有效增加跟蹤點的數量。圖2為尺度旋轉不變窗口的跟蹤過程,具體算法流程如下。

圖2 尺度旋轉不變跟蹤過程
(1)LK光流法跟蹤稀疏特征點。首先對圖像分塊提取Harris角點[13],利用LK光流法跟蹤特征點,獲取初始的匹配結果。
(2)構建匹配三角形。相機的運動使得光流跟蹤窗口之間存在幾何變形,因此可以根據稀疏的初始跟蹤點構建匹配三角形,如圖3所示ΔABC為t1幀圖像上初始光流點構建的基準三角形,ΔA′B′C′為t2幀圖像上跟蹤點構建的匹配三角形,假定影像局部范圍內的變形可以用仿射變換近似表達,則基準三角形與匹配三角形窗口之間的仿射變換關系可以表示為式(6)
x′=a0+a1x+a2y
y′=b0+b1x+b2y
(6)
式中:像點(x,y)為t1幀圖像上基準三角形頂點坐標;(x′,y′)為t2幀圖像上匹配三角形頂點坐標;6參數仿射變換可以用a0,a1,…,b2表示。
(3)獲取匹配三角形窗口的尺度與旋轉變換參數。將6參數仿射變換模型簡化表達為局部相似變形,相似變換關系如式(7)
x′=a0+(scosθ)x+(-ssinθ)y
y′=b0+(ssinθ)x+(scosθ)y
(7)
式中:s表示t2幀圖像上匹配三角形對應t1幀圖像基準三角形間的等比例縮放系數;匹配三角形間的旋轉角表示為θ。聯立上式(6)、式(7),可以得到如下關系
(8)
式中:縮放系數s和三角形旋角θ可以利用匹配三角形3對頂點坐標列線性方程組后直接線性求解得到,由于s和θ參數近似定量表達了基準三角形和匹配三角形窗口間的尺度與旋轉變化值,可用于描述尺度旋轉不變三角網窗口,圖3為p點與p′點的局部尺度旋轉不變窗口計算示意圖,圖3中ΔABC、ΔA′B′C′頂點為初始光流跟蹤點利用狄羅妮三角網構建的匹配三角形,p、p′為t1幀與t2幀圖像上待加密的匹配點。

圖3 尺度旋轉不變窗口計算過程
(4)獲取DOG特征點。由于本文算法在步驟(1)獲取的光流點為明顯的角點,為了匹配三角形內得到異于Harris的特征點,本文獲取加密點時采用DOG算子得到t1幀圖像基準三角形內的高斯差分極值點,考慮算法耗時問題,本文方法僅構建當前尺度空間圖像,然后在此空間上檢測DOG特征點。
(5)顧忌尺度與旋轉的光流點跟蹤。考慮到光流跟蹤需要較為穩定的特征點,本文在DOG特征點的基礎上跟蹤其光流點。首先根據初始的光流跟蹤點基于角度交會法獲取下一幀圖像DOG特征跟蹤點的初始位置,角度交會法原理如式(9)

(9)
式中:α為AB與BP夾角,β為AB與AP的夾角;(xA′,yA′)、(xB′,yB′)、(xp′,yp′)代表點A′、B′、p′在影像上的像素點坐標。獲取到預測跟蹤點的初始像素位置后,利用步驟(3)計算的匹配三角形尺度旋轉變換參數獲取跟蹤點窗口,由于顧及到窗口的尺度旋轉變化量,此時能量函數中的It應表示顧及尺度旋轉量后的像素灰度差,如式(10)
It=I(x,y,t)-I[xc+wx·s·cosθ-wy·s·sinθ,
yc+wx·s·sinθ+wy·s·cosθ,t+1]
(10)
式中:(xc,yc)為跟蹤點窗口中心像素坐標,wx、wy分別為跟蹤點原始窗口像素相對窗口中心點坐標的偏移量。在完成窗口內像素灰度差的計算后,按照式(5)的基本原理即可求解光流變化量u、v。
(6)誤跟蹤點剔除。在獲取到跟蹤后的DOG匹配點后,將其和Harris跟蹤點一同進行RANSAC[14]粗差點剔除,即可得到最終加密跟蹤點坐標,由于顧及了跟蹤窗口的尺度與旋轉變化量,跟蹤點的精度也會得到一定提升。
在Win10 64位系統下基于VC++開發了改進的光流點跟蹤算法,為了驗證算法在相機不規則運動和影像弱紋理場景下算法的有效性,實驗選取兩組典型道路場景序列影像進行驗證。使用的兩組實驗數據均為Middlebury網站發布的KITTY自動駕駛數據集[15]序列圖像,其中第一組序列圖像分辨率為1344×372,為車輛在彎道處行駛拍攝的序列影像,該組序列圖像用于仿真相機在非規則運動模式下拍攝的大視角和弱紋理影像變化情形;第二組實驗序列圖像分辨率大小為1242×375像素,該組序列圖像拍攝條件為弱紋理道路場景下相機快速直線運動時的場景,可用于仿真相機快速運動時序列影像存在的大尺度變化情形,兩組序列影像的首末兩幀圖像示例如圖4、圖5所示。

圖4 72-82幀序列圖像

圖5 13-16幀序列圖像
為了驗證本文算法獲取的跟蹤點效果和質量,實驗分別以定性和定量兩個評價指標分析本文方法的獲取的跟蹤點有效性,對于跟蹤點效果,實驗通過獲取的跟蹤結果中匹配點數量與匹配點分布均勻度來評定,而跟蹤結果的匹配點質量使用兩組序列影像最終的位姿優化結果的平均像點重投影誤差來評定。
首先選取第一組數據中序列圖像間存在較大尺度和旋轉變化的臨近幀進行匹配點跟蹤實驗,驗證本文方法的特征匹配點跟蹤效果。如圖6、圖7為尺度和旋轉存在較大變化的相鄰兩幀圖像(74幀-75幀)利用LK光流法和本文方法跟蹤到的匹配點結果。其次,圖8、圖9為相機快速運動情況下獲取到的第二組數據13幀-14幀圖像得到的LK光流點和本文方法的跟蹤點結果。

圖6 相鄰兩幀圖像Harris初始LK光流跟蹤點

圖7 相鄰兩幀圖像加密后跟蹤點

圖8 相鄰兩幀圖像Harris初始LK光流跟蹤點

圖9 相鄰兩幀圖像加密后跟蹤點
從第一組相機非規則運動模式下臨近幀的跟蹤點結果可以明顯看出,傳統的LK光流法對于相機存在旋轉和尺度變化的場景影像上(影像下部分區域)僅獲取到了少量跟蹤點,跟蹤點基本分布在影像顯著紋理區域,而本文方法在處理該運動模式時表現出了較為穩健的結果,不僅匹配點數量有所增多,同時在路面等弱紋理區域也獲得了有效的匹配點,分析其原因主要是本文方法在光流點基礎上用復現率較高的DOG算子進行跟蹤,特征點更加穩定,同時構建了影像局部尺度旋轉不變窗口使跟蹤點顧及了影像旋轉和尺度變化量,因此相比于LK光流跟蹤點丟失的概率有所減少,此外,從路面的跟蹤結果看,即使在紋理匱乏的場景下本文方法也得到了一定數量均勻分布的匹配點。從第二組相機快速直線運動場景的實驗數據對比結果來看,本文方法能夠一定程度上改善相鄰幀尺度變化較大的序列影像匹配點,從匹配點分布上看,除了視角變化較大所造成的影像右上角物體遮擋,匹配點基本分布在了整張影像上。本文算法和LK光流法跟蹤到的匹配點數量對比結果見表1,可以看出,本文算法在光流法的基礎上獲取到了更多的跟蹤點。

表1 跟蹤點數量對比結果
為驗證尺度旋轉不變跟蹤方法的跟蹤點結果質量,實驗選取兩組序列影像的部分連續幀進行跟蹤和位姿估計,其中第一組序列影像共11幀,第二組序列影像一共4幀,實驗分別利用經典的LK光流法和本文跟蹤方法對兩組數據進行光流點跟蹤,然后將跟蹤點結果納入捆綁集整體優化調整后獲取影像的位姿結果,為了定量評價跟蹤點精度,本文使用開源的COLMAP軟件[16]同時獲取每幀影像位姿結果,3種方法的跟蹤點精度利用優化后的三維點在影像上的重投影誤差平均值來評定,3種方法跟蹤點優化后的三維點數量和精度結果見表2。

表2 像點平均反投影誤差結果
傳統的光流跟蹤算法在處理影像尺度旋轉變化時適用性不高,本文提出了一種改進的光流點跟蹤算法,該方法在初始光流跟蹤點的基礎上構建匹配三角形,利用三角形的尺度旋轉變化量對光流跟蹤算法進行改進后得到跟蹤點。通過對兩組旋轉和尺度變化較大的序列影像進行實驗,結果表明:本文方法獲取到的跟蹤點數量更多,基本分布在整張影像上,利用本文跟蹤方法獲取的匹配點優化后平均像點重投影誤差要優于0.8個像素。考慮到本文跟蹤算法目前主要用于解決大尺度和旋轉影像的匹配點分布和精度問題,其實時性有待提升,因此下一步的主要目標是在保證匹配點均勻度的基礎上僅加密部分匹配點,提高算法的實時性。