Алгоритмы быстрой сегментации изображений для автоматического выделения объектов

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

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

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

У меня есть некоторые ограничения:

  • Невозможно использовать библиотеки (это юридическое ограничение, кроме OpenCV). Так что любой алгоритм должен быть реализован мной. Поэтому я хотел бы выбрать алгоритм, достаточно простой, чтобы его можно было реализовать в течение не слишком длительного периода времени.
  • Производительность ОЧЕНЬ важна. Одновременно будет выполняться множество других процессов, поэтому я не могу позволить себе использовать медленный метод.

Намного предпочтительнее иметь быстрый и простой метод с меньшим разрешением, чем что-то сложное и медленное, дающее лучшие результаты.

Любые предложения по подходу, подходящему для этого сценария, будут оценены.


person ButterDog    schedule 14.05.2014    source источник
comment
Я не думаю, что кто-нибудь или даже вводная книга о сегментации может дать вам то, что вы хотите. Не существует единого алгоритма, который бы отвечал вашим конкретным потребностям. Вам необходимо определить свои ограничения и свободу для создания собственного алгоритма сегментации, который может быть набором существующих алгоритмов. Ищете лучший алгоритм? Насколько мне известно, анализ данных - единственный способ найти оптимальный. Об этом можно буквально написать научную статью. Думаю, единственный способ - провести собственное исследование или нанять исследователя.   -  person Tae-Sung Shin    schedule 15.05.2014
comment
Спасибо за ваш комментарий. Естественно, есть несколько способов подойти к проблеме. У разных методов разные свойства (с которыми я не знаком). Я просто ищу некоторое представление о различных подходах, которые могли бы решить эту проблему. Некоторые методы могут быть слишком сложными для реализации или слишком медленными для выполнения, и эта информация не всегда доступна в публикациях.   -  person ButterDog    schedule 16.05.2014
comment
Тогда вы сможете догадаться, почему информация отсутствует в публикации. Как я уже сказал, все индивидуально, поэтому никто не может сказать, какой из них хороший или плохой, быстрый или медленный, не зная вашего точного ограничения и свободы в отношении вашей проблемы. Возможно, я ошибаюсь, но пока это мой опыт.   -  person Tae-Sung Shin    schedule 16.05.2014


Ответы (1)


Для скорости я бы быстро разделил изображение на поверхностное и неповерхностное (прочее). Так что это, по крайней мере, дает вам от 24 бит (цвет?) До 8 бит или даже один бит, если вы смелы.

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

Оттуда у вас должно получиться изображение капель, которые можно найти и различить. Каждая капля или область должны обозначать интересующие объекты.

Обратите внимание, что если вы можете получить 1-битное изображение, все может пойти ОЧЕНЬ быстро. Однако эффективных инструментов, которые могут использовать эту форму данных (8 пикселей на символ), часто не появляется.

person Jiminion    schedule 14.05.2014