Быстрый способ получить вектор наименьших расстояний в сопоставлении объектов openCV - PullRequest
0 голосов
/ 13 января 2020

Я использую python версию openCV для разработки «показателя сходства» для двух изображений. Сначала я нахожу ключевые точки и их дескрипторы для каждого изображения (например, используя ORB или AKAZE). Затем я сопоставляю эти ключевые точки с изображениями и сохраняю эти совпадения в списке matches. Для каждого совпадения x в matches я могу получить расстояние между соответствующими ключевыми точками с помощью x.distance.

Мой показатель сходства должен теперь быть суммой k наименьших расстояний, найденных в сопоставлении алгоритм. Очевидно, я мог бы получить эту оценку как (при условии k < len(matches)):

matches = sorted(matches, key=lambda x: x.distance)
score = 0
for l in range(k):
    score += matches[l].distance

Однако, этот l oop очень медленный. Есть ли векторизованная версия .distance, которую я мог бы использовать для преобразования matches непосредственно в список с плавающей точкой?

Очевидно, есть и другие способы сделать это. Но все они довольно медленные (например, они имеют в виду, что я каким-то образом oop обыгрываю матчи).

Спасибо!

...