图像算法---头发检测算法研究

最近在做头发检测的算法研究,在此做个总结。

发色检测目前主要的方法有:1,基于颜色空间统计的发色检测;2,基于概率模型、高斯模型的发色检测;3,基于神经网络机器学习的发色检测;

这三种方法中,最稳定的是第3种,但是该方法实现起来比较复杂,样本量大;最简单的是第1种,但是不精确;

说实在的,这三种方法,都没办法完美检测发色,也就是没办法避开同色的干扰,不过,今天本人还是要介绍一种,相对来讲,比较实用的方法:

本文的算法使用最简单的颜色空间模型和概率模型,参考文献为:《Hair color modeling and head detection》,在此文献基础上修改而成。

为了便于理解,本文直接介绍算法实现过程,相信大家对于没用的也不太想看呵呵,因此,对于理论,大家没兴趣的可以跳过。

理论基础:

1,基于YCbCr颜色空间,对N个头发区域像素进行 采样统计,结果如下图:

2,将统计结果投影在Cb-Cr平面,结果如下:

3,采用高斯混合概率模型对发色的色度概率分布进行描述:

4,根据Cb和Cr的取值范围对当前像素进行肤色判断:

if(Cb<=141&&Cb>=115&&Cr>=115&&Cr<=143)

P(i,j)为发色

else

P(i,j)非发色

上面1-4的过程即论文《Hair color modeling and head detection》中所介绍的方法,测试效果如下:

经过我的测试,论文中的方法检测准确率很低,这里简单放上两张测试图,大家可以看到,误检率很高,把较多的背景和肤色都检测成了发色。

因此,本人对这个算法进行了改进,添加了一个约束条件:

由于发色主要是黑色为主,偏黄或者偏白,这几种情况都跟RGB三分量中的R分量关系最密切,因此,本人添加了R约束:R<Th

Th是经验值,这里我们实际使用中可以使用Th=60,这个值是我测试N张图的到的经验值,同时,也可以使用动态调节Th来获取发色区域,这里我

给出几张测试效果:

大家可以从效果上看出,改进的方法效果很不错,呵呵,最后改进后的判断条件如下:

if(Cb<=141&&Cb>=115&&Cr>=115&&Cr<=143&&R<Th)

P(i,j)为发色

else

P(i,j)非发色

默认值Th = 60

这里,给出C#代码如下:

        public Bitmap HairD(Bitmap src, int k )
        {
            Bitmap a = new Bitmap(src);
            Rectangle rect = new Rectangle(0, 0, a.Width, a.Height);
            System.Drawing.Imaging.BitmapData bmpData = a.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            int stride = bmpData.Stride;
            unsafe
            {
                byte* pIn = (byte*)bmpData.Scan0.ToPointer();
                byte* p;
                int R, G, B;
                double Cr, Cb, BrightV;
                for (int y = 0; y < a.Height; y++)
                {
                    for (int x = 0; x < a.Width; x++)
                    {
                        p = pIn;
                        R = p[2];
                        G = p[1];
                        B = p[0];
                        Cb = 128 - 37.797 * R / 255 - 74.203 * G / 255 + 112 * B / 255;
                        Cr = 128 + 112 * R / 255 - 93.768 * G / 255 - 18.214 * B / 255;
                        if (!(Cb >= 115 && Cb <= 141 && Cr >= 115 && Cr <= 143&&R<k))
                        {
                            pIn[0] = (byte)255;
                            pIn[1] = (byte)255;
                            pIn[2] = (byte)255;
                        }
                        pIn += 3;

                    }
                    pIn += stride - a.Width * 3;
                }
            }
            a.UnlockBits(bmpData);
            return a;
        }

最后,放上一个DEMO,下载地址:点击打开链接

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-05 23:53:09

图像算法---头发检测算法研究的相关文章

基于霍夫变换的形状检测算法研究与实现(java)

利用Hough变换算法检测形状的检测结果如下如所示: 1.检测直线 2.检测圆形 源代码及论文下载地址如下:基于霍夫变换的形状检测算法研究与实现(源代码及论文)

基于贝叶斯决策的彩色图像中皮肤区域检测算法研究与实现

一.背景介绍 皮肤检测在人脸识别与跟踪.手势识别.图像检索与分类等诸多计算机应用领域都有着广泛的应用.上述研究课题都必须解决一个基础问题,那就是将图像精确的划分为皮肤和背景两种区域,划分的精确与否直接影响着后续工作的精度与性能,因此皮肤检测已经逐渐成为以上任务的先行步骤和技术基础. 皮肤检测的相关算法有很多,典型的包括:直方图统计方法.高斯混合模型方法.基于颜色的皮肤检测.基于纹理的皮肤检测.基于多特征的皮肤检测.基于小波变换的皮肤检测.基于差分的皮肤检测以及诸如使用空间扩散法等.其中M.J.J

