劉 瑞,徐雪松,曾 昱
(華東交通大學 電氣與自動化工程學院,江西 南昌330013)
視覺里程計算法[1-2]是視覺定位的方法之一,通過在車輛、機器人等載體上裝備的單個或多個相機獲取視頻信息,然后通過對連續(xù)幀圖像分析計算運動情況[3]。 相比全球定位系統(tǒng)或慣性導航等定位方式,視覺里程計[4-5]成本更低、累積誤差更小,因而在室內(nèi)和航空航天等領域發(fā)揮著重要的作用[6],是對傳統(tǒng)定位方式的有效補充[7]。
視覺里程計的主要環(huán)節(jié)包括圖片獲取、特征提取與匹配追蹤、運動估計等[8]。圖片獲取可通過相機獲得。特征提取與追蹤[9-10]是匹配或追蹤前后幀的同一特征點。 運動估計則是根據(jù)特征點變換信息并結合相機內(nèi)外參數(shù)恢復其運動信息。在特征提取環(huán)節(jié)中,由于角點檢測算法簡單、實時性好,為目前常用的提取算法,主要分為基于圖像邊緣和基于圖像灰度的方法兩大類[11]。 基于灰度的方法運行速度快、精度高,為主流算法。代表性算法有Moravec、Fast、Harris、Shi-Tomasi 等。但這些算法存在一個共同問題:容易出現(xiàn)角點聚簇現(xiàn)象。
為解決特征分布不均勻的問題,一些學者進行了研究。 如:文獻[12]利用相鄰匹配特征點之間的空間距離不變性,將特征點分為靜態(tài)與動態(tài)區(qū)域,最終只提取靜態(tài)背景區(qū)域的特征點。 文獻[13]將圖片均勻等分成幾個區(qū)域,然后對每個區(qū)域釆用不同的閾值進行特征提取。這些方法的基本思路都是先將圖像分塊,然后針對不同塊選擇不同閾值,以保證每個部分都保留基本的角點信息。對于這類方法,合理分塊和選擇角點閾值都是很重要的問題。
針對角點分布聚集問題,本文將高斯金字塔[14-15]方法應用到視覺里程計中的角點特征提取過程中,提出了一種新的角點提取方法。該方法通過對金字塔頂層圖像進行角點提取,對特征位置進行粗定位;然后映射到金字塔底層圖像進行精確定位,從而獲取均勻的角點信息。 文章采用KITTI 數(shù)據(jù)集進行了算法驗證,結果表明該方法能夠有效改善所提取的角點分布均勻性和所恢復得運動信息的精確度。
造成角點信息分布不均勻的根本問題在于角點特征反差太大。 對于紋理特征分布不均衡的圖像,角點特征都聚集在紋理豐富區(qū)域,而紋理稀疏區(qū)域則數(shù)量很少。 針對該問題,應該對各個區(qū)域精準定位,單獨提取特征。 基本思路是通過高斯金字塔縮小原圖尺度,壓縮原紋理豐富區(qū)域細節(jié),增加紋理稀疏區(qū)域紋理。 通過尺度壓縮可以自適應的促使整個圖像特征分布均勻化,通過控制每個區(qū)域的特征數(shù)量來促使不同的圖像特征信息保持在一個穩(wěn)定的范圍內(nèi)。
本文先采用Shi-Tomasi 方法提取小尺度圖片角點, 這些角點信息可以提示原圖像對應位置特征信息。不過,由于高斯金字塔變換會模糊圖像細節(jié),故小尺度圖像的角點信息精確度不夠。 因此,可將該角點位置映射回原圖,在原圖相對應位置的周圍區(qū)域重新分塊搜索精確的角點位置,這樣一來,既在宏觀上保持了角點分布的均勻性,在微觀上也能獲得更精確的角點位置信息。
基于高斯金字塔的角點提取算法主要有以下幾個步驟:
Step1:用高斯金字塔對原圖像進行尺度壓縮。
設原圖為I,高斯金字塔有N 層,從塔底到塔頂圖像為I1,I2,…,IN,則高斯金字塔可以用公式(1)生成
其中:l 為第l 個圖層;w(m,n)為高斯濾波窗口函數(shù);1≤l≤N,0≤i≤r,0≤j≤c;r,c 分別是第l 圖層的高和寬。
Step2:提取高斯金字塔頂層圖像角點信息。
角點提取算法很多,如Sift、Fast、Shi-Tomasi 等。 考慮到Shi-Tomasi 方法穩(wěn)定性好、自適應能力強、實時性好,本文選用Shi-tomasi 方法對金字塔頂層圖像進行角點提取。 具體計算方法如下:
Step2.1:逐個像素點計算金字塔頂層圖像IN的橫向梯度Ix和縱向梯度Iy。
Step2.2:按公式(2)計算每個像素點的M 矩陣
其中:w(x,y)是窗口濾波函數(shù),通常選擇為高斯函數(shù);x 和y 是所選擇的平滑窗口內(nèi)的像素點坐標索引。
Step2.3:逐個像素點計算相應像素點M 矩陣的特征值λ1、λ2,若兩個特征值中較小的一個大于最小閾值,則會得到角點,并標記相應位置。 所得角點位置數(shù)據(jù)集為corners1
其中:i、j 是當前像素點位置索引;n1為角點數(shù)閾值。
Step3:將頂層角點位置信息映射回原圖,確定原圖的角點搜索區(qū)域。 該過程分成如下幾步:
Step3.1:按公式(4)計算corners1 對應原圖像的位置corners2
其中:N 為金字塔層數(shù)。
Step3.2:以corners2 中各點為中心,重新確定角點搜索窗口。 由第k 個點構成的窗口范圍為
其中:角點搜索窗口的寬度為W+1,高度為H+1。
Step3.3:針對每個搜索窗口,按特定數(shù)量閾值Q,采用Shi-Tomasi 方法搜索角點信息,并記錄下來。具體計算方法見Step2.1-Step2.3。 第k 個窗口搜索到的角點坐標信息構成角點集corners3k。
Step3.4:將所有窗口搜索結果合成角點集corners,也就是最終結果
為了驗證算法的有效性,本文進行了相關實驗。 實驗主要分兩步進行:第1 步是角點提取算法的比較。分別采用Shi-Tomasi、Fast、Harris 算法和本文算法對相同圖像進行角點提取,用來反映四種算法在保證提取信息均勻化方面的性能;第2 步是采用不同的角點提取方法計算載體運動信息精確度的對比,主要是將幾種算法應用于視覺里程計,計算載體運動信息,用來觀察本文角點提取方法對載體運動信息計算精確度的影響。
采用的硬件平臺是Windows10 64 位NVIDIA GeForce MX150,軟件平臺是vs2017+opencv3.4,用做實驗的數(shù)據(jù)集采用通用的KITTI[16]數(shù)據(jù)集。
圖片選取的是KITTI 數(shù)據(jù)集中一張典型的路面信息圖,環(huán)境單一,路面紋理較弱,圖片中一般只有天空、草叢和樹葉等信息。因為路旁樹木繁茂,紋理豐富;路面光滑,紋理較少,兩者反差較大,再加上光線的不確定因素,特征很難提取均勻。在高速公路這種典型的紋理分布不均勻場景中行駛,樹葉和天空形成的斑駁印記一般都是角點聚簇的區(qū)域,存在大量相似、重復、聚集的角點,這種類型的角點在前后幀追蹤時難度較大。如遇轉彎或角點聚集在圖片邊緣等情形,前后幀畫面差別較大,大量聚集在邊緣的角點易大量瞬間滑出畫面,無法保證圖片角點個數(shù)穩(wěn)定在一個常數(shù)周圍。 而且,圖像中的角點相對集中,利用不夠離散的角點求解位姿不能夠代表相鄰幀之間的位姿變化。
本文分別采用Shi-Tomasi、Harris、Fast 以及本文算法對圖片進行角點提取, 每種方法均提取300 個角點,其中本文算法參數(shù)為N=3,W=H=30,n1=147,Q=2。 4 種算法角點分布情況見圖1~圖4。
圖1 Shi-Tomasi 算法提取結果Fig.1 Extraction result of Shi-Tomasi algorithm
圖2 Fast 算法提取結果Fig.2 Extraction results of Fast algorithm
圖3 Harris 算法提取結果Fig.3 Extraction results of Harris algorithm
圖4 本文算法提取結果Fig.4 Extraction results of the text algorithm
從圖1 與圖4 可以看出,Harris 與Shi-Tomasi 算法角點聚簇現(xiàn)象比較明顯, 主要聚集在光線明亮、樹葉、草叢等強紋理區(qū)域。 Fast 算法則強烈依賴閾值,角點聚集程度很高,而本文算法檢測到的角點,原本聚簇、相似的角點被分隔開來,原本光線較暗區(qū)域也有角點被提取出來,整張圖片各個角落、各個區(qū)域都有角點分布,分布均勻、離散。
為驗證本文算法可滿足角點提取實時性要求, 采用本文算法與Shi-Tomasi 算法、Fast 算法、Harris 算法分別對2 張圖片進行不同角點閾值的特征提取,角點檢測時間如下表1 所示。 計算中,感興趣區(qū)域的獲取以及每個區(qū)域進行二次角點提取是導致運行速度慢的的主要原因。 但是尺度化處理縮小了需處理圖片的大小,這在一定程度上彌補了感興趣區(qū)域耗時的缺點,滿足實時性要求。
表1 計算時間比較Tab.1 Comparison of calculation times
為了檢驗本文算法對追蹤信息的保持能力,采用KITTI 數(shù)據(jù)集01 序列與10 序列,用金字塔LK 光流法追蹤前20 幀圖片,并與綜合性能表現(xiàn)最好的Shi-Tomasi 方法進行對比。 金字塔LK 光流法是在原光流法的基礎上加入了圖像金字塔算法,用于解決單純光流法只適用于相機的微小運動,而在實際情況中經(jīng)常出現(xiàn)較大的運動幅度的問題。 金字塔LK 光流法為常用的角點追蹤算法。
01 序列與10 序列采集的是轉彎處數(shù)據(jù)集,前后幀畫面差別較大。 采用召回率來反應光流追蹤性能,召回率=追蹤角點個數(shù)/角點個數(shù),角點個數(shù)即第一幀圖片檢測到的總角點個數(shù),追蹤角點個數(shù)為之后每一幀追蹤到的角點個數(shù)。為反映召回率,沒有設置追蹤角點個數(shù)低于某個閾值即重新檢測。召回率反映了角點的可區(qū)分性,召回率高說明角點可區(qū)分性好。
具體情況如圖5 所示,隨著物體的運動,一些角點會逐漸跑出畫面外,所以召回率是逐漸降低的。 從圖中可看出,均勻化后的本文算法召回率優(yōu)于原Shi-Tomasi 算法,更有利于維持不同圖像特征點數(shù)量的穩(wěn)定性。
圖5 01 序列與10 序列召回率計算結果Fig.5 Recall rate calculation results of Sequence 01 and Sequence 10
為了比較角點檢測結果對載體運動信息計算的影響,將本文方法用于視覺里程計計算。 角點提取環(huán)節(jié)用本文算法與Shi-Tomasi 算法、Harris 算法與Fast 算法對比,然后用金字塔LK 光流法追蹤角點,最后根據(jù)相機對極幾何約束模型恢復運動軌跡。 求出前兩幀圖片之間的運動尺度k 與相對位姿態(tài)信息(Rt,Tt), 后續(xù)位姿信息通過Pt=Rt-1Pt-1+Tt-1k計算得到。
數(shù)據(jù)集采用KITTI 數(shù)據(jù)集02 左序列前500張。 其真實軌跡由KITTI 數(shù)據(jù)集groundtruth 提供。 圖6 所示為分別采用Shi-Tomasi 算法、本文算法、Harris 算法、Fast 算法對比所得到的角點信息恢復的運動信息。 從實驗結果中可看出,四種算法隨著時間的推移軌跡都有一定程度的發(fā)散現(xiàn)象,這是由于算法本身只計算兩幀圖片之間的運動信息導致的誤差累計。 而本文算法計算得到的運動信息的精度優(yōu)于另外三種算法。
圖6 數(shù)據(jù)集02 運動信息計算結果Fig.6 Calculation results of motion information in Dataset 02
為了更好的評測視覺里程計的效果,本文沒有加入回環(huán)檢測環(huán)節(jié)。 如加入回環(huán)檢測累計誤差會小很多。 同時,本文進一步計算了運動信息的誤差曲線。 如圖7 所示,誤差曲線是計算實驗值與真實值之間的歐氏距離. 橫坐標為圖像采樣幀號,縱坐標為歐式距離。 從圖中可以看出本文算法恢復的運動信息比Shi-Tomasi 算法誤差要小,恢復的位姿態(tài)信息準確度更高。 而且隨著圖像采樣幀號的增加,因為本文算法的召回率表現(xiàn)更優(yōu)良,故角點流失也保持在一個穩(wěn)定的狀態(tài),因此誤差曲線逐漸趨于穩(wěn)定,恢復的位姿態(tài)信息準確度更高。
圖7 02 序列誤差曲線Fig.7 Error curve of Sequence 02
針對視覺里程計算法中因角點提取不均勻導致恢復的運動信息誤差較大問題,本文提出了一種基于高斯金字塔的角點提取算法。實驗表明,本文算法能夠準確提取圖片中的特征信息,有效解決重復紋理與豐富紋理特征聚簇問題,角點分布均勻、離散,提高了算法的魯棒性。在同等條件下運行本文算法,在視覺里程計中可以得到更加準確的運動信息。