1. 什么是颜色空间
同一个颜色,可以用不同方式表示。 平时熟悉的是RGB
- R=红色强度
- G=绿色强度
- B=蓝色强度
一个像素可能是:
- R=220
- G=170
- B=140
这看起来像偏浅的肤色。 但RGB本身有个问题,它把“颜色本身”和“亮不亮”混在一起了。 同一块皮肤,在暗光下RGB会整体变小;在强光下RGB会整体变大。直接用RGB判断肤色不稳定。
2. HSV是什么
HSV把颜色拆成:
- H=Hue,色相,是什么颜色
- S=Saturation,饱和度,颜色浓不浓
- V=Value,亮度,亮不亮
举例:
- 红色、黄色、蓝色 → 主要体现在H不同
- 灰色、白色 → S很低
- 亮红、暗红 → V不同 肤色通常在HSV里会落在一个大范围内。
3. YCrCb是什么
YCrCb把颜色拆成:
- Y = 亮度
- Cr = 红色色度分量
- Cb = 蓝色色度分量
可以粗略理解为:
- Y:这个像素有多亮
- Cr/Cb:这个像素的颜色偏向 肤色在Cr和Cb上通常会落在一个经验范围内
4. 什么叫颜色空间阈值
“阈值”就是范围。 所以颜色空间阈值判断,本质就是:
- 把图片每个像素转换成HSV/YCrCb
- 检查它是否落在肤色经验范围内
- 落在范围内 → 记为肤色像素
- 否则 → 非肤色像素
5. 为什么同时用HSV和YCrCb
只用一种颜色空间容易误判。 比如:
- 浅色衣服可能在HSV里像肤色
- 暖色背景可能在YCrCb里像肤色
- 过曝区域可能接近皮肤但其实不是皮肤
必须两个都满足没才算肤色。这里更保守。
6. 在我们方案中裸露判断里怎么用
- YOLO找到人体框 person box
- SCRFD找到人脸框 face box
- 从 person box里扣掉 face box
- 对剩下区域逐像素判断是否为肤色
- 统计肤色像素面积
7. 优缺点
优点:
- 快
- 不需要是训练新模型
- 结果可以解释
- 阈值可以调
缺点:
- 不是语义理解,只是颜色规则
- 肉色衣服可能误判
- 滤镜、暖光、过曝会影响
- 深色肤色、强阴影可能误判
- 手、脖子、腿都会算作肤色,但它不知道这些部位是否违规