Масштаб и вращение Соответствие шаблонов
Я использую метод шаблона соответствия с CV_TM_CCORR_NORMED
для сравнения двух изображений... Я хочу сделать, чтобы сделать это вращение и инвариант масштаба.. любые идеи?
Я попытался использовать тот же метод при преобразовании Фурье изображения и шаблона, но все же результат после вращения отличается
Ответы
Ответ 1
Согласование шаблонов с matchTemplate
не очень хорошо, когда ваш объект вращается или масштабируется в сцене.
Вы должны попробовать openCV-функцию из Features2D
Framework. Например, дескрипторы SIFT
или SURF
и FLANN
. Кроме того, вам понадобится метод findHomography
.
Здесь - хороший пример поиска повернутого объекта в сцене.
Update:
Короче говоря, алгоритм таков:
-
Поиск ключевых точек изображения объекта
1.1. Извлечение дескрипторов из этих ключевых точек
-
Поиск ключевых точек изображения вашей сцены
2.1 Извлечение дескрипторов из ключевых точек
-
Обозначьте дескрипторы по совпадению
-
Проанализируйте свои соответствия
Существуют разные классы FeatureDetectors, DescriptorExtractors и DescriptorMatches, вы можете прочитать о них и выбрать те, которые подходят для ваших задач.
Ответ 2
Инвариантность вращения
Для каждого ключевого момента:
- Возьмите область вокруг ключевой точки.
- Рассчитать угол ориентации этой области с градиентом или другим методом.
- Поверните шаблон и область запроса на этот угол до 0.
- Рассчитайте дескрипторы для этих повернутых областей и сопоставьте их.
Масштабный инвариант
См. BRISK метод
Ответ 3
Есть более простые способы сопоставления шкалы шаблонов и инвариантности с вращением, чем переход через функции обнаружения и гомографии (если вы знаете, что это действительно только повернутые и масштабируемые, но все остальное постоянное).
Для истинного обнаружения объектов выше предлагаемые подходы, основанные на ключевых точках, работают лучше.
Если вы знаете, что тот же шаблон и нет изменений перспективы, вы принимаете пирамиду изображения для определения масштаба пространства и сопоставляете свои шаблоны на разных уровнях этой пирамиды (через что-то простое, например SSD или NCC). Было бы дешево найти грубые соответствия на более высоких уровнях (= нижнего разрешения) пирамиды. Фактически, это будет так дешево, что вы также можете повернуть свой шаблон примерно на уровнях низкого разрешения, а когда вы отследите шаблон до более высоких уровней разрешения, вы используете более мелкозернистый поворот. Это довольно стандартный метод сопоставления шаблонов и хорошо работает на практике.