姚三坤,劉明
(云南民族大學(xué)電氣信息工程學(xué)院,云南昆明 650504)
近幾年來視覺SLAM(Visual SLAM,VSLAM)技術(shù)展現(xiàn)出了極大的潛力,成為機器人和汽車自動駕駛領(lǐng)域的新熱點,其關(guān)鍵技術(shù)包括同時定位與繪圖(Simultaneous Localization And Mapping,SLAM)和圖像處理。VSLAM 方法可以獲取更加豐富的外界環(huán)境信息,且圖像傳感器體積小、性價比高,能夠減少移動設(shè)備對GPS 的依賴進(jìn)行自主導(dǎo)航,圖像信息還可以引入神經(jīng)網(wǎng)絡(luò)算法,所以VSLAM 是目前機器人領(lǐng)域研究的熱點[1]。
目前,VSLAM 根據(jù)視覺里程計提取方法的不同分為特征點法和直接法[2]。如LSD-SLAM(Large Scale Direct monocular SLAM)、VINS 系列是以直接法為提取方式。直接法的優(yōu)點是以像素的明暗程度來判斷移動設(shè)備的運動,不關(guān)注關(guān)鍵點和描述子;但對移動設(shè)備的硬件非常敏感且移動較快時可能丟失信息,在回環(huán)檢測中也沒有基于直接法的回環(huán)檢測方式。
視覺SLAM 在各種場景的大量應(yīng)用,對SLAM 的實時性提出了很高的要求[3],傳統(tǒng)的ORB 在特征點的提取和匹配上花費了大量的時間且不能保證有很好的效果,而且特征點局部集中會導(dǎo)致信息重復(fù)。
該文在ORB 的提取和匹配部分進(jìn)行改進(jìn),使得特征點分布均勻,在低紋理部分也能夠提取到特征點,減少誤匹配??墒挂曈XSLAM 減少后續(xù)不必要的計算和信息重復(fù),并在數(shù)據(jù)集中驗證了改進(jìn)ORB在實時性和準(zhǔn)確性上均有所提升。
傳統(tǒng)ORB 流程圖如圖1 所示,根據(jù)流程圖可知,當(dāng)傳感器的數(shù)據(jù)傳入之后,前端對數(shù)據(jù)的處理極為關(guān)鍵。但前端視覺里程計計算非常耗時,且前端視覺里程計的時間主要花費在特征點的提取和匹配上。由于對特征點的選取不佳,也會導(dǎo)致在特征匹配時產(chǎn)生更多的誤匹配和局部匹配信息重復(fù),而增加匹配時間。如果使整個SLAM 的運行滿足實時性的要求,運行時間必須低于30 毫秒/幀,而ORB 的運行速度為20 毫秒/幀,特征點計算將占據(jù)大部分時間。只有提高特征點提取和匹配的計算速度才能在運行SLAM 時有較好的實時性與穩(wěn)定性。
圖1 傳統(tǒng)ORB流程圖
因為FAST 不具有方向信息,姚海芳等[4]采用SURF 來獲取特征點,該文利用改進(jìn)的FAST 角點(Oriented FAST)來計算特征點[5],保留FAST 非??斓臋z測速度,通過灰度質(zhì)心來計算方向,當(dāng)圖像的某一部分像素發(fā)生了明顯的變化,這個像素點就會被檢測到。當(dāng)一個點和它附近區(qū)域的像素相差很大時,那么這個點就應(yīng)該是角點。因為FAST 只用計算像素,所以比其他算法速度快,如圖2 所示,大致過程如下:
1)在圖像中選取像素點P,假設(shè)它的亮度為IP。
2)設(shè)置一個閾值T(比如IP的20%)。
3)以像素點P為中心,選取圖2中的16個像素點。
圖2 FAST特征點
4)當(dāng)圓上有N個點的亮度大于IP+T或小于IP-T,像素點被認(rèn)為是特征點[6]。
5)循環(huán)以上四步,對每一個像素點都如此反復(fù)。
在N取12 的算法中,添加預(yù)測試操作,以便在計算特征點時排除大多數(shù)錯誤的像素點。直接測試附近圓上四個方向的代表像素點1、5、9、13 的亮度。至少有三個部分同時大于IP+T或小于IP-T時,才有可能判斷像素點為特征點,如果不是就不考慮。在檢測之前有一層篩選操作,可以大大加速特征點的篩選。而如果圖像特征點經(jīng)常出現(xiàn)局部堆積,在篩選之后可以用非極大值抑制,避免篩選集中問題。
FAST 特征點是只計算像素點的亮度區(qū)別,雖然計算速度很快,但有局部重復(fù)、不能均勻分布、沒有方向信息等缺點。又因為圓取的半徑固定,所以存在尺度問題:某些點從遠(yuǎn)處和近處看,不能同時確定為角點。ORB 添加尺度和旋轉(zhuǎn)的描述,來改善FAST方向性和尺度的缺點[7]。圖像金字塔用來改善尺度,并在每一層上進(jìn)行檢測,旋轉(zhuǎn)通過灰度質(zhì)心法改善[8]。
圖像金字塔是計算機視覺中常用的一種處理方法,示意圖如圖3 所示。底層是原始圖像,對圖像進(jìn)行固定縮放,就可以看到不同分辨率的圖像,距離越遠(yuǎn)對應(yīng)層數(shù)越高的像素。當(dāng)計算完特征點后進(jìn)行匹配特征點時,每一個像素點可以對應(yīng)到金字塔的不同層數(shù)像素,這就可以實現(xiàn)尺度不變性。如相機在后退,那么應(yīng)該能夠在上一個圖像金字塔的上層和下一個圖像金字塔的下層中找到匹配。
圖3 相機后退圖像金字塔
質(zhì)心是以圖像灰度值為中心,灰度質(zhì)心法可以計算圖像灰度質(zhì)心。操作步驟如下:
通過以上方法使得FAST 有尺度和旋轉(zhuǎn)的描述,通過改進(jìn)的方法使得相機在特殊復(fù)雜的場景中有更強的抗干擾能力,就算在環(huán)境昏暗或者室外也能提取和匹配到特征點,在ORB 中將添加了尺度和旋轉(zhuǎn)的FAST 叫作Oriented FAST。
BRIEF 描述子是計算一幀圖像里關(guān)鍵點周圍隨機像素的大小,當(dāng)周圍像素比中心像素點大就取1,反之就取0。這些根據(jù)像素計算出的0 和1 組成了描述向量,關(guān)鍵點周圍隨機像素的關(guān)系就用二進(jìn)制表示。如果取128 個這樣的隨機像素,則由0 和1 組成的向量有128 維[9]。因為BRIEF 是沒有規(guī)律的去取兩個像素點,所以計算簡單、速度快且使用0 和1 數(shù)字表示,存儲便捷。由于BRIEF 的種種優(yōu)勢,使得圖像匹配中在實時性方面有很好的優(yōu)勢。傳統(tǒng)BRIEF有旋轉(zhuǎn)不變性的缺點,即在發(fā)生旋轉(zhuǎn)時容易丟失[10]。而ORB 由于計算了特征點方向,“Steer BRIEF”讓BRIEF 描述子也有了旋轉(zhuǎn)不變性。
因為ORB 特征點計算了旋轉(zhuǎn)和縮放,在各種情況下表現(xiàn)都較原來更優(yōu)良。而且改進(jìn)FAST和BRIEF的組合在實時SLAM 中表現(xiàn)非常高效[11]。
視覺SLAM 的數(shù)據(jù)關(guān)聯(lián)非常關(guān)鍵,而匹配就是計算各幀圖像的關(guān)系。比如當(dāng)前幀圖像與前一幀圖像的對應(yīng)關(guān)系,對它們的描述子進(jìn)行準(zhǔn)確匹配,在姿態(tài)估計、優(yōu)化等進(jìn)程可以減少很多不必要的工作量[12]。
匹配時將當(dāng)前幀特征點和其他幀特征點描述子距離進(jìn)行計算,再將所有計算結(jié)果排序[13]。選取最近的距離,將這兩個點作為匹配點[14]。特征點的相同與否靠描述子的距離體現(xiàn),描述子通常使用漢明距離(二進(jìn)制表達(dá),當(dāng)一個字符串變成另外一個字符串時替換的字符數(shù))。
1)計算FAST 特征點時加入圖像金字塔,使得圖像具有深度信息,并根據(jù)圖像信息設(shè)置提取閾值。
2)計算灰度質(zhì)心時使用三角函數(shù)原理回避復(fù)雜的arctan、sin、cos 計算,從而達(dá)到加速的效果。在提取特征點計算灰度質(zhì)心時,如果選取的圖像塊超過整張圖的邊界,將這個點標(biāo)記為壞特征點,后續(xù)的步驟將不考慮這個點。
3)使用256 位的二進(jìn)制描述,對應(yīng)到8 個32 位的unsigned int 數(shù)據(jù),用typedef將它表示成DescType。
4)在匹配時,畢楊等[15]直接利用漢明距離計算匹配,會導(dǎo)致產(chǎn)生很多誤匹配,該文匹配時將標(biāo)記點剔除后,在函數(shù)中使用SSE 指令集中的_mm_popcnt_u32 函數(shù)計算變量中1(當(dāng)附近像素比中心像素大時取1)的個數(shù),達(dá)到計算漢明距離消除誤匹配的目的,改進(jìn)ORB 流程圖如圖4 所示。
圖4 改進(jìn)ORB流程圖
該文實驗條件:便捷式計算機i5-10210U、CPU1.60 GHz、8 GB 內(nèi)存、使用Ubuntu18.04 操作系統(tǒng)、程序為C++,公開數(shù)據(jù)集EuRoc。
選取兩張相機發(fā)生微小運動的EuRoc 數(shù)據(jù)集圖像,在改進(jìn)ORB 中圖片的FAST 提取閾值設(shè)置為35,提取了367 個特征點,由于提取特征點數(shù)目越多,提取時間越長[16],所以在傳統(tǒng)的ORB 算法中也提取相應(yīng)的367 個特征點,仿真結(jié)果如圖5、6 所示。
圖5 傳統(tǒng)ORB特征點
圖6 改進(jìn)ORB特征點
從圖5 可以看出,傳統(tǒng)ORB 特征點分布集中在左上角管道及中部鐵架,特征點集中在棱角分明區(qū)域,不能很好地反映圖片中其他區(qū)域的信息,在某些光照變化較大或低紋理區(qū)域(如木板)不能很好地提取特征點[17-20]。改進(jìn)后的ORB 特征點分布較均勻,重復(fù)小,并且在紋理較低的木板、光照不明顯的區(qū)域均比傳統(tǒng)ORB 有較大提升。
通過對特征點的提取,傳統(tǒng)ORB 匹配結(jié)果如圖7、8 所示。
圖7 傳統(tǒng)ORB特征點未篩選匹配
從圖7 看出,傳統(tǒng)ORB 未進(jìn)行篩選的匹配有大量誤匹配(如左下角的毛網(wǎng)線和木板都匹配到了左上角的管道區(qū)域),將漢明距離小于最小距離的兩倍作為匹配的篩選條件,再對其進(jìn)行匹配,結(jié)果如圖8所示。
圖8 傳統(tǒng)ORB特征點篩選后匹配
經(jīng)過篩選后的特征點匹配,誤匹配明顯降低,但還是有少量匹配不精準(zhǔn)。
在改進(jìn)的ORB 中優(yōu)化特征提取和匹配,在提取特征點時加入圖像金字塔,使得圖像具有深度信息,并根據(jù)圖像信息設(shè)置提取閾值;用256 位二進(jìn)制描述,對應(yīng)8 個32 位的unsigned int 數(shù)據(jù);計算灰度質(zhì)心時使用三角函數(shù)原理回避復(fù)雜的arctan、sin、cos 計算,使得計算加速,將超出圖像邊界的特征點標(biāo)記為壞特征點并進(jìn)行剔除;在特征匹配中,使用剔除和整理后的良好特征點進(jìn)行匹配,將SSE 指令集中的_mm_popcnt_u32 函數(shù)計算變量中1 的個數(shù),從而消除誤匹配,結(jié)果如圖9 所示。
圖9 改進(jìn)ORB特征匹配
從圖9 可以看出,改進(jìn)ORB 特征點匹配局部很少重復(fù)且更加均勻,也沒有誤匹配,對SLAM 后續(xù)位姿深度等的計算有更好的研究價值。
為了證明該文算法的準(zhǔn)確性和實時性,將傳統(tǒng)ORB 和改進(jìn)ORB 進(jìn)行對比實驗,實驗仿真結(jié)果如表1 所示。
表1 傳統(tǒng)ORB與改進(jìn)ORB仿真
由表1 可知,在提取相同數(shù)量特征點的情況下,改進(jìn)ORB 經(jīng)過對特征點的篩選(包括設(shè)計提取閾值、刪除計算灰度質(zhì)心時,圖像塊越界的壞特征點),減少信息冗余的重復(fù)點,保留分布均勻的特征點,最后成功匹配了103 個分布均勻的點,特征點提取時間縮短了22.08 ms,特征點匹配時間縮短了0.39 ms。
該文對ORB 特征點方法進(jìn)行了詳細(xì)描述,并對ORB 特征點提取和匹配進(jìn)行優(yōu)化,在公開數(shù)據(jù)集EuRoc 上對傳統(tǒng)ORB 和改進(jìn)ORB 進(jìn)行了對比仿真,通過仿真結(jié)果可以看出,改進(jìn)的ORB 特征點提取和匹配時間都大幅減少,提取時間縮短了22.08 ms,匹配時間縮短了0.39 ms。同時特征點的篩選避免了重復(fù)提取和錯誤點的匹配,為計算節(jié)省了時間,提高了實時性與準(zhǔn)確性,為后續(xù)計算提供了更好的基礎(chǔ)。