姚三坤,劉明
(云南民族大學電氣信息工程學院,云南昆明 650504)
近幾年來視覺SLAM(Visual SLAM,VSLAM)技術展現出了極大的潛力,成為機器人和汽車自動駕駛領域的新熱點,其關鍵技術包括同時定位與繪圖(Simultaneous Localization And Mapping,SLAM)和圖像處理。VSLAM 方法可以獲取更加豐富的外界環境信息,且圖像傳感器體積小、性價比高,能夠減少移動設備對GPS 的依賴進行自主導航,圖像信息還可以引入神經網絡算法,所以VSLAM 是目前機器人領域研究的熱點[1]。
目前,VSLAM 根據視覺里程計提取方法的不同分為特征點法和直接法[2]。如LSD-SLAM(Large Scale Direct monocular SLAM)、VINS 系列是以直接法為提取方式。直接法的優點是以像素的明暗程度來判斷移動設備的運動,不關注關鍵點和描述子;但對移動設備的硬件非常敏感且移動較快時可能丟失信息,在回環檢測中也沒有基于直接法的回環檢測方式。
視覺SLAM 在各種場景的大量應用,對SLAM 的實時性提出了很高的要求[3],傳統的ORB 在特征點的提取和匹配上花費了大量的時間且不能保證有很好的效果,而且特征點局部集中會導致信息重復。
該文在ORB 的提取和匹配部分進行改進,使得特征點分布均勻,在低紋理部分也能夠提取到特征點,減少誤匹配。可使視覺SLAM 減少后續不必要的計算和信息重復,并在數據集中驗證了改進ORB在實時性和準確性上均有所提升。
傳統ORB 流程圖如圖1 所示,根據流程圖可知,當傳感器的數據傳入之后,前端對數據的處理極為關鍵。但前端視覺里程計計算非常耗時,且前端視覺里程計的時間主要花費在特征點的提取和匹配上。由于對特征點的選取不佳,也會導致在特征匹配時產生更多的誤匹配和局部匹配信息重復,而增加匹配時間。如果使整個SLAM 的運行滿足實時性的要求,運行時間必須低于30 毫秒/幀,而ORB 的運行速度為20 毫秒/幀,特征點計算將占據大部分時間。只有提高特征點提取和匹配的計算速度才能在運行SLAM 時有較好的實時性與穩定性。

圖1 傳統ORB流程圖
因為FAST 不具有方向信息,姚海芳等[4]采用SURF 來獲取特征點,該文利用改進的FAST 角點(Oriented FAST)來計算特征點[5],保留FAST 非常快的檢測速度,通過灰度質心來計算方向,當圖像的某一部分像素發生了明顯的變化,這個像素點就會被檢測到。當一個點和它附近區域的像素相差很大時,那么這個點就應該是角點。因為FAST 只用計算像素,所以比其他算法速度快,如圖2 所示,大致過程如下:
1)在圖像中選取像素點P,假設它的亮度為IP。
2)設置一個閾值T(比如IP的20%)。
3)以像素點P為中心,選取圖2中的16個像素點。

圖2 FAST特征點
4)當圓上有N個點的亮度大于IP+T或小于IP-T,像素點被認為是特征點[6]。
5)循環以上四步,對每一個像素點都如此反復。
在N取12 的算法中,添加預測試操作,以便在計算特征點時排除大多數錯誤的像素點。直接測試附近圓上四個方向的代表像素點1、5、9、13 的亮度。至少有三個部分同時大于IP+T或小于IP-T時,才有可能判斷像素點為特征點,如果不是就不考慮。在檢測之前有一層篩選操作,可以大大加速特征點的篩選。而如果圖像特征點經常出現局部堆積,在篩選之后可以用非極大值抑制,避免篩選集中問題。
FAST 特征點是只計算像素點的亮度區別,雖然計算速度很快,但有局部重復、不能均勻分布、沒有方向信息等缺點。又因為圓取的半徑固定,所以存在尺度問題:某些點從遠處和近處看,不能同時確定為角點。ORB 添加尺度和旋轉的描述,來改善FAST方向性和尺度的缺點[7]。圖像金字塔用來改善尺度,并在每一層上進行檢測,旋轉通過灰度質心法改善[8]。
圖像金字塔是計算機視覺中常用的一種處理方法,示意圖如圖3 所示。底層是原始圖像,對圖像進行固定縮放,就可以看到不同分辨率的圖像,距離越遠對應層數越高的像素。當計算完特征點后進行匹配特征點時,每一個像素點可以對應到金字塔的不同層數像素,這就可以實現尺度不變性。如相機在后退,那么應該能夠在上一個圖像金字塔的上層和下一個圖像金字塔的下層中找到匹配。

圖3 相機后退圖像金字塔
質心是以圖像灰度值為中心,灰度質心法可以計算圖像灰度質心。操作步驟如下:

