그림 14-10에서 DescriptorMatcher 클래스를 상속받아 만들어진 클래스 중에서 BFMatcher 클래스는 전수 조사(Brute-Force) 매칭을 수행합니다. BFMatcher 클래스는 질의 기술자 집합에 있는 모든 기술자와 훈련 기술자 집합에 있는 모든 기술자 사이의 거리를 계산하고, 이 중 가장 거리가 작은 기술자를 찾아 매칭하는 방식입니다.
BFMatcher 클래스의 매칭 결정 방법은 매우 직관적이지만 특징점 개수가 늘어날수록 거리 계산 횟수가 급격하게 늘어날 수 있다는 단점이 있습니다. 예를 들어 첫 번째 영상에 1000개의 특징점이 있고, 두 번째 영상에 2000개의 특징점이 있다면 BFMatcher 방법은 총 2,000,000번의 비교 연산을 수행해야 합니다. 그러므로 특징점 개수가 늘어날수록 BFMatcher 방법에 의한 매칭 연산량은 크게 늘어나게 되며, 이러한 경우에는 BFMatcher 클래스 대신 FlannBasedMatcher 클래스를 사용하는 것이 효율적입니다.
Flann(Fast Library approximate nearest neighbors)은 근사화된 최근방 이웃(ANN, Approximate Nearest Neighbors) 알고리즘을 빠르게 구현한 라이브러리입니다. 그리고 FlannBasedMatcher 클래스는 Flann 라이브러리를 이용하여 빠르게 매칭을 수행하는 클래스입니다. 즉, FlannBasedMatcher 클래스는 근사화된 거리 계산 방법을 사용하므로 가장 거리가 작은 특징점을 찾지 못할 수 있지만, 매우 빠르게 동작합니다. 다만 FlannBasedMatcher 클래스는 기본적으로 L2 노름 거리 측정 방식을 사용하므로 해밍 거리를 사용하는 이진 기술자에 대해서는 사용할 수 없습니다.7
7 이진 기술자에 대해서도 지역성 의존 해싱(LSH, Locality Sensitive Hashing) 기법을 이용하여 FlannBasedMatcher 클래스를 사용할 수는 있지만 사용법이 까다로운 편이며, 이 책에서는 자세히 다루지 않겠습니다.