Witam po długiej przerwie. Już wiele razy pisałem o tym co planuję, wiele pomysłów na tego bloga przechodziło przez myśl. Ostatecznie wyszło tak, że nie pisałem nic. Więc porzucam te wszystkie pomysły i pisać będę krótsze notki, może częściej, może rzadziej, ale przynajmniej blog będzie dawał czasami znak życia :)
Dzisiaj powraca temat detekcji skóry, ponieważ ostatnio dość mocno nad tym pracuję. Jak kiedyś o tym wspomniałem, najprostsze techniki opierają się o proste zależności między wartościami odpowiednich kanałów obrazu. Dzisiaj jedna z takich metod dająca zaskakująco dobre wyniki (zwłaszcza po zastosowaniu erozji ;). Jej opis znajdziemy tutaj pod tytułem "Human Skin Colour Clustering for Face Detection". Nie owijając w bawełnę, poniżej kod.
Dzisiaj powraca temat detekcji skóry, ponieważ ostatnio dość mocno nad tym pracuję. Jak kiedyś o tym wspomniałem, najprostsze techniki opierają się o proste zależności między wartościami odpowiednich kanałów obrazu. Dzisiaj jedna z takich metod dająca zaskakująco dobre wyniki (zwłaszcza po zastosowaniu erozji ;). Jej opis znajdziemy tutaj pod tytułem "Human Skin Colour Clustering for Face Detection". Nie owijając w bawełnę, poniżej kod.
IplImage* process(IplImage* img)
{
IplImage * toRet = cvCreateImage(cvGetSize(img), 8, 1);
for (int y = 0; y < img->height; y++)
{
uchar* ptr = (uchar*) (img->imageData + y * img->widthStep);
uchar* ptrRet = (uchar*) (toRet->imageData + y * toRet->widthStep);
for (int x = 0; x < img->width; x++)
{
double b, g, r;
b = ptr[3 * x];
g = ptr[3 * x + 1];
r = ptr[3 * x + 2];
double min = b;
double max = b;
if (min > g)
min = g;
if (min > r)
min = r;
if (max < g)
max = g;
if (max < r)
max = r;
if (r <= 95 ||
g <= 40 ||
b <= 20 ||
max - min <= 15 ||
fabs(r - g) <= 15 ||
r <= g ||
r <= b)
{
ptrRet[x] = 0;
}
else
{
ptrRet[x] = 255;
}
}
}
cvErode(toRet,toRet,NULL,1);
return toRet;
}
W komentarzach możecie podzielić się "wrażaniami" :) U mnie na jednej kamerce działa świetnie, na drugiej gorzej niż średnio :)
Wynik działania:
| Światło | Kamera 1 | Kamera 2 |
| Naturalne | ![]() | ![]() |
| Sztuczne | ![]() | ![]() |
| Naturalne + Sztuczne | ![]() | ![]() |






5 komentarzy:
Szkoda, że nie urozmaiciłeś całości o screeny porównawcze z obu kamerek (a może przekonam Cię, i jeszcze je dodasz?). Postaram się za parę dni sprawdzić jak to zadziała z moimi kamerkami.
Dodałem :) Porównałem też jak wpływa oświetlenie w moim niewielkim pokoju.
No no, na pierwszej kamerze, ze sztucznym oświetleniem naprawdę niezły wynik :)
Dokładnie :) Dodam, że mam pomarańczowe ściany, więc tym bardziej efekt na pierwszej kamerze zadowala :)
Cóż, moja jedna kamerka uległa chyba uszkodzeniu, na matrycy pełno syfu, może to tylko jakieś pyłki ale nie mogę się ich na razie pozbyć. Natomiast kamerka wbudowana w laptopa http://dl.dropbox.com/u/1012731/zdjecia/result.png oświetlana 24W energooszczędną żarówką jakiś metr nad głową i pół metra w tył. Największe plamy nie będące skórą to drzwi i włącznik światła. Efekt oceniam jako gdzieś pomiędzy Twoimi.
Prześlij komentarz