当前位置:首页 >> 信息与通信 >>

人脸识别系统设计与仿真 基于matlab的(含matlab源程序)版权不归自己 交流使用


人脸识别系统设计与仿真基于 matlab 的(含 matlab 源程序)

交流使用 参考后自行那个删除 后果自负 目录 第一章 绪论 .............................................................................................. 2 1.1 研究背景........

...............................................................................2 1.2 人脸图像识别的应用前景 ...........................................................3 1.3 本文研究的问题 ...........................................................................4 1.4 识别系统构成 ..............................................................................5 1.5 论文的内容及组织 .......................................................................7 第二章 图像处理的 Matlab 实现 ............................................................. 8 2.1 Matlab 简介 ....................................................................................8 2.2 数字图像处理及过程 ...................................................................8 2.2.1 图像处理的基本操作 ...........................................................8 2.2.2 图像类型的转换 ...................................................................9 2.2.3 图像增强 ...............................................................................9 2.2.4 边缘检测 .............................................................................10 2.3 图像处理功能的 Matlab 实现实例 ........................................... 11 2.4 本章小结.....................................................................................15 第三章 人脸图像识别计算机系统 ........................................................16 3.1 引言.............................................................................................16 3.2 系统基本机构 .............................................................................17

3.3 人脸检测定位算法 .....................................................................18 3.4 人脸图像的预处理 ....................................................................25 3.4.1 仿真系统中实现的人脸图像预处理方法 ........................26 第四章 基于直方图的人脸识别实现 ....................................................29 4.1 识别理论.......................................................................................29 4.2 人脸识别的 matlab 实现 ............................................................29 4.3 本章小结.....................................................................................30 第五章 总结 ............................................................................................31 致谢...........................................................................................................32 参考文献 ..................................................................................................33 附录...........................................................................................................35

1

第一章 绪论 本章提出了本文的研究背景及应用前景。 首先阐述了人脸图像识 别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自 动人脸识别系统的一般框架构成; 最后简要地介绍了本文的主要工作 和章节结构。 1.1 研究背景 自 70 年代以来.随着人工智能技术的兴起.以及人类视觉研究的 进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一 个人脸图像识别研究领域,.这一领域除了它的重大理论价值外,也 极具实用价值。 在进行人工智能的研究中, 人们一直想做的事情就是让机器具有 像人类一样的思考能力,以及识别事物、处理事物的能力,因此从解 剖学、心理学、行为感知学等各个角度来探求人类的思维机制、以及 感知事物、处理事物的机制,并努力将这些机制用于实践,如各种智 能机器人的研制。人脸图像的机器识别研究就是在这种背景下兴起 的,因为人们发现许多对于人类而言可以轻易做到的事情,而让机器 来实现却很难,如人脸图像的识别,语音识别,自然语言理解等。如 果能够开发出具有像人类一样的机器识别机制, 就能够逐步地了解人 类是如何存储信息,并进行处理的,从而最终了解人类的思维机制。 同时,进行人脸图像识别研究也具有很大的使用价依。如同人的 指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。现在己
2

有实用的计算机自动指纹识别系统面世,并在安检等部门得到应用, 但还没有通用成熟的人脸自动识别系统出现。 人脸图像的自动识别系 统较之指纹识别系统、DNA 鉴定等更具方便性,因为它取样方便, 可以不接触目标就进行识别,从而开发研究的实际意义更大。并且与 指纹图像不同的是,人脸图像受很多因素的干扰:人脸表情的多样性; 以及外在的成像过程中的光照,图像尺寸,旋转,姿势变化等。使得 同一个人,在不同的环境下拍摄所得到的人脸图像不同,有时更会有 很大的差别,给识别带来很大难度。因此在各种干扰条件下实现人脸 图像的识别,也就更具有挑战性。 国外对于人脸图像识别的研究较早,现己有实用系统面世,只是 对于成像条件要求较苛刻,应用范围也就较窄,国内也有许多科研机 构从事这方而的研究,并己取得许多成果。 1.2 人脸图像识别的应用前景 人脸图像识别除了具有重大的理论价值以及极富挑战性外, 还其 有许多潜在的应用前景,利用人脸图像来进行身份验证,可以不与目 标相接触就取得样本图像,而其它的身份验证手段,如指纹、眼睛虹 膜等必须通过与目标接触或相当接近来取得样木,在某些场合,这些 识别手段就会有不便之处。 就从目前和将来来看, 可以预测到人脸图像识别将具有广阔的应 用前景,如表 1-1 中所列举就是其中已经实现或逐步完善的应用。 表 1-1 人脸识别的应用

3

应用 信信用卡、汽车 驾照、护照以及个人 身份验证等 嫌疑犯照片匹配

优点 图像摄取可控 图像分割可控 图像质量好 图像质量不统一 多幅图像可用 库

存在问题 需要建立庞大的 数据库

潜在的巨大图像

互联网应用

视频信息价值高 多人参与

存在虚假

银行/储蓄安全

监控效果好

图像分割不可控 图像质量较差

人群监测

图像质量高 可利用摄像图像

图像分割自由 图像质量低、实 时性

1.3 本文研究的问题 本文介绍了人脸图像识别中所应用 MATLAB 对图像进行预处 理,应用该工具箱对图像进行经典图像处理,通过实例来应用 matlab 图像处理功能,对某一特定的人脸图像处理,进而应用到人脸识别系 统。 本文在总结分析人脸识别系统中几种常用的图像预处理方法基础 上,利用 MATLAB 实现了一个集多种预处理方法于一体的通用的人 脸图像预处理仿真系统, 将该系统作为图像预处理模块可嵌入在人脸

4

