Как сравнить два изображения краев (в OpenCV)?

в моем проекте мне нужно сравнить изображения. Одно изображение показывает рендер-модель, а другое - фотографию, на которой изображен реальный объект, представленный в модели. Что именно я хочу:

  • Алгоритм должен сравнивать два изображения и возвращать число, которое описывает сходство. Скажем, чем меньше число, тем лучше изображения подходят друг другу.
  • Оба изображения представлены в виде бинарных изображений, которые содержат только контуры / края реального рендер-изображения / фотографии.
  • На фотографии гораздо больше объектов, чем на рендер-изображении. Поэтому я хочу проверить, совпадает ли точка зрения на рендер-объект с точкой зрения на реальный объект на фотографии. (Пример: Автомобиль смоделирован так, что он приближен к реальному автомобилю. Я делаю фотографию реального автомобиля с определенной позиции и ориентации. Теперь я хочу проверить, является ли положение и ориентация моей виртуальной камеры, смотрящей на автомобиль, почти такими же, как положение и ориентация моей реальной камеры). Решение состоит в том, чтобы сравнить только белые пиксели рендерного изображения с пикселями фотографии (как изображение края). Остальные пиксели не интересны.
  • Возвращаемое значение image-comparision должно уменьшаться тем больше, чем лучше моя ориентация и положение виртуальной камеры соответствует ориентации и положению реальной камеры.

Я пытался вычислить евклидово расстояние между двумя изображениями, но результат хорош только тогда, когда пиксели точно подходят друг к другу. Теперь я ищу альтернативные варианты.

До сих пор я думал использовать нормализованную кросс-корреляцию, но я не знаю, подходит ли она для моей задачи.

Вопрос в том, стоит ли пробовать нормализованную кросс-корреляцию или есть лучшие методы решения моей задачи!

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

Спасибо большое


Спасибо за ваши предложения. Я немного запутался из-за того, что нормализованная кросс-корелляция и расстояние Хаусдорфа кажутся хорошими для поиска маленького паттерна на большой картинке.

Вопрос в том, хороши ли эти два алгоритма для сравнения двух картинок одинакового размера?

Вот пример двух картинок, которые нужно сравнить. На данный момент я сравниваю около 120 картинок-парелей в секунду.

Жаль, что я не могу публиковать изображения как новый пользователь. Поэтому вот прямая ссылка: http://s14.directupload.net/file/d/2674/t8qzbq9i_png.htm

7
задан user987979 11 October 2011 в 13:22
поделиться