Откриване на цвета на косата в портретно изображение

Добре, ако приемем, че работя правилно с алгоритъма, който открива и капсулира косата на портретна снимка.

Как мога (с висок % коректност) да различавам цветовете?

Знам, че изглежда просто, но основният проблем е, че в зависимост или от светлинните условия на околната среда, където е направена снимката, или (в по-малкото случаи) от обработката с пост ефект, гама от „руси“, „черни“, „кафяви“ и "червени" се променят много, при фалшиви положителни резултати и понякога без откриване на правилни. (Преминаване на блондинка като черен пример).

Използвайки 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, пробвах го на Lena. Можете да го изтеглите от тук (мъртва връзка ).

person guneykayim    schedule 16.08.2013
comment
Връзката ви вече не работи, можете ли да я актуализирате? - person Samuel; 03.04.2020