Например, при использовании OpenCV для обнаружения ключевых точек часто используются такие алгоритмы, как SIFT или SURF. Мой вопрос в том, что это за ключевые точки?
Я понимаю, что это какие-то «точки интереса» на изображении. Я также знаю, что они не зависят от масштаба и имеют круглую форму.
Кроме того, я узнал, что у них есть ориентация, но я не мог понять, что это на самом деле. Это угол, но между радиусом и чем-то? Вы можете объяснить? Думаю, мне нужно сначала что-то попроще, а после этого будет легче разбираться в бумагах.
Ответы:
Это очень хорошие вопросы. Давайте рассмотрим каждую точку по очереди:
Ключевые точки - это то же самое, что и точки интереса. Это пространственные положения или точки на изображении, которые определяют, что интересно или что выделяется на изображении. Обнаружение точек интереса на самом деле является подмножеством обнаружения больших двоичных объектов , целью которого является обнаружение интересных областей или пространственных областей на изображении. Причина, по которой ключевые точки являются особенными, заключается в том, что независимо от того, как изображение изменяется ... вращается ли изображение, сжимается / расширяется, транслируется ( кстати, все это будет аффинным преобразованием ...) или подвержено искажению ( т.е. проективное преобразование или гомографию ), вы сможете найти же самоеключевые точки в этом измененном изображении при сравнении с исходным изображением. Вот пример из сообщения, которое я написал недавно:
Источник: объект модуля 'не имеет атрибута' drawMatches 'opencv python
Изображение справа - повернутая версия левого изображения. Я также показал только 10 лучших совпадений между двумя изображениями. Если вы посмотрите на 10 лучших совпадений, это те моменты, на которых мы, вероятно, хотели бы сосредоточиться, чтобы мы могли вспомнить, о чем было изображение. Мы бы хотели сфокусироваться на лице оператора, а также на камере, штативе и некоторых интересных текстурах зданий на заднем плане. Вы видите, что эти же точки были обнаружены между двумя изображениями, и они были успешно сопоставлены.
Следовательно, вы должны убрать из этого то, что это точки на изображении, которые представляют интерес, и что их следует находить независимо от того, как изображение искажено.
Ты прав. Инвариант масштаба означает, что независимо от того, как вы масштабируете изображение, вы все равно сможете найти эти точки.
Теперь перейдем к описательной части. Что делает ключевыми точки отличаются от рамок так , как вы описали эти ключевые точки. Это так называемые дескрипторы . Каждая обнаруженная вами ключевая точка имеет связанный с ней дескриптор. Некоторые фреймворки только определяют ключевые точки, в то время как другие фреймворки являются просто фреймворком описания и не обнаруживают точек. Есть также такие, которые делают и то, и другое - они обнаруживают и описывают ключевые точки. SIFT и SURF - это примеры фреймворков, которые обнаруживают и описывают ключевые точки.
Дескрипторы в первую очередь связаны как с масштабом, так и с ориентацией ключевой точки. Ключевые точки мы закрепили эту концепцию, но нам нужна дескрипторная часть, если наша цель - попытаться сопоставить ключевые точки на разных изображениях. Теперь, что вы подразумеваете под «круглым» ... это соотносится с масштабом, в котором точка была обнаружена. Возьмем, к примеру, это изображение, взятое из учебника VLFeat Toolbox :
Вы видите, что любые желтые точки являются точками интереса, но некоторые из этих точек имеют другой радиус окружности. Они имеют дело с масштабом . В общем смысле точки интереса работают так, что мы разбиваем изображение на несколько масштабов. Мы проверяем точки интереса на каждой шкале и объединяем все эти точки интереса вместе, чтобы получить окончательный результат. Чем больше «круг», тем больше масштаб, в котором точка была обнаружена. Также есть линия, идущая от центра круга к краю. Это ориентация ключевой точки, о которой мы поговорим дальше.
В основном, если вы хотите обнаруживать ключевые точки независимо от масштаба и ориентации, когда они говорят об ориентации ключевых точек, на самом деле они имеют в виду, что они ищут пиксельную окрестность, окружающую ключевую точку, и выясняют, как эта пиксельная окрестность ориентирована или в каком направлении этот патч ориентирован внутрь. Это зависит от того, на какую структуру дескрипторов вы смотрите, но общая цель - определить наиболее доминирующую ориентацию углов градиента в патче. Это важно для сопоставлениятак что вы можете сопоставить ключевые точки вместе. Взгляните на первый рисунок, который у меня есть с двумя операторами: один повернут, а другой нет. Если вы посмотрите на некоторые из этих точек, как мы выясним, как одна точка совпадает с другой? Мы можем легко определить, что верхняя часть оператора как интересная точка совпадает с повернутой версией, потому что мы смотрим на точки, которые окружают ключевую точку, и видим, в какой ориентации все эти точки находятся ... и отсюда, как ориентация вычисляется.
Обычно, когда мы хотим обнаружить ключевые точки, мы просто смотрим на их местоположения. Однако, если вы хотите сопоставить ключевые точки между изображениями, вам определенно понадобится масштаб и ориентация, чтобы облегчить это.
Надеюсь это поможет!
источник
Я не так хорошо знаком с SURF, но могу рассказать вам о SIFT, на котором основан SURF. В конце я сделал несколько заметок о SURF, но не знаю всех подробностей.
SIFT стремится найти четко различимые места (или ключевые точки ) на изображении. Эти местоположения - это не просто двухмерные местоположения на изображении, но и местоположения в масштабном пространстве изображения , что означает, что они имеют три координаты: x , y и масштаб . Процесс поиска ключевых точек SIFT:
Шаг 2 дает нам масштабную инвариантность, шаг 3 дает нам инвариантность вращения, а шаг 4 дает нам своего рода «отпечаток пальца», который можно использовать для идентификации ключевой точки. Вместе их можно использовать для сопоставления экземпляров одного и того же объекта в любой ориентации и масштабе на нескольких изображениях.
SURF преследует те же цели, что и SIFT, но использует некоторые хитрые приемы для увеличения скорости.
Для обнаружения капли используется определитель метода Гессе . Доминирующая ориентация обнаруживается путем изучения горизонтальных и вертикальных откликов на вейвлеты Хаара . Дескриптор функции похож на SIFT, он рассматривает ориентацию пикселей в 16 локальных окрестностях, но дает 64-мерный вектор.
Функции SURF можно вычислить до 3 раз быстрее, чем функции SIFT, но они столь же надежны в большинстве ситуаций.
Для справки:
Хороший учебник по SIFT
Введение в SURF
источник
tl;dr
различия между SURF и SIFT.