Соответствие шаблону opecv -> получить точное местоположение? - PullRequest
0 голосов
/ 09 ноября 2011

У меня установлен и работает opencv на моем iphone (большое спасибо этому сообществу). Я делаю сопоставление с шаблоном. Это действительно находит объект в захваченном изображении. Однако точное местоположение, кажется, трудно определить.

Пожалуйста, посмотрите следующее видео (18 секунд): http://www.youtube.com/watch?v=PQnXNZMqpsU

Как вы можете видеть на видео, оно находит шаблон на изображении. Но когда я перемещаю камеру немного дальше, найденный шаблон располагается где-то внутри этого квадрата. Таким образом, трудно сказать точное местоположение найденного объекта.

Квадрат, который вы видите, это в основном найденное x, y местоположение шаблона плюс ширина и высота фактического изображения шаблона.

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

Ответы [ 2 ]

2 голосов
/ 09 ноября 2011

Кажется, что вы не очень довольны алгоритмом сопоставления шаблонов :)

Вскоре, есть несколько способов улучшить его, но я бы порекомендовал вам попробовать что-то еще. Если ваши изображения всегда такие же простые, как на видео, вы можете использовать пороговое определение, поиск контуров, обнаружение BLOB-объектов и т. Д. Они простые и быстрые.

Для более требовательной среды вы можете попробовать поискать соответствие. Ищите SIFT, SURF, ORB или другие способы описания ваших объектов с помощью функций. На самом деле, ORB был специально разработан, чтобы быть достаточно быстрым для ограниченной мощности мобильных телефонов.

Попробуйте этот пример в папке OCV samples / cpp / matching_to_many_images.cpp

И проверьте этот подробный ответ о том, как использовать функцию детекторов; Определение наличия объекта из одного изображения в другом изображении с помощью OpenCV

1 голос
/ 09 ноября 2011

Соответствие шаблону (cvMatchTemplate()) не является инвариантом для масштабирования и поворота.Когда вы перемещаете телефон назад, изображение кажется меньшим, а шаблон «совпадение» - это просто место с лучшим счетом совпадений, хотя на самом деле это не настоящее совпадение.
Если вы хотите, чтобы масштабирование и / или вращательная инвариантность васпридется попробовать методы сопоставления без шаблонов, например, использующие дескрипторы 2D-функций .
Проверьте примеры OpenCV для примеров того, как это сделать.

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