앞 예제 코드에서 사용된 DescriptorMatcher::match() 함수는 desc1에 포함된 각각의 기술자와 가장 유사한 기술자를 desc2에서 찾고, 그 결과를 vector<DMatch> 타입의 변수 matches에 저장합니다. DescriptorMatcher::match() 함수 원형은 다음과 같습니다.
void DescriptorMatcher::match(InputArray queryDescriptors, InputArray trainDescriptors, std::vector<DMatch>& matches, InputArray mask = noArray()) const; |
|
• queryDescriptors |
질의 기술자 집합 |
• trainDescriptors |
훈련 기술자 집합 |
• matches |
매칭 결과 |
• mask |
서로 매칭 가능한 질의 기술자와 훈련 기술자를 지정할 때 사용합니다. 행 개수는 질의 기술자 개수와 같아야 하고, 열 개수는 훈련 기술자 개수와 같아야 합니다. 만약 mask.at<uchar>(i,j) 값이 0이면 queryDescriptors[i]는 trainDescriptors[j]로 매칭될 수 없습니다. noArray()를 지정하면 모든 가능한 매칭을 찾습니다. |
DescriptorMatcher::match() 함수는 queryDescriptors에 저장된 각각의 기술자에 대해 가장 유사한 기술자를 trainDescriptors에서 찾습니다. 각각의 매칭 결과에 대해 DMatch::queryIdx에는 queryDescriptors의 번호가 저장되고, DMatch::trainIdx에는 trainDescriptors의 번호가 저장됩니다. mask 인자를 특별히 지정하지 않는 경우, 매칭 결과가 저장되는 matches에는 queryDescriptors 기술자 개수와 같은 수의 DMatch 객체가 저장됩니다.
주어진 질의 기술자에 대해 k개의 유사한 훈련 기술자를 찾아 반환하는 DescriptorMatcher:: knnMatch() 함수와 지정한 거리보다 작은 거리를 갖는 훈련 기술자를 모두 찾아 반환하는 DescriptorMatcher::radiusMatch() 함수 사용법은 OpenCV 문서 사이트를 참고하기 바랍니다.