2011-08-29 42 views
26

我想使用ORB特徵檢測器和提取器來實現基於特徵的對齊算法。
到目前爲止,我提取使用ORB類的特徵從OpenCV的 ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
並使用來自OpenCV的matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); 之後,我試圖找到使用findHomography功能的單應的knnMatch功能匹配他們,不過這個功能在需要圖像特徵之間至少有4個匹配,並且在我測試的大多數圖像上我都少於4.OpenCV ORB特徵檢測器如何工作?

有沒有人使用過此功能?有沒有關於它的文檔,或關於來自OpenCV的ORB類(ORB構造函數參數的含義)?

P.S.這是我的第一個問題。我不能發佈超過2個鏈接。對於opencv文檔,使用this

+0

你使用了什麼匹配器? –

+0

FlannBasedMatcher –

回答

48

UPDATE:現在是OpenCV的文檔中,在這裏: http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html#orb

算法的詳細說明這裏找到:http://www.willowgarage.com/sites/default/files/orb_final.pdf


它不是在OpenCV中提到的文檔,但實際上OpenCV有:

兩種類型的描述符:

  • 浮子描述符:
    • SIFT
    • SURF
  • UCHAR描述符:
    • ORB
    • 附圖

和相應的匹配:

  • 浮法描述符:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > //因爲2.3.1
    • BruteForce<L1<float> >
  • 爲UCHAR DESCR iptors:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased與自2.4 LSH索引//。0

所以,你需要修改代碼以使用例如BruteForce<Hamming>匹配的ORB描述符。可以使用L2或L1距離來匹配uchar描述符,但結果將不正確,並且findHomography返回的結果不令人滿意。

+2

感謝您的快速響應。它現在使用BruteForceMatcher效果更好,但是我仍然在某些圖片上得到了一些不令人滿意的結果。我認爲ORB可能對旋轉/縮放比較敏感,因爲它使用了簡介描述符。我對嗎? –

+0

無論如何,你知道哪裏可以找到更多關於opencv中ORB實現的信息嗎?我看到ORB類可以接收一些參數(CommonParams),但我不知道如何設置它們。 –

+0

實際上,ORB描述符基於BRIEF,但不完全相同(ORB是Oriented Brief的快捷方式)。所以ORB對旋轉的縮放比較敏感。這是OpenCV功能的[新比較](http://computer-vision-talks.com/2011/08/feature-descriptor-comparison-report/)。 而ORB是今年夏天才添加到OpenCV的全新算法,所以我認爲目前唯一解釋ORB的論文是ORB作者的原創論文。 –