2012-05-16 9 views
9

Mi piacerebbe sapere qual è la differenza in termini di precisione o qualità delle corrispondenze tra BFMatcher e FlannBasedMatcher in openCV. So che FlannBasedMatcher potrebbe essere più veloce se applicato a una grande base di dati, ma i due verificatori troveranno le stesse corrispondenze alla fine indipendentemente dal tempo di esecuzione?Differenza tra BFMatcher e FlannBasedMatcher

risposta

13

BFMatcher sta andando a cercare tutte le possibilità (che è il significato di "Brute Force" e, quindi, potrete trovare le migliori corrispondenze

FLANN, che significa "Biblioteca veloce per approssimativi Casa più vicina". , sarà molto più veloce ma troverà un vicino più vicino, troverà un buon matching, ma non necessariamente il migliore possibile.Puoi giocare con i parametri di FLANN per aumentare la precisione (cioè la "qualità" degli abbinamenti) , ma sarà a costo di rallentare l'algoritmo

In altre parole: FL ANN è molto più veloce di BFMatcher ma trova solo un vicino più vicino approssimativo, che è un buon abbinamento ma non necessariamente il migliore. Puoi giocare con i parametri di FLANN per aumentare la sua velocità o la sua precisione.

+2

Quanto deve essere grande il database per rallentare BFMather? Se hai una lista di 1000 descrittori? più o meno? –

4

Per aggiungere alla risposta di cui sopra, FLANN crea una struttura di dati efficiente (KD-Tree) che verrà utilizzata per cercare un vicino approssimativo, mentre cv::BFMatcher esegue una ricerca esaustiva ed è garantito per trovare il migliore vicino. Il vero vantaggio di FLANN è rappresentato da ampi set di dati. Nella mia esperienza, ho visto un vantaggio giustificabile il numero di descrittori è maggiore di 1K.