더북(TheBook)

예를 들어 BFMatcher 클래스 객체를 생성하려면 다음과 같이 코드를 작성합니다.

Ptr<DescriptorMatcher> matcher = BFMatcher::create();

BFMatcher::create() 함수는 원래 Ptr<BFMatcher> 타입을 반환하지만, DescriptorMatcher 클래스가 BFMatcher 클래스의 부모 클래스이기 때문에 앞 예제 코드에서는 matcher 객체를 Ptr<DescriptorMatcher> 타입으로 선언했습니다. 앞 예제 코드에서는 BFMatcher::create() 함수의 인자를 지정하지 않았기 때문에 생성된 matcher 객체는 특징점 기술자 사이의 L2 노름 거리를 이용하여 매칭을 수행합니다. 만약 사용하는 특징점 기술자 알고리즘이 이진 기술자를 생성하는 경우에는 해밍 거리를 사용해야 하며, 이 경우에는 다음과 같이 코드를 작성해야 합니다.

Ptr<DescriptorMatcher> matcher = BFMatcher::create(NORM_HAMMING);

일단 BFMatcher 또는 FlannBasedMatcher 객체를 생성한 후에는 두 입력 영상에서 추출한 기술자 행렬 사이의 매칭을 수행할 수 있습니다. 예를 들어 첫 번째 영상에서 추출한 특징점 기술자 행렬이 desc1이고 두 번째 영상에서 추출한 특징점 기술자 행렬이 desc2인 경우, 다음 코드를 이용하여 매칭을 수행할 수 있습니다.

vector<DMatch> matches;
matcher->match(desc1, desc2, matches);
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.