使用ORB SLAM2的方式進行特徵檢測和提取

2021-09-24 22:41:37 字數 1332 閱讀 8325

比較opencv預設的方式和orb-slam2中對opencv進行重寫的方式,兩個方法對影象特徵提取結果的對比。

為方便比較,寫在同乙個檔案中。主函式如下:

#include #include #include "orbextractor.h"

#include using namespace std;

using namespace cv;

using namespace orb_slam2;

int main()

{ mat img1 = imread("000000.png",0);

orbextractor* mporbextractorleft;

//orb

int nfeatures = 2000;

float fscalefactor = 1.2;

int nlevels = 8;

int finithfast = 20;

int fminthfast = 7;

std::vectorkeypoints1;

mporbextractorleft = new orbextractor(nfeatures,fscalefactor,nlevels,finithfast,fminthfast);

cv::mat mdescriptors;

cv::mat outimg;

(*mporbextractorleft)(img1,cv::mat(),keypoints1,mdescriptors);

drawkeypoints(img1,keypoints1,outimg,scalar::all(-1));

cout<

ptrorb = orb::create(2000, 1.2f, 8,31, 0, 2,orb::harris_score, 31, 20);

orb->detectandcompute(img1, mat(),keypoints2, mdescriptors2);

mat outimg2;

drawkeypoints(img1,keypoints2,outimg2,scalar::all(-1));

cout<

使用樹形結構的orb-slam2的特徵提取方式,在提取數量上更多,分布也更均勻。而opencv預設的特徵提取,特徵點的分布較為集中,數量也較少,當把opencv方式引數中特徵數量設定為2000時,分布無明顯變化,還是很集中。因此orb-slam2的作者在這方面下了功夫,對系統定位的魯棒性有很大的作用。

ORB SLAM2 定位模式

void load const string filename,systemsetting mysystemsetting,keyframedatabase mpkeyframedatabase 別忘了新增標頭檔案和命名空間中的類宣告。同樣,需要在map.cc檔案中修改load 函式。laod 函式...

ORBSLAM2之LocalMapping執行緒

一 處理新關鍵幀processnewkeyframe 五 區域性ba 六 刪除冗餘關鍵幀keyframeculling 七 將當前關鍵幀插入閉環檢測佇列 更新當前關鍵幀的共檢視updateconnections a 遍歷當前關鍵幀的mp,更新共檢視 b 更新當前關鍵幀的子關鍵幀與父關鍵幀 i.與當前...

ORB SLAM2詳解(四)跟蹤

這一部分是orb slam系統中最基本的一步,會對每一幀影象進行跟蹤計算。tracking執行緒執行在主線程中,主要思路是在當前幀和 區域性 地圖之間尋找盡可能多的對應關係,來優化當前幀的位姿。每次新採集到一幀影象,就是用下列介面將影象傳入slam系統就行處理。該 位於主程式中 pass the i...