بهروز عباسی
چهارشنبه 23 اسفند 1391, 02: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 هم نیاز به الگوریتم دارم.
من می خوام رنگ پوست رو در فضای 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 هم نیاز به الگوریتم دارم.