Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Убрать фон с фотографии

Автор: Kernel Panic
Дата сообщения: 23.07.2003 09:09
Есть софтина, в которой происходит регистрация клиентов в базу данных. При регистрации в базу данных вносится фотография клиента, которая получается с веб камеры. Так вот, сабж. Нужно реализовать обрезание фона у фотографии. Хочу заметить, что убирать фон нужно именно у статичной картинки, т.е. скриншота. Я прикинул, как можно попытаться такое реализовать, получилось несколько ступеней:
1. Обработка фотографии фильтром выделения границ (edge detection filter)
2. Фильтрация ненужных границ и нахождение на фотографии границ человека.
3. Заливка области внутри границ человека сплошным черным цветом
4. Размытие краёв области человека по гаусу на пару пикселей
5. Использование получившейся маски, как канала альфа-прозрачности для оригинальной фотографии.

Ну при таком раскладе получается самым сложным этап 2.
Господа, если кто занимался подобным, или имеет ссылки на какую-либо полезную литературу/сайт пожалуйсто помогите...
Автор: Felix
Дата сообщения: 23.07.2003 09:49
советую посмотреть здесь или здесь
Автор: Kernel Panic
Дата сообщения: 23.07.2003 13:48
Felix Вообще не в тему...

Оперирование с DIB'ами - это халява, мне бы Image Processing алгоритмов по теме выделения обьектов на картинке
Автор: Bloody_Nokia_Adept
Дата сообщения: 23.07.2003 16:11
Kernel Panic
Я не спец в области обработки изображений, но некоторые соображения по теме имеются

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

Вот... Если что, то сильно не пинать, т.к. сразу признался в своей профанации
Автор: kanis
Дата сообщения: 23.07.2003 16:32
Ya tozhe ne spec v etoj oblasti, no mne kazhetsya eto mozhno sdelat' s pomosh'yu Matlab'a, a v chastnosti Image Processing Toolbox.

Poishi help na http://www.matlab.ru/imageprocess/index.asp
Автор: phi1
Дата сообщения: 23.07.2003 16:46
Замахнулся на недетскую задачу, надо сказать, а именно то - что у тебя входит в шаг 2 (нахождение лица на фотографии). Вообще там сложные алгоритмы (приходилось ознакомляться), но можно все сделать сильно по-простому, если обеспечить контрастный фон определенного цвета. Дальше тебе, наверное, ясно (как Bloody_Nokia_Adept сказал). А так, если есть желание вникать во взрослые алгоритмы, а есть именно researcher'ы, которые именно такую задачу и решают (выделение лиц (любых и любого количества) на фотографиях), то есть полезный сайт: http://citeseer.nj.nec.com/cs. У меня подобные статьи есть в pdf, но, думаю, что тогда придется тебе бросать БД.
P.S. По делу то сказать ничего конкретного не могу... Задача объективно сложная.
Автор: Kernel Panic
Дата сообщения: 24.07.2003 07:36
phi1
Я и не говорю, что задача простая. Мне просто поставлено четкое техническое задание, в котором нельзя использовать видеопоток, нельзя полагаться что фон будет однородный и однотонный и нельзя делать вначале фотографию фона, а потом фона с человеком (для последующего вычитания).

Ситуация с гистограммами отпадает (были мысли строить гистограмму кусков изображений, которые заведомо не попадают на человека - это левый и правый верхние углы - а потом вычитать цвета попавшие в неё). Если посмотреть на подобные фотки через фильтры Роберта или Собела, то получается очень интересная картинка (жаль картинки вставить немогу, некуда закачать), некоторые мелкие гадости (кляксы ) с неё можно убрать просто анализируя их площади. Некоторые можно недопустить предварительно немного размыв фотографию по гауссу или для выделения границ использовать алгоритм SUSAN.
Также можно попытаться векторизовать картинку после edge detection фильтра, тогда многие лишние элементы тоже можно будет откинуть.
Я вот хочу ещё посмотреть type recognision алгоритмы, т.к. можно задать некий паттерн, который будет напоминать типичный силуэт человека для данной фотографии и пытаться найти некий контур, коэффициент корелляции для которого относительно паттерна будет оптимальным. И надо ещё поэкспериментировать с морфинг фильтром скелетонизации...
работать со скелетонизированными границами возможно будет проще.
Автор: phi1
Дата сообщения: 24.07.2003 09:46
Kernel Panic
Просто те, кто поставил тебе такую задачу должны знать, что ее решением занимается целая отрасль прикладной науки (и оценить твои усилия, соответственно ).
Если есть потребность (пиши в ПМ), могу выслать куда-нибудь статьи по сабжу (на англ.). По одной из них (там все довольно просто оказалось), написал программку (но на Delphi), рабочую. Там они решали сходую задачу, а именно обнаружения в кадре фигуры человека.
А так, с налета (не пользуясь чужими наработками), IMWHO, ты можешь зарыться в этой задаче.

Добавлено
Еще на sourceforge.com есть библиотеки на С++ по сабжу (я искал по фильтру computer vision).
Автор: Kernel Panic
Дата сообщения: 24.07.2003 12:29
phi1 Ок, тестовый проект я всё равно на Delphi пишу... если всё получится, то на VC оформлю его в виде библиотеки или direct show фильтра. E-mail закинул в ПМ.

Страницы: 1

Предыдущая тема: OCR


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.