2011-08-29 13 views
26

Desidero implementare un algoritmo di allineamento basato sulle funzionalità utilizzando il rilevatore di funzioni ORB e l'estrattore.
Finora, ho estratto le caratteristiche utilizzando ORB classe da OpenCV ORB orb;
orb(gray_image,Mat(),features.keypoints,features.descriptors);
e abbinati tramite la funzione knnMatch da OpenCV matcher.knnMatch(features1.descriptors, features2.descriptors, pair_matches,2); Dopo che sto cercando di trovare un omografia utilizzando la funzione findHomography, ma questa funzione ha bisogno di almeno 4 corrispondenze tra le funzioni dell'immagine e sulla maggior parte delle immagini che ho provato ho ottenuto meno di 4.Come funziona il rilevatore di funzioni ORB OpenCV?

Qualcuno ha usato questa funzione? C'è qualche documentazione a riguardo, o sulla classe ORB da OpenCV (il significato dei parametri del costruttore ORB)?

P.S. Questa è la mia prima domanda. e non posso pubblicare più di 2 link. Per documentazione opencv utilizzare this.

+0

Quale fiammifero hai usato? –

+0

FlannBasedMatcher –

risposta

48

UPDATE: Ora è nella documentazione OpenCV, qui: http://opencv.itseez.com/modules/features2d/doc/feature_detection_and_description.html#orb

Una descrizione dettagliata dell'algoritmo si trova qui: http://www.willowgarage.com/sites/default/files/orb_final.pdf


Non è menzionato in OpenCV documentazione ma in realtà OpenCV ha:

Due tipi di descrittori:

  • descrittori float:
    • SIFT
    • SURF
  • descrittori UCHAR:
    • ORB
    • BREVE

E matchers corrispondenti:

  • descrittori float:
    • FlannBased
    • BruteForce<L2<float> >
    • BruteForce<SL2<float> > // dal 2.3.1
    • BruteForce<L1<float> >
  • per descr uchar iptors:
    • BruteForce<Hamming>
    • BruteForce<HammingLUT>
    • FlannBased con indice LSH // dal 2.4.0

Quindi è necessario modificare il codice per utilizzare ad esempio BruteForce<Hamming> matcher per i descrittori ORB. È possibile utilizzare la distanza L2 o L1 per la corrispondenza dei descrittori uchar, ma i risultati saranno errati e findHomography restituisce risultati insoddisfacenti.

+2

Grazie per la rapida risposta. Funziona meglio ora con BruteForceMatcher, ma ho ancora ottenuto risultati insoddisfacenti con alcune immagini. Sto pensando che ORB possa essere sensibile alla rotazione/ridimensionamento perché utilizza i descrittori BRIEF. Ho ragione? –

+0

In ogni caso, sai dove posso trovare ulteriori informazioni sull'implementazione di ORB in opencv? Ho visto che la classe ORB può ricevere alcuni parametri (CommonParams) ma non so come impostarli. –

+0

In realtà i descrittori di ORB sono basati su BRIEF ma non esattamente uguali (ORB è una scorciatoia per BRIEF orientato). Quindi ORB è più sensibile alla scala e quindi alle rotazioni. Ecco un [nuovo confronto] (http://computer-vision-talks.com/2011/08/feature-descriptor-comparison-report/) delle funzionalità di OpenCV. E ORB è un algoritmo nuovo di zecca che è stato aggiunto a OpenCV solo quest'estate, quindi penso che al momento l'unico documento che spiega l'ORB sia la carta originale degli autori di ORB. –

Problemi correlati