Обнаружение объекта + сегментация

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

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

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

Обобщить:

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

Спасибо заранее.

EDIT - дополнительная информация о наборах данных

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

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

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

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

enter image description here

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

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

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

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

Ответы

Ответ 1

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

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

    Шероховатость части может быть легко найдена с помощью преобразования Eigen (объясняется немного на fooobar.com/questions/344401/..., проверьте ссылку на предоставленную там исследовательскую статью), затем На выходе преобразования Eigen можно применять фильтр среднего сдвига. Это позволит регионам четко разделить по текстуре. И пирамидальный средний сдвиг, и нахождение собственных значений SVD реализуются в OpenCV, поэтому, если вы не можете оптимизировать свой собственный код, лучше (и проще) использовать встроенные функции (если они есть) в отношении скорости и эффективности.

Ответ 2

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

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