Ответ 1
Вы взглянули на бумагу для переноски Gary Bradski? Вы можете скачать его из здесь
Я использовал алгоритм обнаружения кожи год назад для обнаружения областей кожи для отслеживания рук, и он является надежным. Это зависит от того, как вы его используете.
Первая проблема с использованием цвета для отслеживания заключается в том, что он не является надежным для вариантов освещения или, как вы упомянули, когда у людей разные оттенки кожи. Однако это можно легко решить, как указано в статье:
- Преобразование изображения в цветовое пространство HSV.
- Выбросьте V-канал и рассмотрите канал H и S и, следовательно, скидка на вариации освещения.
- Пороговые пиксели с низким насыщением из-за их нестабильности.
- Вставьте выбранную область кожи в двумерную гистограмму. (OpenCV "calcHist function) Эта гистограмма теперь действует как модель для кожи.
- Вычислить "обратный проект" (т.е. использовать гистограмму для вычисления "вероятности" ) что каждый пиксель в вашем изображении имеет цвет тона кожи), используя calcBackProject. кожа регионы будут иметь высокие значения.
- Затем вы можете использовать meanShift для поиска режима 2D "вероятностная" карта, сгенерированная backproject, или для обнаружения капель высокая "вероятность".
Отбрасывание V-канала в HSV и только с учетом каналов H и S действительно достаточно (удивительно) для обнаружения разных тонов кожи и при различных вариациях освещения. Плюсом является то, что его вычисление выполняется быстро.
Эти шаги и соответствующий код можно найти в оригинальной книге OpenCV.
В качестве дополнительной заметки я также использовал гауссовские модели смешивания (GMM). Если вы только рассматриваете цвет, я бы сказал, что использование гистограмм или GMM не имеет большого значения. Фактически гистограмма будет работать лучше (если ваш GMM не создан для учета изменений освещения и т.д.). GMM хорош, если ваши векторы образца более сложны (например, вы рассматриваете другие функции), но скорость гистограммы намного быстрее, потому что вычисление карты вероятностей с использованием гистограммы - это, по существу, поиск в таблице, тогда как GMM требует выполнения вычисления матрицы (для вектора с размерностью > 1 в формуле для многомерного гауссовского распределения), что может потребовать много времени для приложений реального времени.
Итак, в заключение, если вы только пытаетесь обнаружить области кожи, используя цвет, то перейдите к методу гистограммы. Вы можете приспособить его к рассмотрению локального градиента (например, гистограмму градиентов, но, возможно, не в полной мере использовать аллогенный детектор Dalal и Trigg), чтобы он мог различать кожу и области с подобным цветом (например, картона или деревянной мебели), используя локальную информацию текстуры. Но это потребует больших усилий.
Для примера исходного кода о том, как использовать гистограмму для обнаружения кожи, вы можете взглянуть на страницу OpenCV здесь. Но обратите внимание, что это упоминается в что веб-страница использует только канал оттенков и что использование как оттенка, так и насыщенности даст лучший результат.
Для более сложного подхода вы можете взглянуть на работу "Обнаружение обнаженных людей" Маргарет Флек и Дэвид Форсайт. Это была одна из ранних работ по обнаружению областей кожи, которые учитывают как цвет, так и текстуру. Подробности можно найти здесь.
Здесь можно найти отличный ресурс для исходного кода, связанного с компьютерным зрением и обработкой изображений, который, как представляется, включает код для визуального отслеживания. И нет, это не OpenCV.
Надеюсь, что это поможет.