识别系统中, 并利用灰度图像的直方图比对来实现人脸图像的识别判 定。 其中涉及到图像的选取,脸部定位,特征提取,图像处理和识别 几个过程。 1.4 识别系统构成 人类似乎具有“与生俱来”的人脸识别能力,赋予计算机同样的 能力是人类的梦想之一,这就是所谓的“人脸识别”系统。假设我们 把照相机、摄像头、扫描仪等看作计算机的“眼睛” ,数字图像可以 看作计算机观察到的 “影像” 那么 AFR 赋予计算机根据其所 , “看到” 的人脸图片来判断人物身份的能力。 广义的讲,自动人脸识别系统具有如图 1.1 所示的一般框架并完 成相应功能的任务。

人 脸 图 像 获 取

人 脸 检 测

特 征 提 取

人 脸 识 别

图 1.1 人脸识别系统一般框架 (1)人脸图像的获取 一般来说,图像的获取都是通过摄像头摄取,但摄取的图像可以 是真人,也可以是人脸的图片或者为了相对简单,可以不考虑通过摄

5

像头来摄取头像,而是直接给定要识别的图像。 (2)人脸的检测 人脸检测的任务是判断静态图像中是否存在人脸。若存在人脸, 给出其在图像中的坐标位置、人脸区域大小等信息。而人脸跟踪则需 要进一步输出所检测到的人脸位置、 大小等状态随时间的连续变化情 况。 (3)特征提取 通过人脸特征点的检测与标定可以确定人脸图像中显著特征点 的位置(如眼睛、眉毛、鼻子、嘴巴等器官) ,同时还可以得到这些 器官及其面部轮廓的形状信息的描述。 根据人脸特征点检测与标定的结果, 通过某些运算得到人脸特征 的描述(这些特征包括:全局特征和局部特征,显式特征和统计特征 等) 。 (4)基于人脸图像比对的身份识别 即人脸识别(Face Identification)问题。通过将输入人脸图像与人 脸数据库中的所有已知原型人脸图像计算相似度并对其排序来给出 输入人脸的身份信息。这包括两类识别问题:一类是闭集(Close Set) 人脸识别问题,即假定输入的人脸一定是人脸库中的某个个体;另一 类是开集(Open Set)识别,即首先要对输入人脸是否在已知人脸库中 做出判断,如果是,则给出其身份。 (5)基于人脸图像比对的身份验证 即人脸确认(Face Verification)问题。系统在输入人脸图像的同时
6

输入一个用户宣称的该人脸的身份信息, 系统要对该输入人脸图像的 身份与宣称的身份是否相符作出判断。 1.5 论文的内容及组织 第二章主要介绍人脸识别系统中所用到的仿真软件 Matlab, 介绍 了在人脸图像识别过程中所需要的图像处理技术,包括:一些基本操 作、格式转换、图像增强等。并做了一个 Matlab 图像处理功能的实 例 第三章主要始涉三个方面: 首先是对人脸识别系统的构成做详细 论述;其次就是对人脸识别过程中的关键环节人脸检测、特征提取和 图像预处理做详细介绍;最后就是 Matlab 在人脸识别系统中的具体 应用,即人脸图像识别的具体技术,并用 Matlab 进行仿真试验并得 到结果。 第四章是对人脸图像识别体系构架的设计, 并给出了人脸识别用 到的理论知识即直方图差异对比,并编写 matlab 代码实现人脸图像 识别。 第五章总结了全文的工作并对以后的需要进一步研究的问题进 行了展望。

7

第二章 图像处理的 Matlab 实现 2.1 Matlab 简介 由 Math Work 公司开发的 Matlab 语言语法限制不严格,程序设计 自由度大,程序的可移植性好。Matlab 还推出了功能强大的适应于图 像分析和处理的工具箱,常用的有图像处理工具箱、小波分析工具箱 及数字信号处理工具箱。利用这些工具箱,我们可以很方便的从各个 方面对图像的性质进行深入的研究。 Matlab 图像处理工具箱支持索引 图像、RGB 图像、灰度图像、二进制图像并能操作.bmp、.jpg、.tif 等多种图像格式文件。 2.2 数字图像处理及过程 图像是人类获取信息、表达信息和传递信息的重要手段。利用计 算机对图像进行去除噪声、增强、复原、分割、提取特征等的理论、 方法和技术称为数字图像处理。数字图像处理技术已经成为信息科 学、计算机科学、工程科学、地球科学等诸多方面的学者研究图像的 有效工具。数字图像处理主要包括图像变换、图像增强、图像编码、 图像复原、图像重建、图像识别以及图像理解等内容。 2.2.1 图像处理的基本操作 读取和显示图像可以通过 imread()和 imshow()来实现;图像的输 出用 imwrite()函数就可以很方便的把图像输出到硬盘上;另外还可以

8

用 imcrop()、imrisize()、imrotate()等来实现图像的裁剪、缩放和旋转 等功能。 2.2.2 图像类型的转换 Matlab 支持多种图像类型,但在某些图像操作中,对图像的类型有 要求,所以要涉及到对图像类型进行转换。Matlab7.0 图像处理工具箱 为我们提供了不同图像类型相互转换的大量函数,如 mat2gray()函数 可以将矩阵转换为灰度图像,rgb2gray()转换 RGB 图像或颜色映像表 为灰度图像。在类型转换的时候,我们还经常遇到数据类型不匹配的 情况,针对这种情况,Matlab7.0 工具箱中,也给我们提供了各种数据类 型之间的转换函数,如 double()就是把数据转换为双精度类型的函数。 2.2.3 图像增强 图像增强的目的是为了改善图像的视觉效果,提高图像的清晰度 和工艺的适应性,以及便于人与计算机的分析和处理,以满足图像复制 或再现的要求。图像增强的方法分为空域法和频域法两大类,空域法 主要是对图像中的各个像素点进行操作;而频域法是在图像的某个变 换域内对整个图像进行操作,并修改变换后的系数,如傅立叶变换、 DCT 变换等的系数,然后再进行反变换,便可得到处理后的图像。下面 以空域增强法的几种方法加以说明。 (1).灰度变换增强 有多种方法可以实现图像的灰度变换,其中最常用的就是直方图

9

