OpenCV Python FlannBasedMatcher добавить несколько дескрипторов - PullRequest
0 голосов
/ 15 декабря 2018

Я пытаюсь определить изображение, используя 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 Ответ

0 голосов
/ 19 декабря 2018

Вопрос 1:

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

Вопрос 2:

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

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

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

...