Подтвердить что ты не робот

Масштаб и вращение Соответствие шаблонов

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

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

4b9b3361

Ответ 1

Согласование шаблонов с matchTemplate не очень хорошо, когда ваш объект вращается или масштабируется в сцене.

Вы должны попробовать openCV-функцию из Features2D Framework. Например, дескрипторы SIFT или SURF и FLANN. Кроме того, вам понадобится метод findHomography.

Здесь - хороший пример поиска повернутого объекта в сцене.

Update:

Короче говоря, алгоритм таков:

  • Поиск ключевых точек изображения объекта 1.1. Извлечение дескрипторов из этих ключевых точек

  • Поиск ключевых точек изображения вашей сцены 2.1 Извлечение дескрипторов из ключевых точек

  • Обозначьте дескрипторы по совпадению

  • Проанализируйте свои соответствия

Существуют разные классы FeatureDetectors, DescriptorExtractors и DescriptorMatches, вы можете прочитать о них и выбрать те, которые подходят для ваших задач.

Ответ 2

Инвариантность вращения

Для каждого ключевого момента:

  • Возьмите область вокруг ключевой точки.
  • Рассчитать угол ориентации этой области с градиентом или другим методом.
  • Поверните шаблон и область запроса на этот угол до 0.
  • Рассчитайте дескрипторы для этих повернутых областей и сопоставьте их.

Масштабный инвариант

См. BRISK метод

Ответ 3

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

Если вы знаете, что тот же шаблон и нет изменений перспективы, вы принимаете пирамиду изображения для определения масштаба пространства и сопоставляете свои шаблоны на разных уровнях этой пирамиды (через что-то простое, например SSD или NCC). Было бы дешево найти грубые соответствия на более высоких уровнях (= нижнего разрешения) пирамиды. Фактически, это будет так дешево, что вы также можете повернуть свой шаблон примерно на уровнях низкого разрешения, а когда вы отследите шаблон до более высоких уровней разрешения, вы используете более мелкозернистый поворот. Это довольно стандартный метод сопоставления шаблонов и хорошо работает на практике.