Сегментация / вычитание фона OpenCV из одного изображения

Я ищу немного советов … У меня есть одно изображение паспортного фото. То, что я хотел бы сделать, это отделить человека от фона. Затем я проанализирую цвет фона, рисунок и т. Д.

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

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

Я думал об использовании обнаружения контура / края (canny?)? …

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

Изменить: Образец набора изображений можно найти здесь: http://imgur.com/a/PKTDc#0


Поэтому я последовал совету Фройо и до сих пор получил следующий результат: http://imgur.com/Mvwwu9f.png

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

0

Решение

Вы можете использовать GrabCut, и вам не понадобится вводить вручную. Вы должны определить лицо с помощью каскадов Хаара и передать ограничивающую рамку в GrabCut. Я думаю, что это будет работать.

У меня есть некоторый опыт в сегментации переднего и заднего плана, но у меня также была карта диспаратности, так что это было немного проще. Я использовал суперпиксели и кластеризовал их, чтобы выделить отдельный передний план и фон.

SLIC и SLICO — это современные алгоритмы сегментации суперпикселей. Вот некоторые из работ, выполненных в этой области.

https://cvhci.anthropomatik.kit.edu/~baeuml/downloads/Schick2012.pdf

http://www.cs.huji.ac.il/~daphna/papers/Rosenfeld_ICCV2011.pdf

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

3

Другие решения


По вопросам рекламы [email protected]