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