比較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...