ref: c3d6da666ec2564611d1fac0759a8a453726ec9a
parent: 11bf7ea354cb69755e1f0e1a71351b166ae30677
author: Marco <[email protected]>
date: Thu Mar 10 10:43:42 EST 2016
vp9: Update to skin detection. For model=1, use higher threshold on luminance, conditioned on the skin cluster distance. Change-Id: I971bccdef7b92b2aeef60af90a8e48b98716a89b
--- a/vp9/encoder/vp9_skin_detection.c
+++ b/vp9/encoder/vp9_skin_detection.c
@@ -62,16 +62,16 @@
// Exit on very strong cb.
if (cb > 150 && cr < 110)
return 0;
- // Exit on (another) low luminance threshold if either color is high.
- if (y < 50 && (cb > 140 || cr > 140))
- return 0;
for (; i < 5; i++) {
- if (evaluate_skin_color_difference(cb, cr, i) < skin_threshold[i + 1]) {
- return 1;
+ int skin_color_diff = evaluate_skin_color_difference(cb, cr, i);
+ if (skin_color_diff < skin_threshold[i + 1]) {
+ if (y < 60 && skin_color_diff > 3 * (skin_threshold[i + 1] >> 2))
+ return 0;
+ else
+ return 1;
}
// Exit if difference is much large than the threshold.
- if (evaluate_skin_color_difference(cb, cr, i) >
- (skin_threshold[i + 1] << 3)) {
+ if (skin_color_diff > (skin_threshold[i + 1] << 3)) {
return 0;
}
}