Определение цвета волос на портретном изображении

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

Как я могу (с высоким процентом правильности) различать цвета?

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

Используя opencv (или любой другой инструмент, потому что у меня уже есть волосы), какой алгоритм или методы предварительной обработки я должен применить, чтобы «нормализовать» такого рода проблемы и минимизировать ошибки?

Большое спасибо.


person voskyc    schedule 16.08.2013    source источник
comment
Для различения цветов цветовое пространство HSV обычно является хорошим вариантом, поскольку вы можете напрямую получить оттенок.   -  person ChronoTrigger    schedule 17.08.2013
comment
ты решил проблему?   -  person Suisse    schedule 02.06.2017


Ответы (2)


Я думаю, вы можете использовать методы машинного обучения для классификации цветов. Просто обучите классификатор (например, SVM или нейронную сеть) на образцах цветов (вы можете взять гистограмму цвета в качестве входного вектора) и некоторых классах (названиях цветов). Я думаю, что это будет хороший способ справиться с изменениями света, шумом, тенями и т. д. И я думаю, что будет лучше использовать расширенное цветовое пространство L*a*b* или HSV.

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

person Andrey Smorodov    schedule 16.08.2013
comment
Спасибо, я прочитал немного больше, и на самом деле я должен использовать (как вариант) YCbCr, опуская Y. Взяв несколько образцов диапазонов цвета волос и поместив их в пространство YCbCr, затем сравнив их с изолированными (также в YCbCr) волосы каждой картины. Я прав? Благодарность - person voskyc; 16.08.2013
comment
Нет, я имею в виду, например: у вас есть вектор цветовой гистограммы {1,2,3,42,4,2,6}, и вы назначаете метку, например. желтый. У вас много таких пар. Затем вы можете обучить классификатор, используя эти данные. И после обучения он получит от вас вектор гистограммы и даст вам название цвета. - person Andrey Smorodov; 16.08.2013
comment
Здесь вы можете прочитать об использовании ML в похожей задаче: lear.inrialpes.fr/pubs /2009/VSVL09/verbeek09tip.pdf - person Andrey Smorodov; 16.08.2013

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

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

Я реализовал это на Matlab, попробовал на Лене. Вы можете загрузить его с здесь (неработающая ссылка ).

person guneykayim    schedule 16.08.2013
comment
Ваша ссылка больше не работает, не могли бы вы обновить ее? - person Samuel; 03.04.2020