变换的方法,即直方图的均衡化。这种方法是一种使输出图像直方图 近似服从均匀分布的变换算法。Matlab7.0 图像处理工具箱中提供了 图像直方图均衡化的具体函数 histeq(),同时我们可以用函数 imhist() 函数来计算和显示图像的直方图。 (2).空域滤波增强 空域滤波按照空域滤波器的功能又可分为平滑滤波器和锐化滤 波器。平滑滤波器可以用低通滤波实现,目的在于模糊图像或消除噪 声;锐化滤波器是用高通滤波来实现,目的在于强调图像被模糊的细 节。在 Matlab 中,各种滤波方法都是在空间域中通过不同的滤波算子 实现,可用 fspecial()函数来创建预定义的滤波算子,然后可以使用 imfilter()或 filter2()函数调用创建好的滤波器对图像进行滤波。 2.2.4 边缘检测 数字图像的边缘检测是图像分割、目标区域识别、区域形状提取 等图像分析领域十分重要的基础,也是图像识别中提取图像特征的一 个重要属性。 边缘检测算子可以检查每个像素的邻域并对灰度变化率 进行量化,也包括对方向的确定,其中大多数是基于方向导数掩模求卷 积的方法。 常用的有 Sobel 算子,Prewitt 算子,Roberts 算子,Log 算子等。 Matlab7.0 工具箱中提供的 edge()函数可以进行边缘检测,在其参数里 面,可以根据需要选择合适的算子及其参数。

10

2.3 图像处理功能的 Matlab 实现实例 本文通过运用图像处理工具箱的有关函数对一人脸的彩色图像 进行处理。 1)图像类型的转换 因后面的图像增强,边缘检测都是针对灰度图像进行的,而我们的 原图是 RGB 图像,所以首先我们要对原图类型进行转换。实现过程代 码如下: i=imread('f:\face1.jpg');j=rgb2gray(i); imshow(j);imwrite(j,'f:\face1.tif') 效果图 2.1

图 2.1 2)图像增强 (1)灰度图像直方图均衡化 通过比较原图和直方图均衡化后的图像可见,图像变得更清晰,而 且均衡化后的直方图比原直方图的形状更理想。 该部分的程序代码如

11

下: i=imread('f:\face1.tif'); j=histeq(i);imshow(j); figure,subplot(1,2,1),imhist(i); subplot(1,2,2),imhist(j) 执行后的效果图如图 2.2 和图 2.3:

图 2.2 均衡化后的灰度图 像 图 2.3 均衡化前后的直方图对比图

12

(2)灰度图像平滑与锐化处理 平滑滤波器的目的在于模糊图像或消除噪声,Matlab7.0 图像处理 工具箱提供了 medfilter2()函数用于实现中值滤波,wiener2()实现对图 像噪声的自适应滤波。在本文实例中,为了使滤波效果更明显,我们事 先为图像认为增加滤波,然后用自适应滤波方法对图像进行滤波。锐 化处理的目的在于强调图像被模糊的细节,在本实例中采用了预定义 高斯滤波器的方法对图像进行锐化滤波。功能实现的代码如下: i=imread('f:\fae1.tif'); j=imnoise(i,'guassian',0,0.02); subplot(1,2,1),imshow(j); j1=wiener2(j);subplot(1,2,2),imshow(j1); h=fspecial('gaussian',2,0.05);j2=imfilter(i,h);figure,subplot(1,2,1),im show(i) subplot(1,2,2),imshow(j2)

得到的效果图如图 2.4 和图 2.5:

加入噪声的图像 图像

滤波后的

13

图 2.4 平滑滤波效果

原灰度图像 后的图像

锐化

图 2.5 锐化滤波效果图

3)边缘检测 Matlab7.0 图像处理工具箱提供了 edge()函数实现边缘检测,还 有各种方法算子供选择,在本实例中采用了 canny 算子来进行边 缘检 测, 程序代码如下: i=imread('f:face.tif');
14

j=edge(i,'canny',[0.04,0.25],1.5); imshow(j) 效果图如图 2.6:

原灰度图像 后的图像

边缘检测

图 2.6 边缘检测效果图

2.4 本章小结 以上实例只是对 Matlab 图像处理工具箱函数的一小部分运用,从 这些功能的运用可以看出,Matlab 语言简洁,可读性强。作为人脸识别 系统中图像预处理工具,有非常好的处理功能。

15

第三章 人脸图像识别计算机系统 3.1 引言 计算机人脸识别是一个非常活跃的研究领域, 因其在公安刑侦破 案、银行密码系统、计算机安全系统以及动态监视系统等方面都有广 泛应用,已成为当前模式识别、计算机视觉领域的研究热点。人脸识 别系统一般包括人脸检测与定位、人脸图像预处理、特征提取和匹配 识别四个组成部分。其中,人脸图像预处理,作为特征提取和识别的 前提步骤,是计算机人脸识别系统中的必要环节。其目的是在去除噪 声, 加强有用信息, 对输入设备或其他因素造成的退化现像进行复原, 为后续的特征提取和识别作准备。 不同的人脸识别系统根据其采用的图像来源和识别算法需要不 同,采用的预处理方法也不同。常用的人脸图像预处理方法有:滤波 去噪、灰度变换、图像二值化、边缘检测、尺寸归一化、灰度归一化 等。用在同一系统中的可能只有其中一种或几种预处理方法,但一旦 库中采集到的原始图像质量发生较大变化(如人脸大小、光照强度、 拍摄条件、成像系统等方面变化) ,原有的预处理模块便不能满足特 征提取的需要,还要更新,这是极不方便的。 鉴于此,作者在总结分析了灰度变换、滤波去噪、边缘检测三种 广泛应用于不同人脸识别系统中的预处理方法基础上, 设计了一个通 用的人脸图像预处理仿真系统。 该系统可对不同条件下的原始图像进 行相应的预处理。如,用户可根据需要选择使用不同的滤波方法去除

16

