PDA

View Full Version : تشخیص رنگ پوست در فضای YCbCr و تصاویر Gray



بهروز عباسی
چهارشنبه 23 اسفند 1391, 01:48 صبح
درود

من می خوام رنگ پوست رو در فضای YCbCr و تصاویر Gray بدست بیارم

برای این کار ابتدا RGB رو به YCbCr تبدیل کردم :
type
TYCrCb = record
Y: Byte;
Cr: Byte;
Cb: Byte;
end;

function RGB2YCbCr(const R, G, B: Byte): TYCrCb;
begin
Result.Y := Round((0.299 * R) + (0.587 * G) + (0.114 * B));

Result.Cb := Round(-(0.169 * R) - (0.331 * G) + (0.500 * B));

Result.Cr := Round((0.500 * R) - (0.419 * G) - (0.081 * B));
end;


بعد با استفاده از تابع زیر چک می کنم که آیا پیکسل فعلی رنگ پوست هست یا نه ؟
با استفاده از نتایج این تصویر :

101366

فهمیدم رنگ پوست در چه بازه ای قرار داره .



function Is_YCbCr_Skin(const R, G, B: Byte): Boolean;
var
Cr, Cb: Byte;
begin
Cr := RGB2YCbCr(R, G, B).Cr;
Cb := RGB2YCbCr(R, G, B).Cb;

if ((Cr < 50) and (Cr > 0)) then
// if (Cr >= (1.5862 * Cb) + 20) AND (Cr <= ((0.3448 * Cb) + 76.2069)) then
Result := True
else
Result := False;
end;

نتایج بدی نگرفتم اما می خوام بدونم راه بهتر و دقیقتری هست؟
اگه آره لطفاً معرفی کنید

البته برای تشخیص رنگ پوست در تصاویر Gray هم نیاز به الگوریتم دارم.

مصطفی ساتکی
چهارشنبه 23 اسفند 1391, 18:38 عصر
یکی از کارهای خوبی که میشه در 3 فضای رنگی کار کنید و نتیجه اونو را and کنید.

bool R1(int R, int G, int B) {
bool e1 = (R>95) && (G>40) && (B>20) && ((max(R,max(G,B)) - min(R, min(G,B)))>15) && (abs(R-G)>15) && (R>G) && (R>B);
bool e2 = (R>220) && (G>210) && (B>170) && (abs(R-G)<=15) && (R>B) && (G>B);
return (e1||e2);
}

bool R2(float Y, float Cr, float Cb) {
bool e3 = Cr <= 1.5862*Cb+20;
bool e4 = Cr >= 0.3448*Cb+76.2069;
bool e5 = Cr >= -4.5652*Cb+234.5652;
bool e6 = Cr <= -1.15*Cb+301.75;
bool e7 = Cr <= -2.2857*Cb+432.85;
return e3 && e4 && e5 && e6 && e7;
}

bool R3(float H, float S, float V) {
return (H<25) || (H > 230);
}

چون رنگ پوست تو فضای رنگی 3 بعدی به طور کامل با چند تا rule نمی تونیم عمل کلاسیفی رو انجام بدیم بهتره نواحی رنگ پوست مطلق رو کاری نداشته باشیم و اونایی که در بازه مشکوک هستند توسط کلاسیفیر تصمیم گیری بشه که بایستی بعنوان رنگ پوست باشه یا نه.
برای اطلاعات بیشتر به این پست (http://7khatcode.com/1705/%D8%AA%D8%B4%D8%AE%DB%8C%D8%B5-%D8%B1%D9%86%DA%AF-%D9%BE%D9%88%D8%B3%D8%AA-%D8%AF%D8%B1-%DA%86%D9%87%D8%B1%D9%87-skin-color-detection?show=1705#q1705) مراجعه کنید.

موفق باشید