2015-03-27 5 views
2

Я написал приложение, которое обнаруживает ключевые точки, вычисляет их дескрипторы и сопоставляет их с BruteForce в OpenCV. Это работает как чары.Как функция соответствия BruteForce вычисляет значение «расстояние»?

Но: Как вычисляется расстояние в объектах совпадения?

Например: Я использую SIFT и получаю вектор дескриптора с 128 значениями поплавков в каждой точке. В сопоставлении ключевая точка сравнивается, например, с 10 другими дескрипторами с одним и тем же вектором. Теперь я получаю «лучший матч» на расстоянии 0,723.

Это среднее значение для каждого евклидова расстояния от всех поплавков одного вектора к другому? Я просто хочу понять, как создается это одно значение.

ответ

1

По умолчанию, из документов Open-CV, BFMatcher использует L2-норму.

C++: BFMatcher::BFMatcher(int normType=NORM_L2, bool crossCheck=false) 

Parameters: 
normType – One of NORM_L1, NORM_L2, NORM_HAMMING, NORM_HAMMING2. 
L1 and L2 norms are preferable choices for SIFT and SURF descriptors ... 

См: http://docs.opencv.org/modules/features2d/doc/common_interfaces_of_descriptor_matchers.html?highlight=bruteforcematcher#bruteforcematcher

Лучший матч особенность вектор с наименьшим расстоянием по сравнению со всеми остальными.

+0

Да, BFMatcher использует L2-норму (эвклидовое расстояние). Матчи не возвращают евклидово расстояние всех векторных элементов, а одно значение расстояния. И это именно то, что я хочу понять. Как вычисляется это одно значение. Среднее по всем расстояниям векторных элементов? – dwi

+0

Лучшее совпадение - это вектор с самым низким расстоянием. Это самый близкий вектор функции – Kikohs

+0

Расстояние между точками? Дескриптор имеет 128dim. Поэтому я получаю 128 расстояний от одного дескриптора к другому. Но ответчик возвращает только один. – dwi

Смежные вопросы