通過以上方法使得FAST 有尺度和旋轉的描述,通過改進的方法使得相機在特殊復雜的場景中有更強的抗干擾能力,就算在環境昏暗或者室外也能提取和匹配到特征點,在ORB 中將添加了尺度和旋轉的FAST 叫作Oriented FAST。
BRIEF 描述子是計算一幀圖像里關鍵點周圍隨機像素的大小,當周圍像素比中心像素點大就取1,反之就取0。這些根據像素計算出的0 和1 組成了描述向量,關鍵點周圍隨機像素的關系就用二進制表示。如果取128 個這樣的隨機像素,則由0 和1 組成的向量有128 維[9]。因為BRIEF 是沒有規律的去取兩個像素點,所以計算簡單、速度快且使用0 和1 數字表示,存儲便捷。由于BRIEF 的種種優勢,使得圖像匹配中在實時性方面有很好的優勢。傳統BRIEF有旋轉不變性的缺點,即在發生旋轉時容易丟失[10]。而ORB 由于計算了特征點方向,“Steer BRIEF”讓BRIEF 描述子也有了旋轉不變性。
因為ORB 特征點計算了旋轉和縮放,在各種情況下表現都較原來更優良。而且改進FAST和BRIEF的組合在實時SLAM 中表現非常高效[11]。
視覺SLAM 的數據關聯非常關鍵,而匹配就是計算各幀圖像的關系。比如當前幀圖像與前一幀圖像的對應關系,對它們的描述子進行準確匹配,在姿態估計、優化等進程可以減少很多不必要的工作量[12]。
匹配時將當前幀特征點和其他幀特征點描述子距離進行計算,再將所有計算結果排序[13]。選取最近的距離,將這兩個點作為匹配點[14]。特征點的相同與否靠描述子的距離體現,描述子通常使用漢明距離(二進制表達,當一個字符串變成另外一個字符串時替換的字符數)。
1)計算FAST 特征點時加入圖像金字塔,使得圖像具有深度信息,并根據圖像信息設置提取閾值。
2)計算灰度質心時使用三角函數原理回避復雜的arctan、sin、cos 計算,從而達到加速的效果。在提取特征點計算灰度質心時,如果選取的圖像塊超過整張圖的邊界,將這個點標記為壞特征點,后續的步驟將不考慮這個點。
3)使用256 位的二進制描述,對應到8 個32 位的unsigned int 數據,用typedef將它表示成DescType。
4)在匹配時,畢楊等[15]直接利用漢明距離計算匹配,會導致產生很多誤匹配,該文匹配時將標記點剔除后,在函數中使用SSE 指令集中的_mm_popcnt_u32 函數計算變量中1(當附近像素比中心像素大時取1)的個數,達到計算漢明距離消除誤匹配的目的,改進ORB 流程圖如圖4 所示。

圖4 改進ORB流程圖
該文實驗條件:便捷式計算機i5-10210U、CPU1.60 GHz、8 GB 內存、使用Ubuntu18.04 操作系統、程序為C++,公開數據集EuRoc。
選取兩張相機發生微小運動的EuRoc 數據集圖像,在改進ORB 中圖片的FAST 提取閾值設置為35,提取了367 個特征點,由于提取特征點數目越多,提取時間越長[16],所以在傳統的ORB 算法中也提取相應的367 個特征點,仿真結果如圖5、6 所示。

圖5 傳統ORB特征點

圖6 改進ORB特征點
從圖5 可以看出,傳統ORB 特征點分布集中在左上角管道及中部鐵架,特征點集中在棱角分明區域,不能很好地反映圖片中其他區域的信息,在某些光照變化較大或低紋理區域(如木板)不能很好地提取特征點[17-20]。改進后的ORB 特征點分布較均勻,重復小,并且在紋理較低的木板、光照不明顯的區域均比傳統ORB 有較大提升。
通過對特征點的提取,傳統ORB 匹配結果如圖7、8 所示。

圖7 傳統ORB特征點未篩選匹配
從圖7 看出,傳統ORB 未進行篩選的匹配有大量誤匹配(如左下角的毛網線和木板都匹配到了左上角的管道區域),將漢明距離小于最小距離的兩倍作為匹配的篩選條件,再對其進行匹配,結果如圖8所示。

圖8 傳統ORB特征點篩選后匹配
經過篩選后的特征點匹配,誤匹配明顯降低,但還是有少量匹配不精準。
在改進的ORB 中優化特征提取和匹配,在提取特征點時加入圖像金字塔,使得圖像具有深度信息,并根據圖像信息設置提取閾值;用256 位二進制描述,對應8 個32 位的unsigned int 數據;計算灰度質心時使用三角函數原理回避復雜的arctan、sin、cos 計算,使得計算加速,將超出圖像邊界的特征點標記為壞特征點并進行剔除;在特征匹配中,使用剔除和整理后的良好特征點進行匹配,將SSE 指令集中的_mm_popcnt_u32 函數計算變量中1 的個數,從而消除誤匹配,結果如圖9 所示。

圖9 改進ORB特征匹配
從圖9 可以看出,改進ORB 特征點匹配局部很少重復且更加均勻,也沒有誤匹配,對SLAM 后續位姿深度等的計算有更好的研究價值。
為了證明該文算法的準確性和實時性,將傳統ORB 和改進ORB 進行對比實驗,實驗仿真結果如表1 所示。

表1 傳統ORB與改進ORB仿真
由表1 可知,在提取相同數量特征點的情況下,改進ORB 經過對特征點的篩選(包括設計提取閾值、刪除計算灰度質心時,圖像塊越界的壞特征點),減少信息冗余的重復點,保留分布均勻的特征點,最后成功匹配了103 個分布均勻的點,特征點提取時間縮短了22.08 ms,特征點匹配時間縮短了0.39 ms。
該文對ORB 特征點方法進行了詳細描述,并對ORB 特征點提取和匹配進行優化,在公開數據集EuRoc 上對傳統ORB 和改進ORB 進行了對比仿真,通過仿真結果可以看出,改進的ORB 特征點提取和匹配時間都大幅減少,提取時間縮短了22.08 ms,匹配時間縮短了0.39 ms。同時特征點的篩選避免了重復提取和錯誤點的匹配,為計算節省了時間,提高了實時性與準確性,為后續計算提供了更好的基礎。