黄色-图片识别引擎的一些心得

黄色-图片自动识别是一个涉及到图像处理、模式识别、机器学习、统计概率的综合领域,其关键技术包括:皮肤检测、人脸检测、连通区域分析、贝叶斯分类、支持向量机等等

[b]第一步是皮肤检测。[/b]
肤色检测并不像我们想象那样简单,要做到不同光照下的肤色识别,并不是只要指定一个所谓的“肉色”的RGB区域那么容易。一般采用转换到HSV色彩空间+变换的方式获得概率模型。
我在获得概率模型之后,用一个二值的Mask去与原图像做&操作,得到如下的结果:
[img]http://dl.iteye.com/upload/attachment/453443/af31f10a-47e2-3f30-9001-cfe04059144b.jpg[/img]
很直观的一点是,非零区域所占面积大的图片很可能是黄色-图片,反之则是正常图片

[b]第二步是连通区域分析。[/b]
大块的部分更有可能是手臂、躯干,而孤立地小块很可能是噪声

[b]第三步就是脸部检测[/b]
这里采用的是Haar小波特征
[img]http://dl.iteye.com/upload/attachment/453449/3462a06b-8a2e-38bf-beb3-26cc81de0d2c.jpg[/img]

脸部检测的作用,其一在于,肤色检测往往会召回某些脸部面积占据较大区域的照片,而这部分图片可以认为是脸部特写,并不属于黄色-图片,比如:
[img]http://dl.iteye.com/upload/attachment/453447/e5786301-6fc0-3110-b421-b1456f9e2643.jpg[/img]

脸部检测的作用,其二在于,往往可以根据脸部的位置来判断身体的位置,从而部分解决肤色模型的准确率问题。
[img]http://dl.iteye.com/upload/attachment/453453/9f022c21-9427-3cee-8f0c-1ac318fa20f1.jpg[/img]

由于室外光照的原因,第一步肤色检测的效果并不是很好,背景很多地方都被误召回了。但是,我们可以根据脸部的大小,推算出躯干的位置以及大小。
[img]http://dl.iteye.com/upload/attachment/453455/33a3e9df-233c-3bbb-99e6-109b908d7016.jpg[/img]

由于程序检测是红色区域为脸部,那么人体的躯干应该是在绿色区域以内,所以我们不必费力去检测绿框以外的部分。而内部的区域检测出的肤色区域很小,因此,这是一张正常图片。

上述三步的阈值如果凭经验而定往往不科学,因此最终的第四步就是训练,比如SVM、决策树或者贝叶斯分类器。

测试环境:visual C++ 2010 & opencv2.2 & libsvm
测试模特:苍井空~

你可能感兴趣的:(图像识别,机器学习,数据挖掘)