Как я могу использовать компьютерное зрение, чтобы найти форму на изображении? - PullRequest
9 голосов
/ 12 марта 2010

У меня есть простая фотография, которая может включать или не включать изображение логотипа. Я пытаюсь определить, включает ли изображение форму логотипа или нет. Логотип (прямоугольная форма с несколькими дополнительными функциями) может иметь различные размеры и может встречаться несколько раз. Я хотел бы использовать методы Computer Vision для определения местоположения этих вхождений логотипа. Может ли кто-нибудь указать мне правильное направление (алгоритм, метод?), Которое можно использовать для достижения этой цели?

Я довольно новичок в Computer Vision, поэтому любое направление будет очень благодарным.

Спасибо!

1 Ответ

14 голосов
/ 12 марта 2010

Практические вопросы

Так как вам нужен метод, инвариантный к масштабу (это правильный жаргон для "может иметь различные размеры"), SIFT (как упомянуто в Распознавание логотипа на изображениях , спасибо за переопределение!) - хороший выбор Это очень популярно в наши дни и стоит попробовать. Вы можете найти здесь код для загрузки. Если вы не можете использовать Matlab, вам, вероятно, следует использовать OpenCV. Даже если вы по какой-то причине откажетесь от SIFT, попытка заставить его работать, научит вас нескольким важным вещам в распознавании объектов.

Общее описание и язык

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

Итак, сначала вы найдете функции в вашем изображении. Это характерные точки изображения (хорошие примеры углов и пересечений линий), которые имеют множество инвариантов : какую бы разумную обработку вы ни делали для своего изображения (масштабирование, вращение, изменение яркости, добавление немного шум и т. д.) это не изменит того факта, что в определенной точке есть угол. «Значение пикселя» или «вертикальные линии» являются плохими функциями. Иногда функция будет содержать некоторые цифры (например, выпуклость угла) в дополнение к позиции.

Затем вы делаете некоторую очистку, например, удаляете функции, которые недостаточно сильны.

Затем вы идете в вашу базу данных . Это то, что вы создали заранее, обычно делая несколько хороших и чистых изображений того, что вы пытаетесь найти, запуская на них функции обнаружения, убирая вещи и упорядочивая их в некоторой структуре данных для следующего этапа & mdash;

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

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

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

Вот и все, все готово!

...