Каковы ключевые моменты обработки изображений?


80

Например, при использовании OpenCV для обнаружения ключевых точек часто используются такие алгоритмы, как SIFT или SURF. Мой вопрос в том, что это за ключевые точки?

Я понимаю, что это какие-то «точки интереса» на изображении. Я также знаю, что они не зависят от масштаба и имеют круглую форму.

Кроме того, я узнал, что у них есть ориентация, но я не мог понять, что это на самом деле. Это угол, но между радиусом и чем-то? Вы можете объяснить? Думаю, мне нужно сначала что-то попроще, а после этого будет легче разбираться в бумагах.


1
Ключевые точки должны быть просто точками (x, y), imo. То, что описывает точку и в основном область вокруг нее, следует называть дескриптором. Некоторые ключевые точки смешивают эти термины, и они становятся точками с прикрепленным вектором описания, как объяснил @rayryeng.
LovaBill

@William - Это хороший момент, который многие люди путают. Я добавлю это в свой пост. Благодаря!
Rayryeng

Ответы:


127

Это очень хорошие вопросы. Давайте рассмотрим каждую точку по очереди:

Мой вопрос в том, что это за ключевые точки?

Ключевые точки - это то же самое, что и точки интереса. Это пространственные положения или точки на изображении, которые определяют, что интересно или что выделяется на изображении. Обнаружение точек интереса на самом деле является подмножеством обнаружения больших двоичных объектов , целью которого является обнаружение интересных областей или пространственных областей на изображении. Причина, по которой ключевые точки являются особенными, заключается в том, что независимо от того, как изображение изменяется ... вращается ли изображение, сжимается / расширяется, транслируется ( кстати, все это будет аффинным преобразованием ...) или подвержено искажению ( т.е. проективное преобразование или гомографию ), вы сможете найти же самоеключевые точки в этом измененном изображении при сравнении с исходным изображением. Вот пример из сообщения, которое я написал недавно:

Источник: объект модуля 'не имеет атрибута' drawMatches 'opencv python

Изображение справа - повернутая версия левого изображения. Я также показал только 10 лучших совпадений между двумя изображениями. Если вы посмотрите на 10 лучших совпадений, это те моменты, на которых мы, вероятно, хотели бы сосредоточиться, чтобы мы могли вспомнить, о чем было изображение. Мы бы хотели сфокусироваться на лице оператора, а также на камере, штативе и некоторых интересных текстурах зданий на заднем плане. Вы видите, что эти же точки были обнаружены между двумя изображениями, и они были успешно сопоставлены.

Следовательно, вы должны убрать из этого то, что это точки на изображении, которые представляют интерес, и что их следует находить независимо от того, как изображение искажено.

Я так понимаю, что это какие-то «точки интереса» изображения. Я также знаю, что они инвариантны к масштабу, и я знаю, что они круглые.

Ты прав. Инвариант масштаба означает, что независимо от того, как вы масштабируете изображение, вы все равно сможете найти эти точки.


Теперь перейдем к описательной части. Что делает ключевыми точки отличаются от рамок так , как вы описали эти ключевые точки. Это так называемые дескрипторы . Каждая обнаруженная вами ключевая точка имеет связанный с ней дескриптор. Некоторые фреймворки только определяют ключевые точки, в то время как другие фреймворки являются просто фреймворком описания и не обнаруживают точек. Есть также такие, которые делают и то, и другое - они обнаруживают и описывают ключевые точки. SIFT и SURF - это примеры фреймворков, которые обнаруживают и описывают ключевые точки.

Дескрипторы в первую очередь связаны как с масштабом, так и с ориентацией ключевой точки. Ключевые точки мы закрепили эту концепцию, но нам нужна дескрипторная часть, если наша цель - попытаться сопоставить ключевые точки на разных изображениях. Теперь, что вы подразумеваете под «круглым» ... это соотносится с масштабом, в котором точка была обнаружена. Возьмем, к примеру, это изображение, взятое из учебника VLFeat Toolbox :

Пример VLFeat

Вы видите, что любые желтые точки являются точками интереса, но некоторые из этих точек имеют другой радиус окружности. Они имеют дело с масштабом . В общем смысле точки интереса работают так, что мы разбиваем изображение на несколько масштабов. Мы проверяем точки интереса на каждой шкале и объединяем все эти точки интереса вместе, чтобы получить окончательный результат. Чем больше «круг», тем больше масштаб, в котором точка была обнаружена. Также есть линия, идущая от центра круга к краю. Это ориентация ключевой точки, о которой мы поговорим дальше.

