SIFT соответствие функции через Евклидово расстояние Matlab помочь пожалуйста - PullRequest
0 голосов
/ 06 апреля 2011

SIFT-сопоставление выполняется с помощью подхода ближайшего соседа на основе евклидова расстояния. Могут ли некоторые объяснить это? Есть ли расчет? Если тогда кто-то может помочь мне рассчитать евклидово расстояние для моего вектора признаков SIFT? Я хочу сохранить рассчитанное евклидово расстояние для подачи в нейронную сеть с некоторыми дополнительными функциями, такими как округлость и цвет изображений.

Ответы [ 2 ]

9 голосов
/ 20 октября 2011

SIFT сопоставление по евклидову расстоянию несложно.Здесь я объясню это:

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

  2. Возьмите один из дескрипторов ключевых точек из одного изображения.

    2.1 Теперь найдите евклидово расстояние между взятым вами дескриптором ключевой точки и дескрипторами ключевых точек другого изображения.

    2.2 Теперь у вас есть евклидовы расстояния от одной ключевой точки в изображении 1 до всех ключевых точек.в изображении2.Расположите их в порядке возрастания (это подразумевает ближайшие расстояния от ключевой точки на изображении 1 до ключевых точек на изображении 2)

    2.3 Теперь установите некоторый порог T (в основном в диапазоне от 0,3 до 0,7).

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

  3. Повторите это для всех описаний ключевых точек в изображении 1.

  4. , теперь у вас есть совпадения.
  5. вы можетепостроить соответствия, добавив два изображения, а затем на основе ключевых точек.
0 голосов
/ 14 июня 2017

Я думаю, что ваше сомнение в том, что такое евклидово расстояние. Евклидово расстояние - это расстояние между двумя точками, как видно на евклидовой (или двумерной) плоскости. Это очень наглядно для двумерной плоскости, но поскольку дескрипторы SIFT представляют собой векторы 128-мерного измерения, это становится непросто. Вы просто должны придерживаться формулы (https://en.wikipedia.org/wiki/Euclidean_distance)

Это мой код для расчета евклидова расстояния:

  for j = 1 : length(SIFT2)

        euclideanDist(j) = sqrt(sum((SIFT1{i} - SIFT2{j}).^2));

  end

Код найдет расстояние от точки «i» на первом изображении до всех встреченных точек на 2-м изображении, в данном случае «j». Я храню эти расстояния в векторе euclideanDist.

Ячейки SIFT1 и SIFT2 содержат дескрипторы каждого изображения.

...