Обнаружение объекта + сегментация - PullRequest
15 голосов
/ 28 августа 2011

Я пытаюсь найти эффективный способ приемлемой сложности, чтобы

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

Прошло 3 недели с тех пор, как я вошел в мир обработки изображений, и я прочитал о многих алгоритмах (просеивание, змеи, больше змейсвязанные с Фурье и т. д.) и эвристики, которые я не знаю, с чего начать, и какая из них «лучше» для того, чего я пытаюсь достичь.Принимая во внимание, что интересующий набор данных изображений является довольно большим, я даже не знаю, должен ли я использовать какой-либо алгоритм, реализованный в OpenCV, или мне следует реализовать свой собственный.

Суммировать:

  • На какой методологии мне следует сосредоточиться?Почему?
  • Должен ли я использовать OpenCV для такого рода вещей или есть какая-то другая "лучшая" альтернатива?

Заранее спасибо.

РЕДАКТИРОВАТЬ - Подробнее о наборах данных

Каждый набор данных состоит из 80K изображений продуктов, имеющих одинаковую концепцию

  • , например футболки, часы, обувь
  • размер
  • ориентация (90% из них)
  • фон (95% из них)

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

Все картинки в наборе выглядят почти так:

enter image description here

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

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

Из всех алгоритмов / методологий, которые я 'Мы столкнулись с тем, что активные формы | внешность модели кажутся наиболее перспективными.К сожалению, мне не удалось найти реализацию спуска, и я не уверен, что это лучший подход, чтобы самому написать и написать его.

Если кто-то может указать, кем я должен быть на самом делеищу (алгоритм / эвристика / библиотека / и т.д.), буду более чем благодарен.Если вы снова думаете, что мое описание было немного расплывчатым, не стесняйтесь спрашивать более подробное.

Ответы [ 2 ]

8 голосов
/ 29 августа 2011

Из того, что вы сказали, вот несколько вещей, которые появляются на первый взгляд:

  • Самый простой способ сделать это - преобразовать в двоичную форму изображение и создать связанные компоненты, используя библиотеку OpenCV или CvBlob.Для простых изображений с не сложным фоном это обычно приводит к получению объектов
  • Однако, глядя на образец изображения, методы сегментации на основе текстур могут работать лучше - циферблат часов, ремешкии фон является мудрым вариантом в текстуре / шероховатости, и это может быть идеальным способом их разделения.

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

3 голосов
/ 30 августа 2011

Я думаю, я бы перевернул проблему. Вместо того, чтобы охотиться за циферблатом, я бы использовал набор надежных функций из часов, чтобы «прошить» целевое изображение на шаблон. Первые часы имеют набор белых квадратов на циферблате, вторые - несколько белых кружков. Я бы по типу часов:

  • Сегментируйте квадраты или круги на циферблате. Этапы сегментации могут быть сложными, поскольку они обычно зависят от масштаба и света
  • Оцените центры или углы указанных выше характерных областей. Это новые особенности.
  • Используйте венгерский алгоритм для сопоставления функций между шаблонами и целевыми часами. В качестве альтернативы можно взять окружение каждой характерной точки на исходном изображении и сопоставить их, используя взаимную корреляцию
  • Использование функций сопоставления между шаблоном и целью для оценки масштабирования, поворота и перемещения
  • Сшить изображение
  • Поскольку изображение теперь в известной форме, можно извлечь области просто через предварительно заданные координаты
...