From 8b3b7e6ecef8381ad21861b78fd1c8768d58eab9 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Sun, 28 Feb 2016 04:10:56 +0200 Subject: [PATCH] Fix skin filter. * Remove Y from GS threshold. * Not really fixed, just looks slightly better. --- src/omv/img/im_filter.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/omv/img/im_filter.c b/src/omv/img/im_filter.c index f6a6f16fa..cabdcccac 100644 --- a/src/omv/img/im_filter.c +++ b/src/omv/img/im_filter.c @@ -39,18 +39,19 @@ void im_filter_bw(uint8_t *src, uint8_t *dst, int size, int bpp, void *args) } +// Thresholds taken from "Skin Segmentation Using YUV and RGB Color Spaces" Zaher Hamid Al-Tairi void im_filter_skin(uint8_t *src, uint8_t *dst, int size, int bpp, void *args) { if (bpp == 1) { // Kinda works for (int i=0; i80 && u>85 && u<135 && v>135 && v<180) ? 255 : 0; - dst[i+1] = (y1>80 && u>85 && u<135 && v>135 && v<180) ? 255 : 0; + dst[i+0] = (u>80 && u<130 && v>136 && v<200 && v>u) ? 255 : 0; + dst[i+1] = (u>80 && u<130 && v>136 && v<200 && v>u) ? 255 : 0; } } else { @@ -58,17 +59,14 @@ void im_filter_skin(uint8_t *src, uint8_t *dst, int size, int bpp, void *args) uint16_t *srcrgb = (uint16_t*) src; uint16_t *dstrgb = (uint16_t*) dst; for (int i=0; i80 && u<130 && - v>136 && v<200 && v>u && - r>80 && g>30 && b>15 && - (((r-g)*(r-g)) > 225)) ? srcrgb[i] : 0; + dstrgb[i] = (u>80 && u<130 && v>136 && v<200 && + r>80 && g>30 && b>15 && (((r-g)*(r-g)) > 225)) ? srcrgb[i] : 0; } } }