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

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #11  
Старый 21.10.2010, 23:42
Пользователь

Отправить личное сообщение для lordKelvin Посмотреть профиль Найти все сообщения от lordKelvin
 
Регистрация: 25.01.2010
Сообщений: 51


Я тут поковырялся в маткаде с картинкой.=)
Фильтр по оттенку, без учета яркости дает не очень много, зато цвет контура руки (если брать только красную составляющую) держится достаточно обособленно. Если удачно взять диапазон в 10-15 значений из минимума гистограммы (по горизонтали интенсивность красного, по вертикали количество точке) можно получить четки контур руки в 1-2 пикселя толщиной.
  #12  
Старый 21.10.2010, 23:45
Пользователь

Отправить личное сообщение для lordKelvin Посмотреть профиль Найти все сообщения от lordKelvin
 
Регистрация: 25.01.2010
Сообщений: 51

Для гистограммы я брал только розоватые цвета ( 16-32 по шкале оттенка 0-360) и перед обработкой прилично сгладил картинку.
  #13  
Старый 22.10.2010, 00:47
Новичок

Отправить личное сообщение для TacoBell Посмотреть профиль Найти все сообщения от TacoBell
 
Регистрация: 20.10.2010
Сообщений: 11

Сообщение от lordKelvin Посмотреть сообщение
Для гистограммы я брал только розоватые цвета ( 16-32 по шкале оттенка 0-360) и перед обработкой прилично сгладил картинку.
Спасибо большое за наводку! Сделал вильтр для изображения по цвету. Проанализировав некоторые изображения и ваше сообщение, я понял, что по шкале RGB красный в цветах ладони почти всегда преобладает, а зеленый преобладает над синим. ТАким образом вот что получилось.
(Web-camera плохая, поэтому качество никуда не гадится.. НО зато, потом, когда куплю норм вебку, будет все гораздо лучше работать )
Исходник:

Результат:

Уже что-то... Но нужно еще дорабатывать...
  #14  
Старый 22.10.2010, 01:13
гость

 
Сообщений: n/a

гуглите image segmentation - так ваша задача по научному сейчас называется.

вот например - http://jamie.shotton.org/work/research.html
  #15  
Старый 22.10.2010, 04:50
гость

 
Сообщений: n/a

Цитата:
Как найти ладонь на изображении? (С++, OpenCV)
В opencv, кстати, реализованы некоторые алгоритмы сегментации. Например, cvWatershed.
  #16  
Старый 23.10.2010, 00:26
Новичок

Отправить личное сообщение для TacoBell Посмотреть профиль Найти все сообщения от TacoBell
 
Регистрация: 20.10.2010
Сообщений: 11

Решил совместить движение и цветовую гамму руки. Т.е. вероятность того, что при находящейся на месте камере будет выделена только рука - довольно приличная.
  #17  
Старый 24.10.2010, 11:46
Новичок

Отправить личное сообщение для TacoBell Посмотреть профиль Найти все сообщения от TacoBell
 
Регистрация: 20.10.2010
Сообщений: 11

Может кто знает, как выделить руку из остального изображения? Вроде черным выделяется, но остаются артефакты. Как их убрать?
  #18  
Старый 07.03.2011, 03:05
Аватар для Vertex
Новичок

Отправить личное сообщение для Vertex Посмотреть профиль Найти все сообщения от Vertex
 
Регистрация: 22.06.2008
Адрес: Узбекистан, Ташкент
Сообщений: 22

Совсем недавно я взялся написать подобный алгоритм. Использую Си, но есть и вариант в html java-script (canvas-tag). Там какрас я использовал собственный простейщий фильтр удаление фона. Просто в 32-битном изображении биты Альфа-канала удалял(0x00) или устанавливал(0xFF), а RGB оставались как есть. При оптимизации в MMX получился очень быстрый фильтр. Дальше работаешь только с Альфа.

Задался я дальше проблемой поисков пальцев ладони и зашёл в тупик. Не смог ничего придумать.

Но вот с подавлением мелких-паразитных объектов могу помочь.
Просто пишешь алгоритм заливки по Альфа-каналу.
В цикле ищешь каждый Альфа-пиксел с битами 0xFF и начинаешь заливку (Flood Fill) индексом от 1 до 254. Т.е. первый встретившийся объект перезаливаешь в Альфе из 0xFF в 0x01, второй - в 0x02 и т.д.
При этом подсчитываешь количество всех заливаемых пикселей в объекте. Если их меньше указанного порога, скажем 1/250 от количества пикселей всего изображения, то все залитые Альфа с текущим индексом обнуляем.
Иначе заносим подсчитанное число залитых пикселей в таблицу и переходим в следующему индексу (до 254-го), и ищем следующий пиксел с 0xFF-Альфой.
Так мы удалим все ненужные мелкие объекты своеобразной фильтрацией. А в таблице будем иметь список всех объектов и можно с ними работать по-отдельности, ориентируясь по индексу Альфа-канала.

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

Вот к примеру видео с этим алгоритмом:
Разделение объектов и
Замена фона

Последний раз редактировалось Vertex, 07.03.2011 в 04:54.
  #19  
Старый 07.03.2011, 03:17
гocть

 
Сообщений: n/a

решаемая задача вообще в литературе называется image segmentation. придумана куча алгоритмов.

попробуй CRF/MRF (conditional random fields, markov fields). цвет в данном случае очень хороший априорный индикатор о регионе, а CRFы позволяют формализовать идею о том, что рука - связный регион на изображении, и не выделять мусор близкий по цвету.
  #20  
Старый 07.03.2011, 03:27
гocть

 
Сообщений: n/a

Сообщение от гocть Посмотреть сообщение
попробуй CRF/MRF
чтиво:
Boykov & Jolly, Interactive Graph Cuts, Buykovhttp://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.129.8181&rep=rep1&type=pdf

предупреждаю, что это лишь один из подходов. статья уже довольно старая (2001), с тех пор изобрели и много нового. но это довольно известный алгоритм.
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра