Что делать после получения объектов DMatch? - PullRequest
0 голосов
/ 08 октября 2019

Моя цель - найти сходство между изображением истинности и массивом других изображений, используя функцию обнаружения и сопоставления функций opencv. Пока все идет хорошо, но я не уверен, что делать с объектом DMatch.

В настоящее время я делаю ближайшего соседа для каждого набора совпадений (с учетом match.distance и местоположения ключевой точки), чтобы найти изображение с наименьшим расстоянием до изображения истинности. Я чувствую, что это не сложный подход.

Существуют ли документы, в которых исследователи используют какой-то метод «найти обратную матрицу признаков / получить матрицу тождеств»?

простой образец для каждого совпадения:

        # similarity distance
        sim_dist = mat.distance

        # location difference
        (x_1, y_1) = k_p1[img1_idx].pt
        (x_2, y_2) = k_p2[img2_idx].pt

        loc_dist = np.linalg.norm(np.subtract((x_1, y_1), (x_2, y_2)))
        result += loc_dist * sim_dist

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

Спасибо.

1 Ответ

0 голосов
/ 10 октября 2019

Я думаю, что это разумный подход. Однако вам необходимо учитывать размерность и масштаб ваших различных мер расстояния.

Мера расстояния DMatch может быть евклидовой (в пространстве признаков) или расстоянием Хэмминга, в зависимости от типа дескриптора. См. Что означает атрибут расстояния в DMatches? .

Это означает, что вы должны найти вес для баланса между расстоянием между пространством объектов и пространственным расстоянием, которое учитывает разницу вшкала мер и относительная важность «близко в пространстве признаков» и «пространственно близко».

Примерно так:

    # similarity distance
    sim_dist = mat.distance

    # location difference
    (x_1, y_1) = k_p1[img1_idx].pt
    (x_2, y_2) = k_p2[img2_idx].pt

    loc_dist = np.linalg.norm(np.subtract((x_1, y_1), (x_2, y_2)))

    weight = 1000.0

    result += loc_dist * weight + sim_dist

Фактический вес зависит от приложения и составляетвероятно, проще всего найти методом проб и ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...