Поиск изображения с лучшими совпадениями из нескольких изображений для SIFT BF-Match

Я прочитал много вопросов о сопоставлении одного изображения с несколькими изображениями с использованием сопоставления SIFT и грубой силы, например this и это. Можно ли сделать сопоставление «многие с одним»? Я хотел бы сделать следующее.

  1. перебирать изображения запросов в каталоге
  2. для каждого изображения извлекать ключевые точки и дескрипторы SIFT
  3. сделать сопоставление с каждым изображением поезда/шаблона (опять же с SIFT)
  4. получить изображение шаблона, которое имеет наилучшее соответствие (например, минимальное евклидово расстояние?)
  5. используйте это лучшее изображение шаблона и вычислите аффинное преобразование между этим изображением шаблона и текущим изображением запроса.

До сих пор я успешен до шага 3 и застрял на этом этапе.

Я использую Opencv 2.7.12 и Python 2.7. Поскольку в этой версии нет drawMatches, я использую эту реализацию. https://stackoverflow.com/a/26227854/6677891


person gaya    schedule 31.03.2017    source источник
comment
вы можете запустить RANSAC для совпадений, полученных из BF-Match, проверить правильность матрицы гомографии из здесь или здесь и преобразовать. Конечно, Евклидов тоже должен работать. Я не понимаю, почему ты застрял   -  person Rick M.    schedule 31.03.2017
comment
@РикМ. Да, я мог бы решить это. Спасибо.   -  person gaya    schedule 04.04.2017
comment
Было ли мое решение полезным?   -  person Rick M.    schedule 04.04.2017
comment
Да, это было :) @RickM.   -  person gaya    schedule 04.04.2017
comment
Я опубликую это как ответ, приму его для людей, нуждающихся в помощи в будущем :) Рад, что это помогло!   -  person Rick M.    schedule 04.04.2017


Ответы (3)


Шаг 1: Запустите RANSAC для спичек, которые вы получили от BF-Match.

Шаг 2: проверьте достоверность/качество матрицы гомографии, например здесь

Шаг 3. Если матрица гомографии хороша, трансформируйте.

Конечно, Евклидов тоже должен работать

person Rick M.    schedule 04.04.2017

Я бы предложил следующее:

Создайте рабочий процесс для процедуры сопоставления изображений, чтобы получить наилучшие совпадения:

Для каждой пары изображений в вашей базе данных выполните:

  1. Этап 1. Улучшите контраст изображения перед применением SIFT (предварительной обработки изображения). Проверьте это здесь.
  2. Этап 2. Запустите SIFT и извлеките набор совпадений из каждой пары изображений в файл CSV.
  3. Этап 3. Запустите RANSAC для каждого сгенерированного CSV-файла, чтобы исключить любые выбросы.

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

проверьте этот рабочий процесс, чтобы получить лучшее представление: введите здесь описание изображения

person Aymen Alsaadi    schedule 12.12.2019

Самый простой способ — создать цикл for для каждой пары изображений и использовать его для нахождения средней ошибки n лучших совпадений. Затем выберите совпадения или пару изображений с наименьшей ошибкой.

person Amar Khan    schedule 29.06.2020