噪声、不同的边缘检测算子检测人脸边缘、选择不同的灰度变换算法 实现图像的灰度校正和灰度归一化, 仿真系统同时还实现了尺寸归一 化、二值化等其他常用的图像预处理算法。 3.2 系统基本机构 人脸识别是一个复杂的过程,一个计算机人脸识别的流程如图 3-1 所示。 它包括几个步骤: 对采集到的图像, 首先进行人脸检测 (在 输入图像中寻找人脸) ,给出人脸有无的结果;然后进行人脸定位, 确定人脸的位置并提取出来。 对人脸的定位在输入是图像序列时一般 也称之为人脸跟踪。通常检测和定位结合进行。对提取出来的人脸借 助人脸描述就可以进行(狭义的)人脸识别,即通过提取特征来确定 其身份。
开始

图像采集

人脸检测定位

是否定位成功 否 否



图像与处理

是否处理成功 否 否

是 是

人脸识别

是否识别成功 否 否

是 是

识别结果

结束

图 3.1 基本框架图

17

3.3 人脸检测定位算法 人脸检测定位算法大致可分为两大类: 基于显式特征的方法和基 于隐式特征的方法。 所谓显式特征是指对人类肉眼来说直观可见的特征,如肤色、脸 部轮廓、脸部结构等。基于显式特征的方法是指由人通过肉眼观察, 总结出人脸区别于“非人脸”区域的特征,然后根据被检测区域是否 满足这些“人脸特征” ,来判定该区域是否包含人脸。根据所选择的 “人脸特征” ,基于显式特征的方法分以下三类:基于肤色模型的方 法、模板匹配的方法、基于先验知识的方法。 在彩色图像中,颜色是人脸表面最为显著的特征之一,利用颜色 检测人脸是很自然的想法。Yang 等在考察了不同种族、不同个体的 肤色后,认为人类的肤色能在颜色空间中聚成单独的一类,而影响肤 色值变化的最主要因素是亮度变化。因此他们采用广泛使用的 RGB 颜色空间,在滤去亮度值的图像中通过比较像素点的r、g值与肤色 范围来推断该像素点及其邻域是否属于人脸区域。除了 RGB 颜色空 间,还有诸如 HIS,LUV,GLHS 等其它颜色空间被使用。寻找到肤 色区域后,必须进行验证,排除类肤色区域。Yoo 等利用肤色像素的 连通性分割出区域,使用椭圆拟合各个区域,根据椭圆长短轴的比率 判断是否为人脸。 模板匹配的方法一般是人为地先定义一个标准人脸模板, 计算输 入图像与模板的似然度;然后,确定一个似然度阈值,用以判断该输 入图像中是否包含人脸。标准人脸模板可以是固定的样板,也可以是
18

带参变量的曲线函数。 基于先验知识的方法则采用符合人脸生理结构特征的人脸镶嵌 图(mosaic image)模型,并在分析了足够多的人脸图像样本的基础 上,针对人脸的灰度、边缘、纹理等信息,建立一种关于人脸的知识 库。在检测中,首先抽取这些灰度、边缘等信息,然后检验它是否符 合知识库中关于人脸的先验知识。 以上三种方法的优缺点比较见表 3-1。

表 3-1 基于显示特征方法的特点 检测方法 优点与适用场合 缺点与需要改进的地方 高光和阴影会造成人脸区域被分 肤色模型 检测速度快 割而被漏检;肤色区域的存在提 高了预警率 直观性好, 具有较好 对表情、尺度变换敏感;可变模 模板匹配 的适应性 板的选择和参数的确定非常困难 基 于知识 的 适用复杂图像中的 依赖先验知识;多尺度空间遍历 方法 人脸检测 工作量大,运算时间长

19

基于隐式特征的方法将人脸区域看成一类模式,使用大量“人 脸”“非人脸”样本训练、构造分类器,通过判别图像中所有可能区 、 域是否属于“人脸模式”的方法来实现人脸检测。这类方法有:特征 脸法、人工神经网络法、支持向量机法;积分图像法。 特征脸法(eigenface)把单个图像看成一维向量,众多的一维向 量形成了人脸图像特征空间, 再将其变换到一个新的相对简单的特征 空间, 通过计算矩阵的特征值和特征向量, 利用图像的代数特征信息, 寻找“人脸”“非人脸”两种模式在该特征空间中的分布规律。 、 人工神经网络(Artificial Neural Network,ANN)的方法是通过 训练一个网络结构, 把模式的统计特性隐含在神经网络的结构和参数 之中。基于人工神经网络的方法对于复杂的、难以显式描述的模式, 具有独特的优势。 支撑向量机(Support Vector Machine,SVM)法是在统计学习理 论基础上发展出的一种新的模式识别方法, 它基于结构风险最小化的 原理,较之于基于经验风险最小化的人工神经网络,一些难以逾越的 问题,如:模型选择和过学习问题、非线性和维数灾难问题、局部极 小点问题等都得到了很大程度上的解决。但是直接使用 SVM 方法进 行人脸识别有两方面的困难:第一,训练时需要求解二次规划问题计 算复杂度高,内存需求量巨大;第二,在非人脸样本不受限制时,需 要极大规模的训练集合,得到的支持向量会很多,使得分类器的计算 量过高。 基于积分图像(Integral Image)特征的人脸检测方法是 Viola 等
20

新近提出的一种算法,它综合使用了积分图像描述方法、Adaboost 学习算法及训练方法、级联弱分类器。 以上四种方法的优缺点比较见表 3-2 表 3-2 基于隐式特征方法的特征 检 测 方 优点 法 标准人脸模板能抽象人脸全 但模板检测效率低,多模 本 征 脸 部信息,运算不涉及迭代耗费 板提高了效率也增加了检 法 时间短 神 经 网 多,训练成熟的网络监测速度 但网络监测错误报警数目 络法 快 多 支 撑 向 比神经网络方法具有更好的 “非人脸”样本复杂多样, 量 机 机 泛化能力,能对为观测到的例 造成支持向量数目多,运 法 子进行有效分类 算复杂度大 错误报警数目少时,检测 分 图 像 测要求,检测效率可以与神经 率不高 分析法 网络法比较 测时间 检测效率高,错误报警数目不 多样本训练耗费时间多, 缺点与需要改进的地方

