2012-05-16 9 views
9

Chciałbym wiedzieć, jaka jest różnica w terminach precyzji lub jakości meczów pomiędzy BFMatcher i FlannBasedMatcher w openCV. Wiem, że FlannBasedMatcher może być szybszy, gdy zostanie zastosowany do dużej bazy danych, ale czy dwaj matcherzy znajdą te same mecze na końcu, bez względu na czas wykonania?Różnica między BFMatcher i FlannBasedMatcher

Odpowiedz

13

BFMatcher zamierza wypróbować wszystkie możliwości (która jest sens „Brute Force”, a tym samym będzie znaleźć najlepsze mecze.

Flann, czyli „Szybka Biblioteka Przybliżone najbliższych sąsiadów” , będzie znacznie szybszy, ale znajdzie przybliżoną najbliższą sąsiadkę, znajdzie dobre dopasowanie, ale niekoniecznie najlepsze, możesz grać z parametrami FLANNA, aby zwiększyć precyzję (tj. "jakość" meczów) , ale będzie to kosztem spowolnienia algorytmu. ANN jest znacznie szybszy niż BFMatcher, ale znajduje tylko przybliżony najbliższy sąsiad, który jest dobrym dopasowaniem, ale niekoniecznie najlepszym. Możesz grać z parametrami FLANN, aby zwiększyć jego prędkość lub precyzję.

+2

Jak duża powinna być baza danych, aby BFMather zwolnił? Jeśli masz listę 1000 deskryptorów? mniej więcej? –

4

Aby dodać do powyższej odpowiedzi, FLANN tworzy wydajną strukturę danych (drzewo KD), która będzie używana do wyszukiwania przybliżonego sąsiada, podczas gdy cv::BFMatcher dokonuje wyczerpującego wyszukiwania i gwarantuje znalezienie najlepszego sąsiada. Prawdziwa korzyść z FLANN jest widoczna w przypadku dużych zbiorów danych. Z mojego doświadczenia wynika, że ​​korzyścią jest liczba deskryptorów większa niż 1K.