OpenCV Python FlannBasedMatcher добавить несколько дескрипторов

Я пытаюсь определить изображение с помощью SURF, следуя инструкциям ( https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_feature2d/py_matcher/py_matcher.html).

Теперь моя цель - добавить несколько изображений в FlannBasedMatcher, а затем сохранить его, чтобы потом можно было загрузить его. При изменении кода из примера и попытке add() а также train() дескрипторы перед вызовом knnMatch(queryDescriptors=des1, k=2) (вместо matches = flann.knnMatch(des1,des2,k=2) Я получаю другие результаты, как в учебном примере.

surf = cv2.xfeatures2d.SURF_create(800)
...
FLANN_INDEX_KDTREE = 0
index_params = dict(algorithm = FLANN_INDEX_KDTREE, trees = 5)
search_params = dict(checks=50)   # or pass empty dictionary
...
flann = cv2.FlannBasedMatcher(index_params,search_params)
flann.add(des1)
flann.train()
flann.knnMatch(queryDescriptors=des2, k=2)

Вопрос 1: Почему я получаю другие результаты, чем в учебнике?

При изменении значения k в knnMatch() например 6, вернет ближайшие 6 матчей. При knn=2, чтобы найти подходящие совпадения, я проверяю, что расстояние возвращаемых совпадений не превышает m1.distance < 0.8 * m2.distance,

Вопрос 2: при knn=6 какое совпадение с 6 следует использовать в качестве якоря, чтобы сравнить, что расстояние не превышает 0,8* расстояния?

1 ответ

Вопрос 1:

Я думаю, что результат будет отличаться от учебника, потому что диапазон поиска отличается. Учебник находит совпадение item1 of des1 в des2. Тем не менее, вы ищете item1 of des1 в объединении des1 и des2.

Вопрос 2:

Тест отношения был разработан Low(автор SIFT) для измерения уникальности подобранной точки. Если расстояние (с точки зрения оценки / сходства) между лучшим совпадением и вторым наилучшим совпадением велико, это означает, что наилучшее совпадение является уникальным и никакая другая особенность на изображении не похожа на него. Однако, если второе лучшее совпадение близко к наилучшему совпадению, это означает, что функция не является уникальной, и эта функция, вероятно, является повторяющимся шаблоном, который мы должны исключить из процесса сопоставления.

Таким образом, используя k=6, вы ищете 6 лучших совпадений, которые не помогают определить уникальность функции, поскольку важны только лучшая и вторая лучшая точки.

Возможно, вы пытаетесь объединить похожие точки из объединения дескрипторов. Тогда проверка отношения в этом случае бесполезна, поскольку уникального совпадения больше не будет.

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