基 于 积 检测速度快,基本满足实时检

运用 matlab 仿真进行人脸检测定位实例: 人脸检测定位程序: %%%%% Reading of a RGB image
21

i=imread('face1.jpg'); I=rgb2gray(i); BW=im2bw(I); figure,imshow(BW)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%% minimisation of background portion

[n1 n2]=size(BW); r=floor(n1/10); c=floor(n2/10); x1=1;x2=r; s=r*c;

for i=1:10 y1=1;y2=c; for j=1:10 if (y2<=c | y2>=9*c) | (x1==1 | x2==r*10) loc=find(BW(x1:x2, y1:y2)==0); [o p]=size(loc);
22

pr=o*100/s; if pr<=100 BW(x1:x2, y1:y2)=0; r1=x1;r2=x2;s1=y1;s2=y2; pr1=0; end imshow(BW); end y1=y1+c; y2=y2+c; end

x1=x1+r; x2=x2+r; end figure,imshow(BW) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% %%%%% detection of face object

L = bwlabel(BW,8); BB = regionprops(L, 'BoundingBox');
23

BB1=struct2cell(BB); BB2=cell2mat(BB1);

[s1 s2]=size(BB2); mx=0; for k=3:4:s2-1 p=BB2(1,k)*BB2(1,k+1); if p>mx & (BB2(1,k)/BB2(1,k+1))<1.8 mx=p; j=k; end end figure,imshow(I); hold on; rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'Ed geColor','r' )

24

原始图片

灰度图片

均衡化灰度图片

人脸定位

3.4 人脸图像的预处理 不同的人脸识别系统根据其采用的图像来源和识别算法需要不 同,采用的预处理方法也不同。常用的人脸图像预处理方法有:滤波 去噪、灰度变换、图像二值化、边缘检测、尺寸归一化、灰度归一化

25

等。用在同一系统中的可能只有其中一种或几种预处理方法,但一旦 库中采集到的原始图像质量发生较大变化(如人脸大小、光照强度、 拍摄条件、成像系统等方面变化) ,原有的预处理模块便不能满足特 征提取的需要,还要更新,这是极不方便的。鉴于此,作者在总结分 析了滤波去噪、边缘检测、灰度变换三种广泛应用于不同人脸识别系 统中的预处理方法基础上, 设计了一个通用的人脸图像预处理仿真系 统。该系统可对不同条件下的原始图像进行相应的预处理。如,用户 可根据需要选择使用不同的滤波方法去除噪声、 不同的边缘检测算子 检测人脸边缘、 选择不同的灰度变换算法实现图像的灰度校正和灰度 归一化,仿真系统同时还实现了尺寸归一化、二值化等其他常用的图 像预处理算法。 3.4.1 仿真系统中实现的人脸图像预处理方法 根据所查阅文献资料,常应用于人脸图像的预处理方法有:图像 类型转换、滤波去噪、灰度变换、边缘检测及二值化、尺寸归一化、 灰度归一化等。作为通用人脸图像预处理模块,要能够充分适应不同 人脸库中图像在人脸大小、光照强度、成像系统等方面的任意性和差 异性,不能单独采用某种单一的滤波、灰度变换和边缘检测方法。所 以, 在本仿真系统中, 对上述的每种预处理方法全部加以实现的同时, 还对三种最常用预处理方法:滤波去噪、灰度变换、边缘检测,提供 了多种不同的具体算法供用户比较、选择之用。 1)滤波去噪

26

由于噪声给图像带来的失真和降质, 在特征提取之前采用滤波的 方式来去除噪声是实际人脸识别系统中所必须的步骤。 滤波的方法有 很多,如各种平滑滤波、各种锐化滤波等,关于各种滤波方法的原理 和分类可参考文献[2]。 下面对本文实现的滤波方法及其选择依据加以 说明。在人脸图像预处理中使用较多的滤波是平滑滤波,方法可分为 以下三类:线性滤波、中值滤波、自适应滤波。 (1)线性滤波最典型的线性滤波方法如,采用邻域平均法的均 值滤波器、采用邻域加权平均的高斯滤波和维纳滤波。对图像进行线 性滤波可以去除图像中某些特定类型的噪声,如图像中的颗粒噪声, 高斯噪声、椒盐噪声等。对扫描得到的人脸图像根据其噪声类型一般 采用此种滤波方法。考虑滤波模板大小对滤波效果影响较大,仿真系 统选择算法时对同种滤波算法提供了不同模板大小的情况。 (2)中值滤波法中值滤波法是一种非线性滤波方法,它把像素 及其邻域中的像素按灰度级进行排序, 然后选择该组的中间值作为输 出像素值。 中值滤波方法的最大优点是抑制噪声效果明显且能保护边 界。对于使用基于整体的人脸识别算法的系统中,由于失掉小区域的 细节对特征提取影响较小,所以这种滤波方法最受欢迎。 (3)自适应滤波自适应滤波能够根据图像的局部方差来调整滤 波器的输出,其滤波效果要优于线性滤波,同时可以更好地保存图像 的边缘和高频细节信息。 2)灰度变换 灰度变换是图像增强技术中的一种。通过灰度变换,可对原始图
27

