Я использую 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 обыгрываю матчи).
Спасибо!