2014-03-28 110 views
1

有沒有什麼方法可以將關鍵點的數量限制在100個OPENCV SURF中? 獲得的關鍵點是否按照他們的實力排序? 如何獲取描述符的強度? 我正在使用cpp程序在LINUX系統中處理OPENCV。OPENCV SURF特徵描述符強度

問候, shiksha

我的代碼是: INT主(INT ARGC,字符** argv的) {

  Mat img_1 = imread(argv[1], CV_LOAD_IMAGE_GRAYSCALE); 
     Mat img_2 = imread(argv[2], CV_LOAD_IMAGE_GRAYSCALE); 



      //-- Step 1: Detect the keypoints using SURF Detector 
     int minHessian = 500; 

     SurfFeatureDetector detector(minHessian,1,2,false,true); 

     std::vector<KeyPoint> keypoints_1p; 

     std::vector<KeyPoint> keypoints_2p; 



     detector.detect(img_1, keypoints_1p); 
     detector.detect(img_2, keypoints_2p); 


      // computing descriptors 
      SurfDescriptorExtractor extractor(minHessian,1,1,1,0); 
      Mat descriptors1, descriptors2; 

      extractor.compute(img_1, keypoints_1p, descriptors1); 
      extractor.compute(img_2, keypoints_2p, descriptors2); 

回答

1

你可以得到最多100我能想象到的圖像(比如例如一個恆定的圖像),它們沒有SIFT描述符。有很多方法可以將關鍵點限制在100個以內。對於您的問題,有簡單的解決方案和硬解決方案。通過從您獲得的許多關鍵點中隨機選擇100個關鍵點,您最多可以獲得100個關鍵點。

沒有關鍵點的力量這樣的事情。你將不得不定義你自己的力量概念。

原來的Lowe紙張中有很多參數可以過濾關鍵點(其中之一是它們與圖像邊緣不匹配,Lowe的論文4.1節)。有2或3個其他參數。您需要系統地調整參數,使得您只能得到100個。如果您少於100個,則可以少過濾,如果超過100個,則可以過濾更多。

+0

感謝您的回覆。我只想獲得圖像最強大的100個特徵。可以用SIFT算法的某個參數來完成嗎? Keypoint的響應參數指定了什麼? –

1

請參閱question here。並在那裏看到我的答案,如何限制關鍵點的數量。

+0

我嘗試使用格式:FeatureDetectorExtractor提取器(100)來提取100個關鍵點。但關鍵點的數量與以前相同,即75個。我甚至嘗試了50個關鍵點,但沒有改變。還有什麼可以做的?如果你仍然有一份副本,你可以把這本書發給我... –

+0

給我你的電子郵件ID ....順便說一句,這本書沒有任何與此主題相關的內容。此外,如果你寫100但圖像沒有100個關鍵點,那麼它可能會給你少於100點......但相反是不正確的(這是發生在你的情況) – skm

+0

你做錯了..你使用了'FeatureDetectorExtractor提取器(100)'...但請仔細看我的答案.....指定'探測器'的點數不適用於'提取器' – skm