Как получить лучшее изображение, соответствующее наилучшему совпадению ключевых точек, используя opencv flannbasedmatcher и dmatch

У меня есть дополнительный вопрос относительно этого ранее заданного вопроса:

Как использовать matn-based matcher или вообще flann в opencv?

конкретно касательно этой части ответа:

/* for kk=1 to matches.size()

       the best match for queryKeypoints[matches[kk].queryIdx].pt 
       is dbKeypoints[matches[kk].imgIdx][matches[kk].trainIdx].pt
 */

Мой вопрос заключается в следующем: можно ли получить доступ к изображению, из которого была найдена наилучшая совпадающая ключевая точка (кратчайшее расстояние), с помощью функции opencv flannbasedmatcher match() и структуры dmatch, и если да, как можно это сделать?

В частности, как это сделать при сравнении изображения запроса с набором изображений? В этом случае построено ли фланговое дерево со всеми ключевыми точками (тогда соответствующая метка изображения не прикреплена к ключевой точке в дереве)? Или есть способ получить доступ к изображению, к которому принадлежит данная ключевая точка?

Любые другие указатели на то, как работают функции match () и train() flannbasedmatcher, также были бы хороши, так как я искал исходный код и все еще немного озадачен - спасибо.

Любое руководство высоко ценится - спасибо!

1 ответ

Атрибут Dmatch imgIdx сообщает индекс изображения "train", к которому принадлежит совпадающая ключевая точка. Используя DescriptorMatcher.:add, вы добавляете вектор дескрипторов к вектору дескрипторов "обучающих" изображений. Вам нужно знать, что идентификатор изображения X соответствует определенному файлу изображения.

Другие вопросы по тегам