2016-01-23 32 views
1

我使用OpenCV特徵檢測來根據LIDAR結果和虛擬地圖的比較來估計機器人位置。 我嘗試使用orb特徵檢測,然後是flannbasedmatcher,但匹配結果出錯了。 這是我的一些代碼有沒有辦法使用OpenCV進行基於特徵的本地化?

Ptr<ORB> orb_a = ORB::create(); 
Ptr<ORB> orb_b = ORB::create(); 
vector <cv::KeyPoint> kp1,kp2; 
Mat desc1,desc2; 

/* set orb : 
    1. ORB name 
    2. nfeatures 
    3. Nlevels 
    4. EdgeThreshold 
    5. First Level 
    6. WTA 
    7. Score Type 
    8. Patchsize 
    9. Scale Factor */ 
Mat hmap,hlidar; 

setORB(orb_a,500,8,100,0,4,ORB::HARRIS_SCORE,31,1.1); //map 
orb_a->detectAndCompute(lidarmap,noArray(),kp1,desc1); 
    drawKeypoints(lidarmap,kp1,hmap,Scalar::all(-1),DrawMatchesFlags::DEFAULT); 

setORB(orb_b,50,8,30,0,4,ORB::HARRIS_SCORE,10,1.5); //lidar 
orb_b->detectAndCompute(lidarused,noArray(),kp2,desc2); 
    drawKeypoints(lidarused,kp2,hlidar,Scalar::all(-1),DrawMatchesFlags::DEFAULT); 

//flann 

FlannBasedMatcher matcher; 
std::vector<DMatch>matches; 
matcher.match (desc1,desc2,matches); 

double maxdist = 0, mindist = 100000; 

for (int i = 0; i< desc1.rows; i++) 
     { 
     double dist = matches[i].distance; 
     if (dist<mindist) mindist = dist; 
     if (dist>maxdist) maxdist = dist; 
     } 
if (mindist<0.02) mindist = 0.02; 

printf ("min : %7.3f \t max : %7.3f \n",mindist,maxdist); 

vector <DMatch> good_matches; 

for (int i=1; i<desc1.rows; i++) 
     { 
    if (matches[i].distance >= 2*mindist && matches[i].distance<maxdist/2) 
      { 
      good_matches.push_back (matches[i]); 
      } 
     } 
Mat imgmatches; 
drawMatches (lidarmap,kp1, 
      lidarused,kp2, 
      good_matches,imgmatches, 
      Scalar::all(-1), Scalar::all(-1), 
      vector<char>(),DrawMatchesFlags::NOT_DRAW_SINGLE_POINTS); 

這裏是結果。 Detection seems okay, but it's terrible when i rotate second image

flann matcher是否只適用於未縮放和未旋轉的圖像?我可以使用flann來匹配雙色圖像(BW)嗎?或者有人可以指出我做錯了什麼?在此先感謝

回答

1

從我的經驗來看,ORB功能太弱,無法與FLANN一起使用。用篩選或衝浪來試試你的代碼。如果它有效,你可以嘗試調整以使用ORB。

另一種選擇是使用DBoW2 Library。 它們具有二進制特徵的下降結果。

+0

感謝您的建議。我會在它上面工作 – dpw

+0

我用SURF更改ORB,它工作得更好。但問題仍然存在。我使用FLANN匹配器進行了錯誤的檢測。如何提高FLANN的效果? – dpw

相關問題