OpenCV FlannBasedMatcher дает другой результат при использовании для сопоставления изображений для одной пары и при сопоставлении изображений для пары пар

Я хочу найти шаблон изображения на некоторых изображениях сцены. Поэтому я пытаюсь найти Homography между изображениями сцены и шаблоном изображения. я использую OpenCV а также c++, Первое использование SURF найти дескрипторы для изображения и шаблона. Затем с помощью FlannBasedMatcher чтобы получить точку совпадений.
Казалось бы, все хорошо, но когда я запускаю эту программу только для каждого изображения в одиночку, результат отличается от того, когда я запускаю ее для всех изображений сцены.

Ptr<FlannBasedMatcher> matcher = FlannBasedMatcher::create();
vector<DMatch> matches;
matcher->match(objectDescriptor, sceneDescriptor, matches);
double max_dist = 0, min_dist = DBL_MAX;

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

vector< DMatch > goodMatches;
for (int i = 0; i < objectDescriptor.rows; i++)
{
if (matches[i].distance < max((coeffGoodMatches * min_dist), maxDistanceMatches))
{
goodMatches.push_back(matches[i]);
}
}

vector<Point2f> obj;
vector<Point2f> scene;
for (int i = 0; i < goodMatches.size(); i++)
{
//-- Get the keypoints from the good matches
obj.push_back(keypoints_object[goodMatches[i].queryIdx].pt);
scene.push_back(keypoints_scene[goodMatches[i].trainIdx].pt);
}
Mat H = findHomography(obj, scene, CV_RANSAC);

Mat result;
warpPerspective(img_scene, result, H, img_object.size(), WARP_INVERSE_MAP);

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

matcher->clear();

Любая идея?

1

Решение

Задача ещё не решена.

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

Других решений пока нет …

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