车道线检测文献解读系列(一) 基于机器视觉的高速车道标志线检测算法的研究_李晗

作者背景 基于机器视觉的高速车道标志线检测算法的研究_李晗 东北大学车辆工程硕士学位论文 2006年 [GB/T 7714]李晗. 基于机器视觉的高速车道标志线检测算法的研究[D]. 东北大学, 2006. DOI:10.7666/d.y852642.` 论文结构一览 预处理 灰度化 [亮点]模式判别 选择日间模式还是夜间模式: 在每个检测周期开始时,首先判断采用日间模式还是夜间模式工作.摄像机视野中的上半部分为天空背景,天空亮度可以显著区分日间和夜间环境.由于天空的颜色为蓝离,日间天空的蓝色分

目标检测最全论文集锦引用地址 最新进展和研究成果 2019最火目标检测算法centernet 拓展想法以及拓展研究的思路

目标检测最全论文集锦引用地址 最新进展和研究成果 2019最火目标检测算法centernet 拓展想法以及拓展研究的思路 待办 经典论文集锦 https://zhuanlan.zhihu.com/p/36818086 https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html 目标检测最新进展与研究 https://zhuanlan.zhihu.com/p/96115519 centernet思路梳理

Supervised Descent Method Face Alignment 代码下载 和 算法研究 之一

1 主要内容: Supervised Descent Method and its Applications to Face Alignment算法研究. 2代码彩蛋:我问了好久,xxiong好心人发给我的,希望能对你们学习有帮助: 低调下载: http://humansensing.cs.cmu.edu/xxiong/mexintraface1.3.1%28release%29.zip. 注意杜绝一切商业用途,如果需要商业用途,请联系作者本人!! 3本文分为几个部分: (1)解决什么问题 (2

图像连通域标记算法研究

把之前一篇记录过的日志贴过来 图像连通域标记算法研究 ConnectedComponent Labeling 最近在研究一篇复杂下背景文字检测的论文. “Detecting Text in Natural Scenes with Stroke Width Transform ” CPVR 2010的文章,它主要探讨利用文字内部笔画宽度一致作为主要线索来检测文字的一个新奇的算法,当然,我不是想讨论文字检测,论文算法实施的过程中有一步涉及到图像连通域标记算法,在这里我遇到了一些问题,查阅了一些相关文

相似数据检测算法

相似数据检测算法对给定的一对数据序列计算两者之间的相似度([0,1], 1表示完全相同)或距离([0, ), 0表示完全相同),从而度量数据之间的相似程度.相似数据检测在信息科学领域具有非常重要的应用价值,比如搜索引擎检索结果的聚类与排序.数据聚类与分类.Spam检测.论文剽窃检测.重复数据删除.Delta数据编码等应用.正是由于它的重要性,近年来成为了研究的重点,不断有新检测方法涌现并得到评估.其中,Broder提出的shingling算法和Charikar的simhash算法被认为是目前为止

静态频繁子图挖掘算法用于动态网络——gSpan算法研究

摘要 随着信息技术的不断发展,人类可以很容易地收集和储存大量的数据,然而,如何在海量的数据中提取对用户有用的信息逐渐地成为巨大挑战.为了应对这种挑战,数据挖掘技术应运而生,成为了最近一段时期数据科学的和人工智能领域内的研究热点.数据集中的频繁模式作为一种有价值的信息,受到了人们的广泛关注,成为了数据挖掘技术研究领域内的热门话题和研究重点. 传统的频繁模式挖掘技术被用来在事务数据集中发现频繁项集,然而随着数据挖掘技术应用到非传统领域,单纯的事务数据结构很难对新的领域的数据进行有效的建模.因此,频繁

伪AP检测技术研究

转载自:http://www.whitecell-club.org/?p=310 随着城市无线局域网热点在公共场所大规模的部署,无线局域网安全变得尤为突出和重要,其中伪AP钓鱼攻击是无线网络中严重的安全威胁之一. 受到各种客观因素的限制,很多数据在WiFi网络上传输时都是明文的,如一般的网页.图片等:甚至还有很多网站或邮件系统在手机用户进行登陆时,将帐号和密码也进行了明文传输或只是简单加密传输(加密过程可逆).因此,一旦有手机接入攻击者架设的伪AP,那么通过该伪AP传输的各种信息,包括帐号和密码