天天看點

視覺slam線比對算法

線特征廣泛存在于人為環境中,可以提供額外的限制。視覺SLAM中線特征的挑戰是先特征的比對問題。

SLAM線特征學習(1)——基本的線特征表示與優化推導

SLAM線特征學習(2)——線特征初始化和最小表示 - 知乎

LSD是一種局部提取直線的算法,速度比Hough要快。 LSD是一種直線檢測分割算法,它能線上性的時間内得出亞像素級精度的檢測結果。該算法被設計成自适應模式,無需手動調參。

opencv使用頭檔案及指令空間

#include <opencv2/line_descriptor/descriptor.hpp>
using namespace cv::line_descriptor;
           

LBD: line binary descriptor 線二進制描述符

  • opencv描述線特征的二進制描述子
Ptr<BinaryDescriptor> lbd = BinaryDescriptor::createBinaryDescriptor();
lbd->compute(img, keylines, mLdesc);   //mLdesc是矩陣格式
           

比較著名的點線特征融合的VSLAM方案:

  • PL-SLAM: a Stereo SLAM System through the Combination of Points and Line Segments(雙目純視覺)開源代碼
  • PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features(單目視覺慣性)

    開源代碼

PL-SLAM: a Stereo SLAM System through the Combination of Points and Line

This paper proposes PL-SLAM, a stereo visual SLAM system that combines both points and line segments to work robustly in a wider variety of scenarios, particularly in those where point features are scarce or not well-distributed in the image.

PL-SLAM leverages both points and line segments at all the instances of the process: visual odometry, keyframe selection, bundle adjustment, etc. We contribute also with a loop-closure procedure through a novel bag-of-words approach that exploits the combined descriptive power of the two kinds of features.

視覺slam線比對算法

通過線特征的長度和方向的比較,通過剔除異常值來解決特定于線段的跟蹤和比對問題,而對于殘差計算,我們用線段的端點坐标表示地圖中的線段。是以,通過圖像平面上這些端點的投影與與被觀測線段相關的無窮多條直線之間的距離來計算被觀測線段與其在地圖中的對應直線之間的殘差。這樣,我們就可以建構一個一緻的成本函數,無縫地包含點和線特性。這兩種特征也被用于在相機導航期間魯棒地檢測循環閉合,這是一種新的單詞包(BoW)方法,它結合了使用它們執行位置識别的優點。

B. 特征跟蹤

從一系列立體圖像幀中跟蹤圖像特征(點和段),并計算它們的三維位置及其由協方差矩陣表示的相關不确定性。然後将三維地标投影到新的錄影機姿态,并且最小化投影誤差,以獲得與該估計相關的錄影機姿勢增量和協方差。這個過程在每一個新的幀中重複,隻執行幀到幀的VO,直到一個新的KF被插入到映射中。

點特征:對于特征點的處理,由于其高效性和良好的性能,我們采用了ORB檢測器和描述符。為了減少異常值的數量,我們隻考慮互為最佳比對的測量值,即左圖像中的最佳比對對應于右圖像中的最佳比對。為了保證對應關系足夠有意義,還檢查了描述空間中兩個最近比對之間的距離是否高于某個門檻值,該門檻值設定為最佳比對距離的兩倍。還使用bucketing方法確定在輸入圖像上公平分布點,該方法将圖像分成16個桶,并嘗試在每個桶中添加至少20個特征。

線特征:采用直線段檢測器(LSD),具有較高的精度和重複性。然而,它耗時,這是它在實時應用方面的主要弱點。為了緩解這種情況,我們在兩幅立體圖像中以并行架構檢測線段。對于立體比對和幀到幀跟蹤,我們首先計算每行的LBD描述符,然後根據它們的局部外觀特征進行比對。類似于點的情況,我們檢查兩個特征是否互相最佳比對,以及最好的兩個比對在描述空間中是否充分分離。我們利用線段所提供的有用的幾何資訊來過濾掉那些方向和長度不同的直線比對,以及那些在端點差異上有很大差異的直線比對。

運動估計

一旦建立了兩個立體幀之間的對應關系,就把關鍵點和線段從第一幀投影到下一幀。然後通過一個魯棒的高斯-牛頓最小化線和關鍵點投影誤差疊代估計錄影機的自我運動。為了處理異常值,使用了一個僞Huber損失函數并執行了兩步最小化。

測試資料集:EuRoC or KITTI

PL-SLAM将點和線特征應用在slam全過程。通過線特征的長度和方向的比較,通過剔除異常值來解決特定于線段的跟蹤和比對問題,而對于殘差計算,我們用線段的端點坐标表示地圖中的線段。

PL-VIO: Tightly-Coupled Monocular Visual–Inertial Odometry Using Point and Line Features

将線特征和VIO結合在一起的文章,文中使用普呂克矩陣進行線特征的初始化,對于中值法預積分和線特征的最小表示有着相當詳細的推導

SLAM中線特征的參數化和求導 - 知乎

整個代碼基于vins-mono的基礎上改動,主要表現在除了原有的feature_tracker節點外,獨立新增了一個line_feature_tracker節點(用于提取和釋出線特征);并充實了feature_manager(添加了linefeature)和後端對線特征的ceres優化類。

普呂克坐标表示用線特征方向向量和線特征與相機坐标系原點所構成的平面的法向量表示

PL-SVO: Semi-Direct Monocular Visual Odometry by Combining Points and Line Segments(2016)

文章下載下傳

開源代碼

線特征大神Ruben Gomez-Ojeda将線的限制添加在SVO中,因為SVO架構的特殊性,作者主要将線特征當做兩個3D端點進行處理。VO是一個相當特别的架構,一個很重要的點在于它在track的過程(sparse image alignment)中并沒有像其他架構一樣需要知道特征點的關聯關系,這些點的關聯關系都是通過極線搜尋後期綁定的,是以SVO代碼一定程度上兼顧了“短期限制”(直接法)和“長期關聯”(特征點法)的兩個優勢。

在PL-SVO的工作中,作者并沒有使用普呂克坐标系表示直線,主要的原因筆者總結如下:

  1. 作者希望在track的過程中也使用線特征,image alignment的主要思路是把兩個投影點的光度誤差作為損失函數,如果使用普呂克坐标系,那我們隻能知道3D線在2D圖像中的方向,而無法得到具體的點;
  2. 通常使用普呂克坐标系的話我們會用LSD的線段檢測方法進行圖像中線段的提取,但是提取到的線的端點是not repetitive的,這個對于普呂克表示法的初始化沒有影響,但是對于想用具體點的作者而言,這個方法是不能接受的;

繼續閱讀