Обнаружение края и прозрачность - PullRequest
6 голосов
/ 26 октября 2009

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

Спасибо

Ответы [ 4 ]

6 голосов
/ 28 октября 2009

Если ваш фон является постоянным на изображении, но несовместимым между изображениями, он может стать хитрым, но вот что я бы сделал:

  1. Разделите изображение на какую-либо форму интенсивности / цвета, например, YUV или Lab.
  2. Создайте гистограмму над цветной частью. Найдите наиболее часто встречающийся цвет, это (скорее всего) ваш фон (обновление), может быть, лучшим трюком здесь было бы найти наиболее встречающийся цвет из всех пикселей в пределах одного или двух пикселей от края изображения.
  3. Начиная с краев изображения, установите все пиксели, имеющие этот цвет и соединенные с краем через пиксели этого цвета, прозрачными.
  4. Край предмета одежды теперь будет выглядеть немного уродливо, потому что он состоит из пикселей, которые приобретают свой цвет как на фоне, так и на предмете одежды. Для борьбы с этим вам нужно сделать немного больше работы:

    1. Найдите край предмета одежды с помощью какого-нибудь механизма обнаружения кромок .
    2. Замените цвет краевых пикселей на смешение цвета только «внутри» краевого пикселя (то есть цвет одежды в этом регионе) и прозрачный (если формат выходного изображения поддерживает это).
    3. Если вы хотите по-настоящему выглядеть модно, вы увеличиваете прозрачность в зависимости от того, насколько «похож» цвет фона на цвет этого пикселя.
2 голосов
/ 27 октября 2009

В основном, найдите цвет фона и вычтите его, но я думаю, вы знали это. Немного сложно сделать все это автоматически, но это кажется возможным.

Сначала взгляните на обнаружение BLOB-объектов с помощью OpenCV и посмотрите, действительно ли это сделано для вас.

Чтобы сделать это самостоятельно:

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

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

OpenCV - хороший инструмент для этого.

Самая хитрая часть этого, вероятно, будет в тени вокруг объекта (например, черная куртка на белом фоне будет иметь непрерывную серую тень на некоторых краях и где сделать этот разрез?), Но если вы получите пока что, отправьте другой вопрос.

0 голосов
/ 26 октября 2009

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

  • конвертируйте ваше изображение в HSV или HSL
  • определите значение оттенка фона (+/- 10): выполните этот шаг один раз, например, с помощью Photoshop, а затем используйте одно и то же значение на всех ваших снимках.
  • выполнить порог цвета: для канала оттенка исключить оттенок фона (обычно [0, оттенок [+] оттенок, 255] обычно), для всех остальных каналов включить весь диапазон значений (обычно от 0 до 255). это выберет пиксели, которые НЕ являются фоном.
  • Выполните операцию «Заполнить дыры» (обычно используется для анализа капли или маркировки), чтобы завершить ту часть одежды, которая могла иметь тот же цвет, что и фон.
  • теперь у вас есть изображение, которое является «маской» для одежды: ненулевые пиксели представляют одежду, 0 пикселей представляют фон.
  • этот шаг обработки зависит от того, как вы хотите сделать пиксели прозрачными: обычно, если вы сохраняете ваше изображение в формате PNG с альфа-каналом (прозрачности), используйте логическую операцию И (также называемую «маскировкой») между альфа-каналом. канал исходного изображения и маска сборки на предыдущем шаге.
  • вуаля, фон исчез, сохраните полученное изображение.
0 голосов
/ 26 октября 2009

если вы знаете точную интенсивность цвета фона, и она никогда не изменится, и предметы одежды никогда не совпадут с этим цветом, то это простое применение вычитания фона, то есть всего, что не является определенной интенсивностью цвета считается "включенным" пикселем, представляющим интерес. Затем можно использовать маркировку подключенных компонентов (http://en.wikipedia.org/wiki/Connected_Component_Labeling), чтобы определить отдельные группы объектов.

...