2011-08-29 12 views
26

ORB özellikli dedektör ve çıkarıcı kullanarak özellik tabanlı bir hizalama algoritması uygulamak istiyorum.
Şimdiye kadar ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
OpenCV den ORB sınıfını kullanarak özellikleri çıkarılan ve OpenCV matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); ben findHomography işlevini kullanarak bir eşyazımı bulmaya çalışıyorum Bundan sonra den knnMatch fonksiyonunu kullanarak bunları eşleşti, ancak bu fonksiyon anda ihtiyacı Görüntü özellikleri arasında en az 4 eşleşme ve test ettiğim görüntülerin çoğunda 4'ten az var.OpenCV ORB Özellik Dedektörü Nasıl Çalışır?

Bu özelliği kullanan var mı? Bu konuda ya da OpenCV'den ORB kurucusu ile ilgili herhangi bir belge var mı (ORB yapıcı parametrelerinin anlamı)?

P.S. Bu benim ilk sorum. ve 2'den fazla bağlantı gönderemiyorum. Opencv belgeleri için this kullanın.

+0

Hangi eşleştiricileri kullandınız? –

+0

FlannBasedMatcher –

cevap

48

GÜNCELLEME: Şimdi burada, OpenCV belgelerinde geçerli: http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html#orb

algoritması ayrıntılı bir açıklaması burada bulunur: http://www.willowgarage.com/sites/default/files/orb_final.pdf


O OpenCV belirtilmeyen belgeler ancak aslında OpenCV:

İki tür tanımlayıcı:

  • yüzer tanımlayıcıları:
    • SIFT
    • SURF
  • UCHAR tanımlayıcıları:
    • ORB
    • KISA

Ve tekabül matchers: şamandıra Açıklayıcılar

  • :
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > // UCHAR descr için 2.3.1
    • BruteForce<L1<float> >
  • beri iptors: LSH indeksi // 2.4 beri birlikte
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased.0

Yani ORB tanımlayıcı için örnek BruteForce<Hamming> Eşleştirici için kullanılacak kodunuzu değiştirmeniz gerekir. Uchar tanımlayıcılarını eşleştirmek için L2 veya L1 mesafesini kullanmak mümkündür, ancak sonuçlar yanlış olacaktır ve findHomography tatmin edici sonuçlar vermez.

+2

Hızlı yanıtınız için teşekkür ederiz. Şimdi BruteForceMatcher ile daha iyi çalışıyor, ancak bazı resimlerle hala tatmin edici olmayan bazı sonuçlara sahibim. BRIEF tanımlayıcılarını kullandığı için ORB'nin rotasyon/ölçeklemeye duyarlı olabileceğini düşünüyorum. Ben haklı mıyım –

+0

Neyse, opencv'de ORB uygulaması hakkında daha fazla bilgiyi nerede bulabilirim biliyor musunuz? ORB sınıfının bazı paramları (CommonParams) alabildiğini gördüm ama onları nasıl ayarlayacağımı bilmiyorum. –

+0

Aslında ORB tanımlayıcıları BRIEF'e dayanmaktadır, ancak tam olarak aynı değildir (ORB, Yönlendirilmiş KOBİ'ler için bir kısayoldur). Yani ORB ölçeğe ve daha sonra dönmelere karşı daha hassastır. İşte OpenCV özelliklerinin [yeni bir karşılaştırma] (http://computer-vision-talks.com/2011/08/feature-descriptor-comparison-report/). Ve ORB, sadece bu yaz OpenCV'ye eklenen yepyeni bir algoritmdır, bu yüzden şu anda ORB'yi açıklayan tek makalenin ORB yazarlarının orijinal kağıdı olduğunu düşünüyorum. –