肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
由于能力有限,算法层面的东西自己去创新的很少,很多都是从现有的论文中学习,然后实践的。
本文涉及的很多算法,在网络上也有不少同类型的文章,但是肯定的一点就是,很多都是不配代码的,或者所附带的代码都是象征性的,速度慢,不优雅,不具有实用价值,本文努力解决这些问题。
文中各算法出现的顺序并不代表算法的优越性,仅仅是作者随机排布的而已。
2、基于RGB颜色空间的简单阈值肤色识别
在human skin color clustering for face detection一文中提出如下简单的判别算式:
R>95 And G>40 And B>20 And R>G And R>B And Max(R,G,B)-Min(R,G,B)>15 And Abs(R-G)>15
算法非常之简单,同样主要把复杂的判断条件放到后面去判断,能有效的降低程序的执行时间,参考代码:
for (Y = 0; Y < Height; Y++) {Pointer = Scan0 + Y * Stride;SkinP = SkinScan0 + Y * SkinStride;for (X = 0; X < Width; X++){Blue = *Pointer; Green = *(Pointer + 1); Red = *(Pointer + 2);if (Red > 95 && Green > 40 && Blue > 20 && Red > Blue && Red > Green && Math.Abs(Red - Green) > 15){if (Blue >= Green) {Max = Blue;Min = Green;}else{Max = Green;Min = Blue;}if (Red > Max)Max = Red;else if (Red < Min)Min = Red;if (Max - Min > 15) *SkinP = 255;}Pointer += 3;SkinP++;}
算法效果:
原图 识别结果图 原图 识别结果图
由上述结果似乎该算法得到了过多的皮肤区域,然后就是算法更喜欢美女一些(^_^)。
3、基于YCbCr颜色空间的简单阈值肤色识别
该算法则更为简单,将图像转换到YCbCr颜色空间,然后按下述计算式判断是否属于皮肤区域:
(Cb > 77 And Cb < 127) And (Cr > 133 And Cr < 173)
关于RGB和YCbCr颜色空间的转换的优化算法,可参考本博客相关文章。
由于当初写这方面的时候没有注明该算法的出处,现在也没从提起了。
代码参考:
for (Y = 0; Y < Height; Y++) {Pointer = Scan0 + Y * Stride;SkinP = SkinScan0 + Y * SkinStride;for (X = 0; X < Width; X++){Blue = *Pointer; Green = *(Pointer + 1); Red = *(Pointer + 2);Cb = (-176933 * Red - 347355 * Green + 524288 * Blue + 134217728) >> 20;if (Cb > 77 && Cb < 127){Cr = (524288 * Red - 439026 * Green - 85262 * Blue + 134217728) >> 20;if (Cr > 133 && Cr < 173) *SkinP = 255;}Pointer += 3;SkinP++;} }
原图 识别结果图 原图 识别结果图
误判的区域还是很大的。
还有一种是基于YUV颜色空间进行的肤色识别,似乎也不太准确,可参考http://www.doc88.com/p-97381067005.html。
***************************作者: laviewpbt 时间: 2013.8.17 联系QQ: 33184777 转载请保留本行信息*************************
肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法相关推荐
- 肤色检测算法 - 基于不同颜色空间简单区域划分的皮肤检测算法
基于RGB颜色空间的简单阈值肤色识别 在human skin color clustering for face detection一文中提出如下简单的判别算式: R>95 And G>4 ...
- 聚类技术---复杂网络社团检测_基于Plato高性能图计算框架的社团发现算法
近年来,图作为一种表示和分析大数据的有效方法,因为特别适合用作 社交网络.推荐系统.网络安全.文本检索和生物医疗等领域至关重要的 数据分析和挖掘工具, 而受到广泛关注. 这里的"图" ...
- python 活体检测_基于Python+Keras+OpenCV实现实时人脸活体检测 | 文末送书
你在互联网上找到的大多数人脸识别算法和研究论文都会遭受照片***.这些方法在检测和识别来自网络摄像头的图像.视频和视频流中的人脸方面是很是有效,可是他们没法区分现实生活中的面孔和照片上的面孔.这种没法 ...
- java基于聚类的离群点检测_基于两步聚类的离群点检测
转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/anomaly_detection.html 本文主要针对IBM SPSS Modeler 18.0中离群点检 ...
- matlab血管图像增强算法,基于Hessian特征的视网膜血管图像的增强滤波算法
第30卷第3期 2013年6月 Vol.30 No.3 Jun.,2013 华 东 交 通 大 学 学 报 Journal of East China Jiaotong University 文章编号 ...
- 【角点检测】 基于各向异性高斯方向导数滤波器实现图像角点检测附matlab代码
1 内容介绍 为了改进噪声鲁棒性和定位准确性,利用各向异性高斯方向导数滤波器,提出多方向角点检测算法.该算法利用一组各向异性高斯方向导数滤波器对输入图像进行卷积处理得到各个方向的滤波器响应.对于每个像 ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- pcb成型板aoi检测_基于AOI技术的PCB常见质量缺陷检测
. . 优质资料 . . 基于 AOI 技术的 PCB 常见质量缺陷检测 摘 要:印制电路板简称 PCB ,作为电子元器件的支 撑体和电子元器件电气连接的载体,是重要的电子部件,由 于它采用的是电子印 ...
- opencv_deeplearning实战2:基于颜色阈值的皮肤检测
一.总概 今天写了一篇基于深度学习的人脸检测,写完下午就开始实战第二篇,皮肤检测.原理很简单,就是基于HSV的阈值处理.为什么不用BGR阈值,因为HSV的颜色空间,更加直观,特别适用于颜色分割.具体可 ...
最新文章
- PHP实现文件下载断点续传详解
- archlinux 开机自动连接wifi
- jqgrid 启用键盘操作bindKeys
- 洛谷 U3357 C2-走楼梯
- IDEA创建第一个Spring Boot项目
- ArcGIS Server 开发系列(一)--编程框架总览
- 华为Mate 40 Pro屏幕贴膜曝光:双孔曲面屏实锤?
- 云服务 华为p10 短信_苹果、小米、华为,手机云服务哪家强?
- 怎样才能在电脑上下载计算机一级考试软件?
- 电赛机器视觉——激光点定位
- Android的第一行代码
- ScreenCapture API – QTP截屏工具
- 复原 IP 地址(回溯)
- 无法启动Windows安全中心服务怎么办
- 服装erp软件如何提高企业利润
- 入侵WIN2003 PHP服务器的另类技术
- 使用httpclient调用url出现错误Illegal character in scheme name at index 0解决方案
- STM32-增量式旋转编码器测量
- 消失的中国互联网元老陈天桥:为神经科学捐助10亿,不担心机器人崛起
- openssl-key-exchange 基于ECDH (Elliptic-Curve Diffie–Hellman) 的密钥交换流程
热门文章
- 华为畅享8的悬浮窗在哪里_华为畅享8悬浮球设置 | 手游网游页游攻略大全
- Java学习总结:38(正则表达式)
- linux网卡设置adsl上网,Linux下设置ADSL自动拨号上网
- php数据库html文本,关于php,mysql,html的数字分页和文本_php
- listen函数的第二个参数_【图像处理】OpenCV系列十七 --- 几何图像变换函数详解(一)...
- iis伪静态排除css_魔众系统伪静态规则怎么配
- Swift 换肤方案的实现使用SwiftTheme框架
- 旅行家的预算[贪心]
- Python爬一下抖音上小姐姐的视频~
- SVN提交错误:working copy is not up-to-date解决方法