Что означает атрибут distance в DMatches?

у меня есть короткий вопрос: когда я делаю сопоставление функций в OpenCV, что делает distance среднее значение атрибута DMatches на MatOfMatches?

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

3 ответов


в этом контексте a характеристика - Это точки интереса на изображении. Чтобы сравнить функции, вы "описываете" их с помощью функции детектор. Каждая функция связана с дескриптор. Когда вы сопоставляете функции, вы фактически соответствуете их дескрипторам.

дескриптор является многомерным вектором. Это может быть вещественные (например,просеять) или бинарные (например КРАТКИЙ.)

соответствие-это пара дескрипторов, по одному от каждого изображения, которые наиболее похожи среди всех дескрипторов. И конечно, чтобы найти дескриптор в изображении B, который наиболее похож на дескриптор в изображении A, вам нужна мера этого сходства.

существует несколько способов вычисления "оценки сходства" между двумя векторами. Для дескрипторов с реальным значением Евклидово расстояние часто используется, когда Хэмминга общий для двоичных дескрипторах.

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


обычно, когда вы сопоставляете два объекта, вы фактически сравниваете два вектора под определенными метриками расстояния. Теперь предположим, что ваша функция просеивает 128 измерений, и вы сравниваете две функции просеивания a и b используя Евклидово расстояние, то DMatch.distance равна

formula


атрибут расстояния в DMatch является мерой сходства между двумя дескрипторами (векторами объектов). Если расстояние меньше, то изображения более похожи и наоборот.

урок, извлеченный из моего опыта, когда я начал:

Не путайте DMatch.расстояние с нормальным пространственным расстоянием между двумя точками. Оба разные. Расстояние в DMatch представляет расстояние между двумя дескрипторами (векторами со 128 значениями в случае просеивания)

в случае просеивания (локальный дескриптор функции):

1) Во-первых, выявить ключевые моменты(интересные точки) для двух изображений, которые вы хотите сравнить.

2) затем вы вычисляете дескрипторы просеивания для определенной области (окрестности 16 X 16 вокруг каждой ключевой точки) вокруг всех ключевых точек. Каждый дескриптор хранит гистограмму ориентированных градиентов для области вокруг каждой ключевой точки.

3) Наконец, дескрипторы оба изображения сопоставляются, чтобы найти соответствующие ключевые точки между изображениями. Это делается с помощью BFMatcher - > match (), knnMatch () или FlannBasedMatcher -> knnMatch ().

4) Если вы используете BFMatcher.match (), вы получите список объектов DMatch. Количество объектов DMatch равно количеству совпадений. Каждый объект DMatch содержит следующие четыре атрибута для каждой пары совпадающих ключевых точек.

DMatch.distance - Distance between descriptors. The lower, the better it is.
DMatch.trainIdx - Index of the descriptor in train descriptors(1st image)
DMatch.queryIdx - Index of the descriptor in query descriptors(2nd image)
DMatch.imgIdx - Index of the train image.

5) DMatch.Расстояние может быть одним из многих мер расстояния -> Norm_L1, Norm_L2(Евклидово расстояние), расстояние Хэмминга, расстояние Hamming2,... который можно упомянуть как параметр в BFMatcher. Расстояние по умолчанию-Евклидово.

6) разница между пространственным евклидовым расстоянием и евклидовым расстоянием DMatch:

просеять дескриптор 1 - > [a1,a2,....пг128]

просеять дескриптор 2 - > [b1,b2,....b128]

(DMatch) -> евклидово расстояние = sqrt [(a1-b1)^2 + (a2-b2)^2 +...+(a128-b128)^2]

пункт 1 - > (x1, y1)

пункт 2 - > (x2, y2)

(пространственное) - > евклидово расстояние = sqrt[(x2-x1)^2 + (y2-y1)^2]

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

Если расстояние между дескрипторами меньше, тогда их сходство велико. Если расстояние между дескрипторами больше, то их сходство низкое.

надеюсь, это поможет понять значение атрибута distance в объектах DMatch. Если вам это ясно, вы можете работать с любыми дескрипторами функций, такими как HOG, SIFT, SURF, ORB, BRISK, FREAK,... Все они похожи, когда дело доходит до сопоставления их пространственных дескрипторов.