像中的光照不均进行补偿, 使得待识别人脸图像遵循同一或相似的灰 度分布。只有这样,不同图像在特征提取和识别时才具有可比性。这 一过程,也被称作灰度归一化。常用在人脸识别系统中的灰度变换方 法主要有:基于图像统计特征的直方图均衡化、直方图规定化和灰度 均值方差标准化三种方法。 直方图均衡化和直方图规定化的灰度变换 原理和实现方法可由 matlab 仿真来实现。 三种灰度变换方法, 均能在一定程度上消除由于光照条件不同而 对人脸识别带来的影响。 故在仿真系统中提供了三种灰度变换效果比 较及选择界面,用户可根据需要选用。 3)边缘检测 对输入人脸图像进行边缘检测是很多人脸识别系统在人脸粗定 位及人脸主要器官(眼睛、鼻子、嘴巴)定位时采用的预处理方法。 边缘检测的方法有很多,主要有:微分算子法、Sobel 算子法、拉普 拉斯算子法、canny 算子法等。每种算子对不同方向边缘的检测能力 和抑制噪声的能力都不同。所以,和灰度变换及滤波去噪部分的设计 思路相同,在仿真系统中,笔者给出了 canny、sobel、log、prewitt 四种算子在不同灰度阈值下、不同方向的边缘检测算法,使用者可从 检测结果中加以比较、 选择合适的算法。 图像类型转换、 图像二值化、 尺寸归一化也是一些人脸识别系统中经常使用的预处理方法。 为了在 不修改其他算法的基础上,扩大系统处理图像的类型和范围,将输入 图像首先转换为统一的类型,是多数人脸图像预处理中的第一步。在 本仿真系统中通过调用 MATLAB 中提供的各种图像类型转换函数来
28

实现 TIF、JPG 转换为 BMP 格式及彩色到灰度图像的转换;对图像 二值化,采用了 graythresh()函数来自动选择阈值的二值化方法[1]; 尺寸归一化采用的算法是对人脸图像进行剪裁和尺寸缩放, 实现去除 大部分头发、服饰和背景的干扰并将人脸图像大小统一。

第四章 基于直方图的人脸识别实现 4.1 识别理论 用灰度直方图增强图像对比度是基于图像灰度值统计的一种重 要方法,它以概率论为基础的,常用的实现算法主要是直方图均衡化和 直方图规定化。 直方图均衡化主要用于增强动态范围较小的图像的反差,基本思 想是把原始图的直方图变换为均匀分布的形式,这样就增强了像素灰 度值的动态范围,从而达到增强图像整体对比度的效果。直方图均衡 化的优点是能自动地增强整个图像的对比度,但它的具体的增强效果 不好控制,处理的结果总是得到全局均衡化的直方图。实际中有时需 要变换直方图使之成为某个需要的形状,从而有选择地增强某个灰度 值范围内的对比度或使图像灰度值的分布满足特定的要求,这时可以 采用比较灵活的直方图规定化方法。 4.2 人脸识别的 matlab 实现 实现结果如图 4.1 和 4.2
29

图 4.1 用户界面 现结果 4.3 本章小结

图 4.2 实

在过去十年中基于直方图方法证其明简单性和有用性。 最初这 种想法基于颜色直方图。 此算法提供我们的建议技术名为"直方图处 理人脸识别"的第一部分。同时使用灰度图像。 第一,每个灰度级的 频率是计算并存储在媒介作进一步处理。 第二,平均从存储载体的 连续九个频率的计算,并存储在另一个载体,供以后使用,在测试阶 段。 此均值向量用于计算平均值的曾受训练的图像和测试图像绝 识别的准确

对差异。 最后确定最小差异的图像与测试图像匹配, 性是 99.75%

30