Также я узнал, что у них есть ориентация, но я не мог понять, что это на самом деле. Это угол между радиусом и чем-то?

В основном, если вы хотите обнаруживать ключевые точки независимо от масштаба и ориентации, когда они говорят об ориентации ключевых точек, на самом деле они имеют в виду, что они ищут пиксельную окрестность, окружающую ключевую точку, и выясняют, как эта пиксельная окрестность ориентирована или в каком направлении этот патч ориентирован внутрь. Это зависит от того, на какую структуру дескрипторов вы смотрите, но общая цель - определить наиболее доминирующую ориентацию углов градиента в патче. Это важно для сопоставлениятак что вы можете сопоставить ключевые точки вместе. Взгляните на первый рисунок, который у меня есть с двумя операторами: один повернут, а другой нет. Если вы посмотрите на некоторые из этих точек, как мы выясним, как одна точка совпадает с другой? Мы можем легко определить, что верхняя часть оператора как интересная точка совпадает с повернутой версией, потому что мы смотрим на точки, которые окружают ключевую точку, и видим, в какой ориентации все эти точки находятся ... и отсюда, как ориентация вычисляется.

Обычно, когда мы хотим обнаружить ключевые точки, мы просто смотрим на их местоположения. Однако, если вы хотите сопоставить ключевые точки между изображениями, вам определенно понадобится масштаб и ориентация, чтобы облегчить это.


Надеюсь это поможет!


23

Я не так хорошо знаком с SURF, но могу рассказать вам о SIFT, на котором основан SURF. В конце я сделал несколько заметок о SURF, но не знаю всех подробностей.


SIFT стремится найти четко различимые места (или ключевые точки ) на изображении. Эти местоположения - это не просто двухмерные местоположения на изображении, но и местоположения в масштабном пространстве изображения , что означает, что они имеют три координаты: x , y и масштаб . Процесс поиска ключевых точек SIFT:

  1. размытие и повторная выборка изображения с различной шириной размытия и частотой дискретизации для создания масштабного пространства
  2. использовать метод разницы гауссианов для обнаружения капель в разных масштабах; центры blob становятся нашими ключевыми точками в заданных x , y и масштабе
  3. назначить каждой ключевой точке ориентацию путем вычисления гистограммы ориентации градиента для каждого пикселя в его окрестности и выбора ячейки ориентации с наибольшим количеством отсчетов
  4. назначить каждой ключевой точке 128-мерный вектор признаков на основе градиентной ориентации пикселей в 16 локальных окрестностях

Шаг 2 дает нам масштабную инвариантность, шаг 3 дает нам инвариантность вращения, а шаг 4 дает нам своего рода «отпечаток пальца», который можно использовать для идентификации ключевой точки. Вместе их можно использовать для сопоставления экземпляров одного и того же объекта в любой ориентации и масштабе на нескольких изображениях.


SURF преследует те же цели, что и SIFT, но использует некоторые хитрые приемы для увеличения скорости.

Для обнаружения капли используется определитель метода Гессе . Доминирующая ориентация обнаруживается путем изучения горизонтальных и вертикальных откликов на вейвлеты Хаара . Дескриптор функции похож на SIFT, он рассматривает ориентацию пикселей в 16 локальных окрестностях, но дает 64-мерный вектор.

Функции SURF можно вычислить до 3 раз быстрее, чем функции SIFT, но они столь же надежны в большинстве ситуаций.


Для справки:

Хороший учебник по SIFT

Введение в SURF


1
Очень хорошо. Полностью люблю tl;drразличия между SURF и SIFT.
rayryeng

@rayryeng Спасибо, но это только потому, что я не знаю достаточно, чтобы сказать что-либо еще. ;) Раньше я особо не пользовался SURF.
eigenchris

1
Я бы никогда не узнал! Кстати, учебник SIFT - классический. Это первое, что я прочитал перед статьей Лоу.
Rayryeng

3
@rayryeng Автор учебника - рад слышать, что вам понравилось!
Уткарш Синха

@UtkarshSinha Мне нравится твоя работа и AI Shack. Продолжайте писать!
rayryeng
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.