2011-12-21 2 views
19

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

Первый шаг - сделать фотографию руки (в цветовом пространстве HSV) рукой, помещенной в маленький прямоугольник, чтобы определить цвет кожи. Затем я применяю фильтр пороговых значений, чтобы установить все пиксели не-скинов в черный цвет, а все пиксели скинов - белые.

Пока это работает очень хорошо, но я хотел спросить, есть ли лучший способ решить это? Например, я нашел несколько работ, посвященных конкретным цветовым пространствам для кавказских людей, но ни один из них не сравнился с азиатскими/африканскими/кавказскими оттенками.

Кстати, я работаю с OpenCV через привязки Python.

ответ

22

Вы взглянули на бумагу для переноски Gary Bradski? Вы можете скачать его с here

Я использовал алгоритм обнаружения кожи год назад для обнаружения областей кожи для отслеживания рук, и он надежный. Это зависит от того, как вы его используете.

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

  1. Преобразование изображения в цветовое пространство HSV.
  2. Выбросьте канал V и рассмотрите канал H и S и, следовательно, скидка на вариации освещения.
  3. Пороговые пиксели с низким насыщением из-за их нестабильности.
  4. Вставьте выбранную область кожи в двумерную гистограмму. (OpenCV's calcHist ) Эта гистограмма теперь действует как модель для кожи.
  5. Вычислить «обратный проект» (например, использовать гистограмму для вычисления «вероятности» , чтобы каждый пиксель на вашем изображении имел цвет тона кожи) с использованием calcBackProject. Кожа регионов будут иметь высокие значения.
  6. Вы можете либо использовать meanShift для поиска режима 2D «Вероятностная» карта, сгенерированная backproject, либо для обнаружения капель высокой «вероятности».

Отбрасывание V-канала в HSV, и только с учетом каналов H и S действительно достаточно (удивительно) для обнаружения различных тонов кожи и при различных вариантах освещения. Плюсом является то, что его вычисление выполняется быстро.

Эти шаги и соответствующий код можно найти в оригинале OpenCV book.

В качестве побочного примечания я также использовал гауссовские модели смеси (GMM). Если вы только рассматриваете цвет, я бы сказал, что использование гистограмм или GMM не имеет большого значения. Фактически гистограмма будет работать лучше (если ваш GMM не создан для учета изменений освещения и т. Д.). GMM хорош, если ваши векторы образца более сложны (например, вы рассматриваете другие функции), но скорость гистограммы намного быстрее, потому что вычисление карты вероятностей с использованием гистограммы - это, по существу, поиск в таблице, тогда как GMM требует выполнения вычисления матрицы (для вектора с размерностью> 1 в формуле для многомерного гауссовского распределения), что может потребовать много времени для приложений реального времени.

Итак, если вы только пытаетесь обнаружить области кожи, используя цвет, то перейдите к методу гистограммы. Вы можете приспособить его к рассмотрению локального градиента (то есть гистограмму градиентов, но, возможно, не в полной мере использовать алгорифм обнаружения человека Dalal и Trigg), чтобы он мог различать кожу и области с похожим цветом (например, картон или деревянная мебель), используя локальную информацию текстуры. Но для этого потребуется больше усилий.

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

Для более сложного подхода вы можете взглянуть на работу Маркерет Флек и Дэвида Форсайт «Обнаружение обнаженных людей». Это была одна из ранних работ по обнаружению областей кожи который учитывает как цвет, так и текстуру. Подробности можно найти: here.

Отличный ресурс для исходного кода, связанного с компьютерным зрением и i обработка мага, которая включает код для визуального отслеживания, может быть найдена here. И нет, это не OpenCV.

Надеюсь, это поможет.

+2

спасибо за подробный ответ. Dont знаю, если я буду реализовывать метод точно, но его большая помощь, так как он также объясняет некоторые детали, такие как игнорирование v-канала, которое в настоящее время делает, но не понимая, почему – Nicolas

+1

Я добавил ссылку на сайт с большим количеством исходного кода CV и приложения для обработки изображений, включая визуальное отслеживание, которое, я думаю, может показаться полезным, поскольку, по-моему, обнаружение кожи может быть только одним возможным подходом. Возможно, стоит посмотреть на других. – lightalchemist

+0

Обновление ссылки для Обнаруживание голых людей - http://mfleck.cs.illinois.edu/naked.html – saurabheights

5

Here - это документ, посвященный адаптивной гауссовой модели кожи, которая может показаться интересной.

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

И, наконец, Google Scholar может быть большой помощью в поиске современного уровня обнаружения кожи. В настоящее время он активно изучается в adademia, а также используется в промышленности (например, Google Images и Facebook загружает политики изображения).

+0

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

4

Вам будет трудно найти тон кожи, основанный только на цвете.
Прежде всего, это сильно зависит от алгоритма автоматического баланса белого. Например, на этом изображении любой человек может видеть, что цвет - это тон кожи. Но для компьютера он будет синим. enter image description here

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

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

+0

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

+0

ОП задал вопрос о распознавании руки только по цветным каналам HSV. Кроме того, я могу представить себе множество ситуаций, в которых у вас нет лиц на изображении. –

5

Я работал над чем-то аналогичным 2 года назад. Вы можете попробовать с Particle Filter (Condensation), используя цветные пиксели цвета в качестве входных данных для инициализации. Он довольно прочный и быстрый. Способ, которым я применил его для моего проекта, составляет link. У вас есть как презентация (слайды), так и опрос. Если вы инициализируете цвет руки с реальным цветом, извлеченным из руки, которую вы собираетесь отслеживать, у вас не должно быть проблем с черными людьми.

Для фильтра частиц, я думаю, вы можете найти образцы реализации кода. Удачи.

0

Ну мой опыт моделирования кожи плохо, потому что: 1) молния может варьироваться - сегментация кожи не является устойчивой, 2) это будет означать ваше лицо также (как и другие кожные подобные объекты)

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

Смежные вопросы