基于Opencv的人脸色斑检测研究毕业论文
2020-02-17 22:24:18
摘 要
近年来,随着医学技术的不断提高,医学美容已经是一个热门话题。而对于医学美容而言,皮肤状况分析则是必不可少的步骤。人脸色斑检测就是对人脸区域的皮肤进行皮肤状况分析,是一种人脸皮肤检测的一个重要手段。色斑检测主要需要对人脸区域的色斑进行查找,把色斑区域在人脸上标记出来。此方法可以有效的分析人脸的色斑状况。
色斑检测依然是一种重要的医学检测手段,在医学上也经常被使用到。色斑检测在医生对患者进行面部皮肤诊断具有重要意义。今年来越来越多的医学美容医院需要运用色斑检测来分析患者面部色斑分布。随着计算机学的不断发展,在数字图像处理领域,OpenCV(开源计算机视觉库)的出现使得计算机对数字图像的处理变得简单而有效。所以基于OpenCV的人脸色斑检测是一种行之有效的色斑检测手段。
本文主要在Python的基础之上利用OpenCV,Dlib,Numpy等模块,利用灰度处理,直方图均匀化,形态学处理,自适应阈值分割等图像处理手段,将人脸色斑在人脸区域标记显示。
关键词:色斑检测;OpenCV;数字图像处理
Abstract
In recent years, with the continuous improvement of medical technology, medical beauty has become a hot topic. For medical beauty, skin condition analysis is an essential step. Face color spot detection is an analysis of the skin condition of the skin in the face area, and is an important means of face skin detection. The detection of stains mainly requires searching for the spots on the face area and marking the area of the spots on the face of the person. This method can effectively analyze the condition of the face of the face.
Spot detection is still an important medical test and is often used in medicine. Spot detection is important in doctors' facial skin diagnosis. More and more medical beauty hospitals this year need to use stain detection to analyze the distribution of facial spots on patients. With the rapid development in field of digital image processing, the emergence of OpenCV (open source computer vision library) makes computer processing of digital images simple and effective. Therefore, face detection based on OpenCV is an effective method for detecting spots.
This paper mainly uses OpenCV, Dlib, Numpy and other modules on the basis of Python, using gray level processing, histogram homogenization, morphological processing, adaptive threshold segmentation and other image processing methods to mark human face in face area. display.
Keywords: color spot detection; OpenCV; digital image processing
目 录
摘要 I
Abstract II
第1章 绪论 1
1.1 研究目的及意义 1
1.2 国内外现状 2
1.3 本论文的主要工作 3
第2章 色斑检测原理 4
2.1 色斑检测原理分析 4
2.1.1 RGB灰度转换 5
2.1.2 直方图均匀化 6
2.1.3 自适应阈值分割 8
2.1.4 形态学处理 9
2.1.5 轮廓检测 10
2.2 色斑检测流程 11
第3章 色斑检测算法实现 13
3.1 Python简介 13
3.2 OpenCV简介 13
3.3 Dlib简介 14
3.4 图像的基本运算 15
3.5 图像掩膜 16
3.6 函数分析 17
3.7 过程分析 22
3.7.1 椭圆掩膜 22
3.7.2 读取图像 22
3.7.3 灰度处理 23
3.7.4 直方图均匀化处理 24
3.7.5 自适应阈值分割处理 25
3.7.6 排除无关区域 26
3.7.7 闭运算处理 27
3.7.8 绘制色斑 28
第4章 色斑检测结果分析 30
4.1 结果分析 30
4.1.1 误检分析 31
4.1.2 漏检分析 31
小结 32
参考文献 33
致谢 36
绪论
研究目的及意义
近年来随着科技的进步,医学美容也有了很大的进展。医学美容的通常都涉及到容貌检测以及整容手术,例如非烧蚀性激光手术,用于皮肤再生和填充注射,以达到减少皱纹的目的。大多数传统的皮肤分析仪器都是接触式的,医生必须对人脸区域进行目视观察,并使用接触式探头针放大人脸区域进行检查。这种接触检测方法可能不卫生,容易导致细菌以及有害物质的传播。非接触式检查通过专用的摄像头直接分析患者的面部皮肤区域,从而检测皮肤状况。因而,医生和病人也可以通过远程协助的方式,实现远程缺陷检测咨询。
本色斑检测算法是基于非接触式的数码成像的人脸色斑检测算法。随着数码相机的分辨率的提高,人们提出了许多数码成像方法来分析皮肤状况。这些研究应用了各种颜色量化方法来区分ROI是否为斑点。然而,使用纯颜色信息来检测斑点是困难的,因为面部器官(眼睛、鼻子、嘴或耳朵)的阴影可能被误判为斑点。
人脸色斑检测作为一个与人脸识别相似的技术,相比于人脸识别而言,技术思想方法也与人脸类似,下面就人脸色斑检测的技术难点做简要分析。
人脸色斑检测是一个涉及多个学科的研究领域,与数字图像处理、计算机视觉技术及生物医学等学科的联系非常密切,色斑检测也与采集设备,光照条件,人脸姿势有关。同时人脸色斑检测算法对于理疗美容以及面部皮肤分析有重要作用以及意义。
人脸色斑检测的算法依然是具有挑战性的研究方向之一。主要表现在:
- 人脸的原始数据获取方式,随着摄像技术的日新月异,数据采集设备的不断创新,人脸数据的获取手段也在不断地变化,但采集设备的成本依然较高,实时性也有待进一步加强。
- 人脸在不同的角度情况下,色斑检测的准确度有待不断的提高,特别是在弱光的物理条件下,人脸色斑检测更是科研人员面临的重要研究问题之一。而且,采集到的人脸原始数据包含各种噪声的干扰,数据不明显,需要进行大量的预处理,对检测结果的精准度影响较大。
- 医学上对人脸色斑的研究更加具体,将人脸色斑分为雀斑,老年斑,黑斑以及黄褐斑等种类,如何利用医学方面的经验提高人脸色斑系统的检测效率,也是科研工作者亟待解决的问题。
国内外现状
人脸识别、生物特征识别和计算机人机交互技术等领域有着不可分割联系,人脸色斑检测系统,主要涉及数字图像处理、计算机科学和生理学等多门学科领域。色斑检测主要表现在机器视觉方面,利用算法识别人脸的主要脸部特征,进行特征点提取,再利用检测算法识别人脸色斑。色斑检测也体现在机器学习方面,采用卷积神经网络对人脸的面部特征进行监督学习,这些方法是基于机器学习的训练算法。
人脸色斑检测主要有两种算法:1、基于机器学习的方法2、传统的图像处理的方法,两种方法各有优劣,现在简单介绍两种方法的原理。
- 基于机器学习的方法
人脸图像由于亮度、姿势等各种条件的影响,导致了图像的具有许多干扰,难以直接表现出人脸特征,而基于机器学习方法引入了一个新的解决问题的途径。该方法将色斑区域看作训练样本,使用大量的“色斑”和“非色斑”进行训练。样本学习的结果取决于神经网络的架构合理性和训练集对人脸色斑的分类准确度。此类方法中典型的基于机器学习的方法,通过不断迭代,收集大量的“非色斑”样本,用于判断“色斑”样本。有研究对正面人脸色斑和正面旋转人脸色斑的检测单独进行了研究。如果光线不足,所实现的算法准确率比较低。有研究结合了多种姿态的人脸色斑检测算法,利用基于距离向量和生物神经网络等检测算法,对多种姿态下的人脸色斑进行检测,其方法的稳定性较高,然而,如果光照不足,其人脸色斑检测得到准确度就大大降低。也有人研究了在不同光谱条件下的人脸色斑特征,采集大量的数据,避免了多种光照下的影响,在一定程度上避免了弱光的影响,但是也有一定的缺点,如,难以采集数据,如果光照不足,人脸色斑和其他人脸特征依然无法保证区分的准确度。[1]
基于机器学习的方法进行人脸检测的优点是:(1)该方法可以不依赖有关人脸色斑的先验知识,减少了不完整的先验知识带来的误判;(2)采用机器学习的学习算法,使得判别精度可以不断提高;(3)该方法具有较强的鲁棒性,适用于不良环境中的色斑检测。但检测目标需要为正面人脸,而由于人脸姿势的不确定性,该方法的适用性较为局限。
- 基于数字图像处理的方法
基于数字图像处理的方法检测人脸区域中人脸色斑。首先选取人脸区域作为ROI,再使用滤波算法消除光照因素影响,接着用形态学变换和直方图均匀化增强图像的对比度,再用动态阈值分割检测色斑,最后再用形态学处理消除剩余的离散点,最终得到色斑检测结果。经实验证明,该方法的准确率较高,并且算法结构简单,适用于一般的微处理器。但是对于非色斑区域的处理仍然需要进一步加强。[2]
本论文的主要工作
本论文主要是在基于数字图像处理的方法的基础上对色斑检测的无关区域使用Dlib库以及固定阈值检测的方法进行改进,降低识别错误率,提高色斑识别的准确度。本文使用了Python以及OpenCV框架,由于均是开源协议,大大降低了开发成本,具有良好的前景。文章设计思路如下:
将基于平行偏振光下的皮肤图像灰度化后,进行动态阈值分割,再进行形态学处理后提取近圆形及面积在一定范围内且与毛孔区域不重叠的轮廓进行标记显示得出斑点区域。
论文主要内容如下:
第一章 绪论
简要说明了毕业设计选题的研究目的及意义,介绍了人脸色斑的发展经历的几个阶段。
第二章 色斑检测原理
本章具体说明了色斑检测的步骤,以及使用的数字图像处理手段以及相关算法。
第三章 色斑检测算法实现
本章具体说明了色斑检测算法的实现步骤,通过使用Python OpenCV框架来实现色斑检测算法。
第四章 色斑检测结果分析
本章具体分析了色斑检测算法的检测结果,对技术指标进行了一些分析。
第五章 小结
本章对本论文所进行的进行系统性总结,对本人所做的事情,结果,收获以及感想进行简要陈述。
色斑检测原理
色斑检测原理分析
基于OpenCV的人脸色斑检测原理是在将基于平行偏振光下的皮肤图像灰度化后,利用色斑和人脸皮肤的颜色差异进行动态阈值分割,再进行形态学处理后提取近圆形及面积在一定范围内且与毛孔区域不重叠的轮廓进行标记显示。
在用数码相机取得平行偏振光的图像进行灰度处理之后,使用OpenCV读入图像,再使用一些OpenCV图像处理手段使得图像的图像的灰度值在一定范围内的像素元值的数量大致相等,使得图像灰度顶峰部分和两侧谷底部分得对比度得到增强,为下一步的动态阈值分割做预处理。然后在对图像进行动态阈值分割使其成为一副二值化图像。由于颜色差异,此时色斑为黑色而皮肤为白色。此时人脸区域仍然有很多非色斑区域依然为黑色,需要进行过滤。本实验采用基于Dlib的人脸五官分割方法以及基于阈值分割的方法联合进行五官过滤处理。接着需要对图像进行形态学处理,做闭运算使得色斑区域变得平滑以及消除毛孔区域。最后在使用OpenCV的轮廓检测标出色斑区域,整个过程大体如上。
RGB灰度转换
RGB彩色图像中的某种颜色是由B(蓝),G(绿),R(红)三色按照比例混合而成的。图像的基本单位是像素。每个像素由用3个色块组成,分别为B,G,R色块,一般用用8位二进制用来确定一种颜色的亮暗程度,那么这种颜色将会有255阶不同的颜色。如果RGB图像有9个像素,其在内存中的排列情况示意图如下:
图2.1 RGB图像存储示意图
RGB图像是以二进制形式保存在计算机内存中的,其色彩排列顺序有很多种,在OpenCV中则是以蓝,绿,红的顺序将三个色值保存在3个地址连续的内存内。
灰度图像是用灰色的亮暗程度来表示每个像素点,如果用8位二进制数描述灰色程度,则灰色具有256阶色度,每个像素点对应一个灰度值,占8位,因此一个像素只需要1个字节就可以保存在计算机中。
利用人眼对色度与亮度的视觉效应,可以RGB色域值转换为灰度值。这是对视觉效果的经验总结,转换公式如下:
(2.1)
根据这个公式,依次选取对应像素点的B,G,R值,进行B,G,R到灰度值的运算,结果为整型,将灰度值储存在新图像的对应位置,所有像素点运算完成后,即可完成转换。
直方图均匀化
直方图均匀化的目的:由于一些图像灰度的分布过于集中,这样会导致图像的层次不够分明,直方图均衡化就是为了让图像的灰度分布更均匀,图像的层次感更强。
数学原理:基于连续灰度分布的结论推导,直方图均衡化属于数字图像处理中灰度变换(intensity transformation)的内容,直方图均匀化的目的就是找到一个合适的映射函数s=T(r).将原图像的灰度值映射到灰度分布范围更宽的图像中,从而达到优化图像的目的。
假设原图像的灰度统计直方图标准化后为Pr(r).原图像灰度范围为(0~L-1)。那么直方图均衡化找到的就是这样一个映射函数:
(2.2)
设映射后的图像的灰度分布为Ps(s),再由概率论相关知识(随机变量函数的概率密度与随机变量的概率密度的关系)可知:
(2.3)
对映射函数两边进行求导:
(2.4)
所以我们可以得到变换后的图像直方图分布为:
(2.5)
我们可以看到,变换后的图像灰度直方图分布恒为1/(L-1),这就达到了上面的目的,使得灰度值的分布范围变得更宽,分布更均匀,提高了图像的对比度,层次感更强。
在灰度变换中,变换函数T(r)需要满足下面的两点要求:
- 当0≤r≤L-1时,T(r)是一个严格递增函数。
- 当0≤r≤L-1时,0≤T(r)≤L-1。
第一点要求的原因是,对于变化前像素和变换后像素灰度的明暗顺序不能改变,之所以要严格递增,是为了确保变化前和变换后像素可以一一对应。第二点要求的原因是,变换后的图像不能超过原先的灰度级数。不难发现,其实直方图均衡化的过程并不一定满足条件1。所以该变换时不可逆的。
公式的离散化:
设原图像灰度等级为0、1、2……L-1.离散化后的映射公式就是:
(2.6)
在利用上面公式进行计算的时候,需要把计算的结果S(r),近似为最近的整数。
自适应阈值分割
自适应阈值分割是利用图像局部阈值替换全局阈值进行图像计算的一种方法,具体针对光影变化过大的图片,或者范围内颜色差异不太明显的图片。自适应是指保证计算机能够通过判断和计算取得该图像区域的平均阈值进行迭代。
在图片处理过程中,针对铺前进行二值化等操作的时候,我们希望能够将图片相应区域内所有的信息提供保留。实验室环境下,相应的素材是模板化的,但是将实验室方法应用于现实环境中时,我们会发现光影环境对于效果的影响其实是很大的。在这种情况下进行处理,会使得结果不如人意:一块黑,一块白,且黑的区域的特征无法提取。这时候自适应阈值算法尤为重要。与全局阈值不同,它更加注重上下文关系,将原本图片分割成更小的区域进行判断,极大地降低了阴影对于图片本身的影响。
自适应阈值分割算法中常见的算法有:OTSU算法(最大类间方差算法),Wall算法,最大熵算法、迭代法。这里主要介绍OTSU算法:
OTSU算法是用于自适应阈值分割的一种常用算法。OTSU算法原理是利用图像的灰度值分布,将图像分割成背景和目标两部分,我们需要通过确定的阈值将目标部分分割出来,我们需要的阈值就是背景和目标的分界值。不断变换阈值,计算目标和背景之间的类间方差,使得类间方差取得极大值,此时的阈值即是OSTU算法所求的阈值。
下面进行公式推导:
以下是OSTU算法的推导:假设图像为P(i,j),目标和背景的分割阈值为C, 背景像素点数与像素点总数之比为η1,平均灰度值为g1。目标像素点数与像素点总数之为η0,平均灰度值为g0;图像的总平均灰度值为g,类间方差值为σ。假设图像的大小为A×B,灰度值小于阈值C的像素数为M0,灰度值大于阈值C的像素数为M1。
(2.7)
以上是毕业论文大纲或资料介绍,该课题完整毕业论文、开题报告、任务书、程序设计、图纸设计等资料请添加微信获取,微信号:bysjorg。
相关图片展示: