Как найти лучшее соответствие, используя SURF OpenCV, используя C ++?

Я использую OpenCV C ++, в VS2010 для приложения распознавания лиц. Для этого я использовал SURF, BruteForceMatcher.

BFMatcher matcher;
vector< DMatch > matches;

//match: execute the matcher!
matcher.match(descriptors1,descriptors2, matches);

Я хочу знать, что именно происходит, когда я вызываю этот метод.
Мой жест «спички» вектор будет заполнен соответствующими ключевыми точками.

А также

Можно ли в любом случае использовать этот вектор «совпадений», чтобы найти подходящие совпадения?
В настоящее время я делаю что-то вроде этого, чтобы получить минимальное расстояние и максимальное расстояние:

for( int i = 0; i < descriptors1.rows; i++ )
{
double dist = matches[i].distance;
if( dist < min_dist ) min_dist = dist;
if( dist > max_dist ) max_dist = dist;
}

Если мой вышеупомянутый подход верен, как я могу использовать минимальное расстояние и максимальное расстояние, чтобы проверить, совпадают ли изображения.

Благодарю.

Я был бы признателен, если бы кто-нибудь смог найти это для меня.
Благодарю.

3

Решение

Вы можете попытаться сопоставить изображения с knnMatch() метод расчета двух ближайших соседей. Для каждого дескриптора на первом изображении у вас будет 2 ближайших совпадения на втором изображении.

Эти совпадения являются двумя лучшими, основанными на расстоянии между их дескрипторами. Если расстояния этих совпадений одинаковы, возможно, вы выберете неправильный. В этом случае вы должны отказаться от этих матчей. Вы можете сделать это, проверив соотношение расстояний.
Если соотношение расстояний между первым совпадением и вторым совпадением не превышает выбранное пороговое значение, вы должны отбросить эти совпадения.
После этого вы можете сделать, например, тест RANSAC, чтобы получить еще лучшие результаты.

4

Другие решения

SURF функции, как правило, сопоставляются с использованием Быстрый приблизительный поиск ближайшего соседа. На сайте opencv есть руководство по его использованию. Вот.

1

По вопросам рекламы [email protected]