第五章 结语 基于 matlab 数字图像处理与识别系统其实是一个范围很大的应 用系统,作者在此只是有针对性、有选择地进行了一些开发和实现。 该系统的主要功能模块共有二个: 1) ( 数字图像处理的基本方法; (2)人脸识别。 在“数字图像处理的基本方法”这一部分,用到的一些基本方 法和一些最常用的处理方法来实现图像预处理,如格式转换,灰度变 化和滤波锐化。仅就这一部分而言,就有很多可以继续完成的工作, 可将其它一些数字图像处理方法进一步加以实现,如图像的平滑,图 像矩阵的变换(K-L 变换、Fourier 变换、小波变换等) ,图像的膨胀 腐蚀、图像的几何变换(平移、旋转、缩放等) ,以及各种编码图像 的读写与显示。仅这一部分即可形成一个专用的图像处理平台。
31

关于“人脸识别” ,在了解了人脸识别的各种方法后,选择了图 像直方图差值比较进行了实现。该方法能较好地实现人脸的分类,但 对人脸图像的要求较高,目前仅是采用 Orl 的标准人脸库中的图像来 进行测试,因此能获得较高的识别率。而在现实生活中采集到的人脸 图像则会受到很多因素的影响,识别率就未必能达到要求了。若要进 一步提高识别率和适用范围,则还需要结合其它算法,如 PCA、神 经网络等。

致谢 在××大学的学习生活即将结束,在做毕业设计的这段时间里, 我的老师、同学、朋友和家人给予了我无微不至的关心,毫无保留的 指导和耐心细致的帮助,借此毕业论文完成之际,谨向他们致以我最 真诚的感谢! 首先,我衷心感谢我的导师林森老师。林老师学识渊博、治学严 谨、平易近人,他以其宽广的视野、敏锐的洞察力、严谨的治学态度 在学术上给了我悉心的指导。论文进展并不顺利时,是林老师以长者 的仁爱胸怀对我表示了理解,不仅帮我指正了论文的方向,而且为我 提供了大量的参考文献和网页论坛, 导师勤勉的敬业精神和一丝不苟 的工作态度使我深深感动,这将是我一生工作和学习的好榜样。
32

其次,我还要特别感谢我的同学范红杰以及杜锋,他们不仅为我 提供了部分MATLAB编程代码, 还细心的给我讲解了代码的含义, 让 我对我的课题有了更加深入的了解。 最后,我要感谢我的父母和家人,他们这么多年来一直给我以无 私的关爱和支持,浓浓的亲情和期盼都是我学习的动力和源泉。 再次真心的感谢所有关心爱护我的良师益友和亲人们

参考文献 祝磊,朱善安.人脸识别的一种新的特征提取方法[J].计算机学

[1]

报,2007,34(6):122-1251 [2] 何东风,凌捷.人脸识别技术综述[J].计算机学报,2003,13(12) 75-78 [3] ,Younus Fazl-e-Basit Javed 和 Usman Qayyum”,采用直方图的人 脸识别和处理”,第三阶段仅相关新兴技术研报告。 [4] 何国辉, 甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像 图形学报,2006,32(19):208-211.
33

[5] 王聃,贾云伟,林福严.人脸识别系统中的特征提取[J].自动化学 报,2005,21(7-3). [6] 张俭鸽,王世卿,盛光磊.基于小波和 DFB-PCA 的人脸识别算法 研究[J].自动化学报,2007,23(2-1). [7] 曹林,王东峰,刘小军,邹谋炎.基于二维 Gabor 小波的人脸识 别算法[J].电子学报,2006,28(3)490-494 [8] 焦峰,山世光,崔国勤,高文,李锦涛.基于局部特征分析的人脸 识别方法[J].自动化学报,2003,15(1):53-58 [9] Wangmeng Zuo,Kuanquan Wang,David Zhang,Hongzhi Zhang. Combination of two novel LDA-based methods for face

recognition[C].Proceedings of the IEEE,2007:735-742 [10] 徐倩,邓伟.一种融合两种主成分分析的人脸识别方法[J].计算机 学报,2007,43(25):195-197 [11] 刘贵喜,杨万海.基于小波分解的图像融和方法及性能评价[J].

自动化学报,2002,28(6):927-934 [12] 周嫔,马少平,苏中.多分类器合成方法综献[J].自动化学报,

2000,28(1):122-124 [13] 王蕴红,范伟,谭铁牛.融合全局与局部特征的子空间人脸识别 算法[J].电子学报,2005,28(10):1657-1662 [14] 庄哲民, 张阿妞, 李芬兰.基于优化的LDA算法人脸识别研究[J]. 中国图像图形学报,2007,29(9):2047-2049 [15] 钟向阳.基于Gabor小波的人脸识别系统的实现[J].中国图像图
34

形学报,2005,23(3) [16] 张燕昆,刘重庆.一种新颖的基于LDA的人脸识别方法[J].自动 化学报,2003,22(5):327-330

附录

人脸识别 matlab 程序

function varargout = FR_Processed_histogram(varargin) %这种算法是基于直方图处理的方法
35

%The histogram of image is calculated and then bin formation is done on the %basis of mean of successive graylevels frequencies. The training is done on odd images of 40 subjects (200 images out of 400 images)

%The results of the implemented algorithm is 99.75 (recognition fails on image number 4 of subject 17) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ...

'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @FR_Processed_histogram_OpeningFcn, ... 'gui_OutputFcn', @FR_Processed_histogram_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end []);

if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
36

else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT

%-------------------------------------------------------------------------% --- Executes just before FR_Processed_histogram is made visible. function FR_Processed_histogram_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject % eventdata MATLAB % handles % varargin (see VARARGIN) structure with handles and user data (see GUIDATA) command line arguments to FR_Processed_histogram handle to figure reserved - to be defined in a future version of

%

Choose

default

command

line

output

for

FR_Processed_histogram handles.output = hObject;

% Update handles structure
37

guidata(hObject, handles);

% UIWAIT makes FR_Processed_histogram wait for user response (see UIRESUME) % uiwait(handles.figure1); global total_sub train_img sub_img max_hist_level bin_num form_bin_num;

total_sub = 40; train_img = 200; sub_img = 10; max_hist_level = 256; bin_num = 9; form_bin_num = 29; %-------------------------------------------------------------------------% --- Outputs from this function are returned to the command line. function varargout = FR_Processed_histogram_OutputFcn(hObject, eventdata, handles) % varargout VARARGOUT); % hObject % eventdata handle to figure reserved - to be defined in a future version of
38

