Fix RGB skin filter

This commit is contained in:
iabdalkader 2016-02-20 06:16:22 +02:00
parent e72e55802c
commit 84ff228384

View File

@ -61,11 +61,14 @@ void im_filter_skin(uint8_t *src, uint8_t *dst, int size, int bpp, void *args)
int r = IM_R528(srcrgb[i]); int r = IM_R528(srcrgb[i]);
int g = IM_G628(srcrgb[i]); int g = IM_G628(srcrgb[i]);
int b = IM_B528(srcrgb[i]); int b = IM_B528(srcrgb[i]);
//int y = yuv_table[srcrgb[i] * 3 + 0]; //int y = yuv_table[srcrgb[i] * 3 + 0] + 128;
int u = yuv_table[srcrgb[i] * 3 + 1]; int u = (int) yuv_table[srcrgb[i] * 3 + 1] + 128;
int v = yuv_table[srcrgb[i] * 3 + 2]; int v = (int) yuv_table[srcrgb[i] * 3 + 2] + 128;
dstrgb[i] = (u>80 && u<130 && v>136 && v<200 && v>u && // From "Skin Segmentation Using YUV and RGB Color Spaces" Zaher Hamid Al-Tairi
r>80 && g>30 && b>15 && ((r-g)*(r-g)) > 225) ? srcrgb[i] : 0; dstrgb[i] = (u>80 && u<130 &&
v>136 && v<200 && v>u &&
r>80 && g>30 && b>15 &&
(((r-g)*(r-g)) > 225)) ? srcrgb[i] : 0;
} }
} }
} }