# مهندسی نرم افزار > مباحث مرتبط با مهندسی نرم‌افزار > پردازش تصویر (Image Processing) >  تشخیص رنگ پوست در فضای YCbCr و تصاویر Gray

## بهروز عباسی

درود 

من می خوام رنگ پوست رو در فضای 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;


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

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

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 هم نیاز به الگوریتم دارم.

----------


## مصطفی ساتکی

یکی از کارهای خوبی که میشه در 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 نمی تونیم عمل کلاسیفی رو انجام بدیم بهتره نواحی رنگ پوست مطلق رو کاری نداشته باشیم و اونایی که در بازه مشکوک هستند توسط کلاسیفیر تصمیم گیری بشه که بایستی بعنوان رنگ پوست باشه یا نه.
برای اطلاعات بیشتر به این پست مراجعه کنید.

موفق باشید

----------