cell array for returning output args (see

MATLAB % handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure varargout{1} = handles.output;

%-------------------------------------------------------------------------% --- Executes on button press in train_button. function train_button_Callback(hObject, eventdata, handles) % hObject % eventdata MATLAB % handles structure with handles and user data (see GUIDATA) handle to train_button (see GCBO) reserved - to be defined in a future version of

global train_processed_bin; global total_sub train_img sub_img max_hist_level bin_num form_bin_num;

train_processed_bin(form_bin_num,train_img) = 0; K = 1; train_hist_img = zeros(max_hist_level, train_img);

39

for Z=1:1:total_sub for X=1:2:sub_img each subject %%%train on odd number of images of

I = imread( strcat('ORL\S',int2str(Z),'\',int2str(X),'.bmp') ); [rows cols] = size(I);

for i=1:1:rows for j=1:1:cols if( I(i,j) == 0 ) train_hist_img(max_hist_level, train_hist_img(max_hist_level, K) + 1; else train_hist_img(I(i,j), K) = train_hist_img(I(i,j), K) + 1; end end end K = K + 1; end end K) =

40

[r c] = size(train_hist_img); sum = 0; for i=1:1:c K = 1; for j=1:1:r if( (mod(j,bin_num)) == 0 ) sum = sum + train_hist_img(j,i); train_processed_bin(K,i) = sum/bin_num; K = K + 1; sum = 0; else sum = sum + train_hist_img(j,i); end end train_processed_bin(K,i) = sum/bin_num; end

display ('Training Done') save 'train' train_processed_bin;

%-------------------------------------------------------------------------% --- Executes on button press in Testing_button.
41

function Testing_button_Callback(hObject, eventdata, handles) % hObject % eventdata MATLAB % handles structure with handles and user data (see GUIDATA) handle to Testing_button (see GCBO) reserved - to be defined in a future version of

global train_img max_hist_level bin_num form_bin_num; global train_processed_bin; global filename pathname I

load 'train' test_hist_img(max_hist_level) = 0; test_processed_bin(form_bin_num) = 0;

[rows cols] = size(I);

for i=1:1:rows for j=1:1:cols if( I(i,j) == 0 ) test_hist_img(max_hist_level) test_hist_img(max_hist_level) + 1; else
42

=

test_hist_img(I(i,j)) = test_hist_img(I(i,j)) + 1; end end end

[r c] = size(test_hist_img); sum = 0;

K = 1; for j=1:1:c if( (mod(j,bin_num)) == 0 ) sum = sum + test_hist_img(j); test_processed_bin(K) = sum/bin_num; K = K + 1; sum = 0; else sum = sum + test_hist_img(j); end end

test_processed_bin(K) = sum/bin_num;

43

sum = 0; K = 1;

for y=1:1:train_img for z=1:1:form_bin_num sum = sum + abs( test_processed_bin(z) -

train_processed_bin(z,y) ); end img_bin_hist_sum(K,1) = sum; sum = 0; K = K + 1; end

[temp M] = min(img_bin_hist_sum); M = ceil(M/5); getString_start=strfind(pathname,'S'); getString_start=getString_start(end)+1; getString_end=strfind(pathname,'\'); getString_end=getString_end(end)-1;

subjectindex=str2num(pathname(getString_start:getString_end));

44

if (subjectindex == M) axes (handles.axes3) %image no: 5 is shown for visualization purpose imshow(imread(STRCAT('ORL\S',num2str(M),'\5.bmp'))) msgbox ( 'Correctly Recognized'); else display ([ 'Error==> num2str(subjectindex) ' num2str(M)]) axes (handles.axes3) %image no: 5 is shown for visualization purpose imshow(imread(STRCAT('ORL\S',num2str(M),'\5.bmp'))) msgbox ( 'Incorrectly Recognized'); end Testing Image of Subject >>'

matches with the image of subject >> '

display('Testing Done') %-------------------------------------------------------------------------function box_Callback(hObject, eventdata, handles) % hObject % eventdata MATLAB % handles structure with handles and user data (see GUIDATA)
45

handle to box (see GCBO) reserved - to be defined in a future version of

% Hints: get(hObject,'String') returns contents of box as text % as a double str2double(get(hObject,'String')) returns contents of box

%-------------------------------------------------------------------------% --- Executes during object creation, after setting all properties. function box_CreateFcn(hObject, eventdata, handles) % hObject % eventdata MATLAB % handles called empty - handles not created until after all CreateFcns handle to box (see GCBO) reserved - to be defined in a future version of

% Hint: edit controls usually have a white background on Windows. % if See ISPC and COMPUTER. ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %-------------------------------------------------------------------------% --- Executes on button press in Input_Image_button.
46

function Input_Image_button_Callback(hObject, eventdata, handles) % hObject % eventdata MATLAB % handles structure with handles and user data (see GUIDATA) handle to Input_Image_button (see GCBO) reserved - to be defined in a future version of

global filename pathname I [filename, pathname] = uigetfile('*.bmp', 'Test Image'); axes(handles.axes1) imgpath=STRCAT(pathname,filename);

I = imread(imgpath); imshow(I)

%-------------------------------------------------------------------------% --- Executes during object creation, after setting all properties. function axes3_CreateFcn(hObject, eventdata, handles) % hObject % eventdata MATLAB % handles called empty - handles not created until after all CreateFcns handle to axes3 (see GCBO) reserved - to be defined in a future version of

47

% Hint: place code in OpeningFcn to populate axes3 %Programmed by Usman Qayyum

48


相关文章:
人脸识别系统设计与仿真 基于matlab的(含matlab源程序)版权不归自己 交流使用
人脸识别系统设计与仿真 基于matlab的(含matlab源程序)版权不归自己 交流使用_信息与通信_工程科技_专业资料。人脸识别系统设计与仿真 基于matlab的(含matlab源程序)...
【毕业论文】基于matlab的人脸识别系统设计与仿真(含matlab源程序)
【毕业论文】基于matlab的人脸识别系统设计与仿真(含matlab源程序)_工学_高等教育_教育专区。基于 matlab 的人脸识别系统设计与仿真 第一章 绪论 本章提出了本文的...
基于matlab的人脸识别系统设计与仿真
基于matlab的人脸识别系统设计与仿真_信息与通信_工程科技_专业资料。毕业论文人脸...- 18 - - II - 人脸识别方法的分析与研究 摘要人脸识别是当前模式识别领域的...
【毕业论文】基于matlab的人脸识别系统设计与仿真(含matlab源程序)
【毕业论文】基于matlab的人脸识别系统设计与仿真(含matlab源程序)_信息与通信_...同时,进行人脸图像识别研究也具有很大的使用价依。如同人的 指纹一样,人脸也...
基于matlab的人脸识别系统设计与仿真
基于matlab 的人脸识别系统设计与仿真(含 matlab 源...同时,进行人脸图像识别研究也具有很大的使用 价依。...换、图像二值化、边缘检测、尺寸归一化、灰度归. ...
【毕业论文】基于matlab的人脸识别系统设计与仿真
【毕业论文】基于matlab的人脸识别系统设计与仿真_工学_高等教育_教育专区。。。...同时,进行人脸图像识别研究也具有很大的使用价依。如同 2 人的指纹一样, 人脸...
基于matlab的人脸识别系统
基于matlab的人脸识别系统_计算机软件及应用_IT/计算机_专业资料。jiyu基于人脸识别的系统设计山东工商学院 本科生毕业论文( 2012 届) 学生姓名 院(部) 专业 赵士超...
基于MATLAB的人脸识别系统研究与实现
27 基于 MATLAB 的人脸识别系统的研究与实现 摘 要 人脸识别是模式识别和图像处理等学科的一个研究热点,它广泛应用在身份验证、 刑侦破案、视频监视、机器人智能化...
基于直方图差值比较的人脸识别系统(matlab)附详细程序代码
基于直方图差值比较的人脸识别系统(matlab)附详细程序代码_理学_高等教育_教育专区。毕业设计,人脸识别系统,详细程序代码,基于matlab仿真环境下的北方...
更多相关标签:
单片机仿真图及源程序 | 仿真人脸面具 | 仿真人脸 | 仿真产品能申请版权吗 | 错妃夜不归 | 花飞尽 归不归 | 穿越之华山江不归 | 久假不归 |