Как получить лучшее изображение, соответствующее наилучшему совпадению ключевых точек, используя 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 соответствует определенному файлу изображения.