青岛大学本科生毕业论文(设计)
2、基于模版匹配:模板匹配方法是根据人脸轮廓、眼睛、鼻子和嘴巴的轮廓特征或者灰度特征计算结果,手工构造一个标准的人脸模式或者参数化的人脸模式。这个方法大多采用归一化互相关法,直接计算出图像之间的匹配度。
3、隐马尔可夫模型: hidden Markov model ,HMM(中译为隐马尔可夫模型)是用于描述信号系统特征的一种常见的统计模型,多用于语音判定。依照一种自然的顺序,即从上到下、从左到右来表征人脸面部特征的分布,这种顺序不会随着人脸在平面和垂直方向上发生旋转而变化,但是实现起来的难度较大。
4、基于神经网络识别:基于神经网络的方法是近年来研究的一个主流研究方向。人工神经网络(ANN)的神经元中的一个节点的处理单元(一个模拟人的脑细胞和简化)之间的加权连接拓扑。Cottrell 等人进行人脸识别使用的是级联BP 神经网络方法,对部分受损的人像、光照有所变化的人像,有很好的识别能力,但是神经元数目通常很多,训练时间很长,具有固有缺陷:收敛速度慢、容易陷入局部极小、先验参数多且参数的确定凭经验而定。
5、特征脸识别:特征脸法是一种常用的人脸识别方法。这种方法主要是从人脸图像的全局,KL变换使用的理论,原始空间的一组正交向量,并以此构成新的人脸空间,使所有人脸的均方差最小,达到将为的目的。降维的思想,降低了运算量,此算法多运用于硬件配置相对中低端的手持设备中。但是此算法也存在缺陷:特征脸方法容易受多种因素的干扰导致识别率下降,例如:角度、光照、表情等。
通过以上算法的介绍,结合算法的特征还有应用的平台,我们选择PCA算法。因为这样我们可以减少大量的计算过程,从而提高程序运行的效率,因为实现手机上的运行我们更重视考虑到运算量的大小,综合考虑本文的主要算法实现我们采用PCA算法。
2.2.2 运用程序功能分析
本文应用程序最主要的功能就是要能识别出人脸,首先该系统需要通过SD卡中存取的图像而获取到的原始的人脸图片进行一系列处理才可进行下一步的工作,该处理过程也称图像预处理。预处理这个模块在整个人脸识别系统的开发过程中占有很重要的地位,只有预处理模块做的好,才可能很好的完成后面的特征提取这一关键模块。因此本设计中所要完成的主要功能如下所述:
图像存取:在手机SD卡中建立相关文件夹,用于存取人脸图像,其中包括待识别图像以及相关的数据。
图像获取功能:主要是调用SD卡中的图像,进入处理程序。
图像预处理:主要是对获取的图像进行灰度化、直方图均衡化、平滑滤波、等处理。 图像特征的提取:按照PCA算法对图像进行特征提取。
识别功能:这部分功能主要依据程序设置,对图像里人的眼睛进行标注,从而识别出人脸图像。
5
青岛大学本科生毕业论文(设计)
2.2.3 研究方案的确定
通过以上分析本文的研究方案确定为以下几点:
熟悉Java编程语言为进一步熟悉Android编程平台打下基础,初步实现利用Android手机实现存取和读取文件夹里照片的功能。
查阅并重新学习数字图像处理的相关知识,为图像预处理打下坚实的理论基础。学习各种图像处理的算法,然后运行软件编程,通过程序的实际运行效果进行相应的调整、改进。主要预处理步骤如图2.1:图像预处理层次图。
图像预处理 彩色图像的 灰度化 灰度图像的直方图均衡化 图像的平滑 滤波 图像的边缘 检测 图2.1 图像预处理层次图
图像预处理获取标准人脸后,学习人脸识别相关算法,对主要人脸识别算法进行归纳、总结。确定本课题人脸识别算法,并对算法认真研究、理解并写成相应的程序。最终实现人脸识别算法在Android平台上的运行,完成本课题要求。
6
青岛大学本科生毕业论文(设计)
2.3 技术路线
由以上分析,技术路线如图2.2:人脸识别技术路线。
图2.2 人脸识别技术路线
7
青岛大学本科生毕业论文(设计)
第三章 图像预处理
由于使用的人脸图像来源于手机存取图像,这些图像在产生、传输和变换会受到种种原因的影响,使得图像产生变差或是退化,而这种变化会使产生的图像与原始景物之间存在某些差异,这些差异一般会使人脸图像的对比度差、人脸边沿模糊、噪声较大等。这些差异对下一步的图片处理带来了极大困难和不便,因此就很有必要对人脸图像进行一些相应的处理,以来改善图像的视觉效果,来提高图像的清晰度,便于提高后期的图像识别识别率,这一过程就是图像的预处理。
人脸图像预处理的方法主要有:人脸图像灰度化、人脸图像二值化、人脸图像几何校正、直方图均衡化、人脸图像的滤波、图像锐化、像素平均等[13]。
3.1 彩图灰度化
人脸识别技术的研究不是直接利用原始的彩色图像,一般是采用将彩色图片灰度化之后的灰度图像作为研究对象。这是因为彩色图像包含了太多的人脸的信息,而直接将彩色图像作为研究对象会使处理的过程变得相当的复杂,不利于识别也减缓了算法的运行速率。而灰度图在保留人脸信息量不丢失的情况下,减少了信息总量,为后期的识别算法提供了具体的可行性。
把彩色图像进行灰度化,大多采用以下经验公式:
Gray?0.39R?0.50G?0.11B (3-1) 具体过程如:图3.1 彩色图像的灰度变换
读取图像数据 获取 RGB分量 计算像素点灰度值 像素点重新赋值 得到灰度图 图3.1 彩色图像的灰度变换
Android程序实现的主要代码:
int color = pix_result[width * i + j]; int red=Color.red(color);
int green=Color.green(color); int blue=Color.blue(color);
color = (int) ( (float)red*0.3 + (float)green*0.59 + (float)blue*0.11)&0xFF;
8
青岛大学本科生毕业论文(设计)
3.2 直方图均衡化
图像直方图是图像像素的灰度值的统计衡量。反应图像的直方图可以是一个很好的总体概述,图像是值得大大的不同情况,如图像中的目标的背景下,分布,也可以计算出的最大和最小灰度值图像,平均灰度值,对比度等。应用到图像的预处理,我们称为直方图均衡化(也被称为校正直方图),其基本思想是,每个灰度级组件尽可能均匀地分布在整个图像中的空间中,在直方图中的性能上的理由密集的灰度分布变得均匀分布,从而提高了图像的对比度。另外,直方图均衡化也可以降低干扰的线图像,冲击,更容易地使图像的特征提取,并在同一时间,提高图像的主观质量的。实践证明,直方图均衡是一种有效的方法,用于图像增强。
直方图均衡化就是要建立一个T变换,对于连续的图像来说:用变量R来代表待增强图像的灰度级。假设R被归一化到区间[0, 1],且R=0代表黑色、R=1代表白色。之后用一个离散公式并允许像素值在区间[0,L-1]。这样我们建立变换:
S?T(R)0?R?1 (3-2)
在输入图像中,对于每个像素值R产生一个灰度值S。T(R)满足一下条件: (1)T(R)在区间0?R?1上为单值且单调函数 (2)当0?R?1时,0?T(R)?1
这样就保证了T(R)的反变换存在,单调的条件就保证了输出图像是从黑到白的顺序,最后由S到R的反变换可表示为:
R?T?1(S)0?S?1 (3-3)
对于离散的数字图像,其方法可以表示为:
L?1iR??nk?0.5Ak?0(i?0,1,,L?1) (3-4)
其中A为图像面积,L为图像灰度级,nk表示灰度级为k的像素点的总数。 算法实现流程,如图3.2 直方图均衡化算法流程:
Android中核心代码: Gray=PixelsGray[i]; FrequenceGray[Gray]++;
SumGray[i]=SumGray[i-1]+FrequenceGray[i]; SumGray[i]=(int)(SumGray[i]*255/length); PixelsGray[k] = SumGray[PixelsGray[k]]; return PixelsGray;
9
获取原图像 信息 统计各灰度级概率密度 原图像直方图均衡化 返回均衡化的像素点数组
图3.2直方图均衡化算法流程