在ORB-SLAM(2)的論文中,作者提到了一種使圖像中提取的ORB特徵分佈更加均勻的方法。這種策略是否有助於提高SLAM的性能?為什麼作者不使用OpenCV中的ORB特徵提取的實現?本文將通過實驗,比較這兩種ORB特徵提取方法對ORB-SLAM2性能的影響。

兩種ORB特徵器效果對比

隨便從TUM數據集中取出一張照片,分別使用OpenCV的實現和ORB-SLAM2的實現提取1000個ORB特徵,效果如下圖。 很明顯,OpenCV提取的特徵點比較集中,出現了扎推現象。而ORB-SLAM2提取的特徵點,分佈比較均勻。

直觀上想像,特徵點分佈比較集中,極端情況就是所有特徵都集中到了一點,那麼相機的位姿就無法解算。特徵點分佈太過集中,SLAM系統的精度可能會有所下降。下面,通過實驗驗證這一想像。

實驗條件:

數據集: TUM RGB-D數據集中的6個序列 (嚴謹的說,以下結論目前只適用於RGB-D相機,沒有測試單目和雙目的效果)

系統:Ubuntu 16.04CPU: Intel? Core? i7-8700 CPU @ 3.20GHz × 12OpenCV: 3.3.1

ORB-SLAM2參數配置:使用ORB-SLAM2原版配置

軌跡精度對比

採用的評測標準是absolute trajectory error(ATE) RMSE, 結果見下圖。大部分序列下,ORB-SLAM2版本的精度更高。fr1_xyz序列,OpenCV版本的精度稍高,但是和ORB-SLAM2的精度也差不太多。而OpenCV的版本在fr2_3h序列中出現了跟丟現象,直到最後也沒有找回,所以測試軌跡精度的數據只佔了整個序列開始很小一部分,在軌跡精度上稍顯高一些。 實際上,fr2_3h的序列中,相機運動的較快,場景中也距離相機較遠,光線也不好。ORB-SLAM版本在所有序列上都沒有跟丟,因此魯棒性更高。總之,ORB-SLAM2的均勻化特徵提取的策略提高了系統的精度和魯棒性。

軌跡誤差對比, ATE, RMSE (m). 備註:freiburg1_xyz(fr1_xyz), freiburg1_desk(fr1_desk), freiburg2_360_hemisphere(fr2_3h), freiburg2_desk(fr2_desk), freiburg3_long_office_household (fr3_loh), freiburg3_sitting_halfsphere(fr3_sh)
軌跡誤差

地圖對比

就ORB-SLAM2的版本而言,地圖點比較均勻和稀疏,關鍵幀之間的邊相對較少。這似乎表明ORB-SLAM2的均勻提取策略降低了特徵的重複性,不利於保證同一個特徵在多幀之間都提取到

而OpenCV版本的地圖點比較集中,這是由於OpenCV選擇響應最高的點所導致的。關鍵幀之間的邊也更加密集,這似乎說明響應高的那些ORB特徵點具有更好的復現性,可以在連續的更多幀重複提取、跟蹤。但是,需要注意的是,這些特徵點都集中在一起,即便形成了更強大的網路,獲得的估計精度還是沒有ORB-SLAM2版本的高。也就是說,特徵點均勻分佈是可以提高系統精度的。

序列fr2_desk的地圖

下面再看一下,在fr2_desk序列中,每個frame追蹤到的地圖點的個數。ORB-SLAM2版本相對於OpenCV版本追蹤的地圖點數量要少,這也與上圖中OpenCV版本的關鍵幀網路更加稠密相互印證。但是,這並不能表明ORB-SLAM2追蹤的質量差,因為有可能是ORB-SLAM2的地圖點的數量本來就少呢?所以我又統計了以下地圖中關鍵幀的數量和地圖點的數量。ORB-SLAM2版本的關鍵幀數量比OpenCV版本的還多,但是地圖點的數量沒有OpenCV版本的多。ORB-SLAM2版本中,地圖點少,關鍵幀多,原因可能是1. ORB特徵的復現性不好,不能在較多幀之間追蹤,構造更多的地圖點。2. 均勻化的提取策略提取的特徵點數量沒有OpenCV原版實現中提取特點數多。(這兩點目前沒有驗證。)

值得注意的是,雖然ORB-SLAM2版本每一幀跟蹤的特徵點數少,但是最終的軌跡精度卻很高。這就體現出ORB-SLAM2特徵提取方法的優越性了,可能是特徵點分佈比較均勻的功勞。OpenCV版本跟蹤的點數雖多,但是這些點比較集中。

序列fr2_desk中每幀追蹤到的地圖點個數——直方圖
每個序列的地圖中關鍵幀的數量

每個序列的地圖中地圖點的數量

地圖點存活率對比

提取ORB特徵,一是為了構造地圖點,二是為了實現數據關聯。一個ORB特徵點對應的地圖點被越多的幀觀測到,那麼就能形成越強大的Graph,從而也能保證系統的精度。也就是說,多幀之間的ORB特徵應具有很好的重複性,這樣才能保證形成強大的網路。一個地圖點能夠被越多的幀觀測到越好。於是,我統計了每個特徵點相連的關鍵幀數量。從這幅圖似乎感覺兩種特徵提取方法差別不大,可能對數據影響最大的是實驗環境和運動軌跡吧?

單個地圖點觀測到的關鍵幀數量

特徵提取時間

ORB-SLAM2的特徵提取時間為10.24±2.64 ms,OpenCV的特徵提取時間為9.11±2.82 ms。兩者差別不大。

總結

ORB-SLAM2中的ORB特徵提取方法相對於OpenCV中的方法,提高了ORB-SLAM2的軌跡精度和魯棒性。增加特徵提取的均勻性可以提高系統精度,但是似乎會降低特徵提取的重複性。

我只用了TUM RGB-D數據集的6個序列來測試,因此相關結論僅供參考。

推薦閱讀:

相關文章