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

人脸识别matlab


目录 第一章 绪论 .................................................................................................................................... 1 1.1 研究背景......................................

..................................................................................... 1 1.2 人脸图像识别的应用前景 ................................................................................................ 2 1.3 本文研究的问题 ................................................................................................................ 3 1.4 识别系统构成 ................................................................................................................... 3 1.5 论文的内容及组织 ............................................................................................................ 4 第二章 图像处理的 Matlab 实现 ................................................................................................... 5 2.1 Matlab 简介 ........................................................................................................................ 5 2.2 数字图像处理及过程 ........................................................................................................ 5 2.2.1 图像处理的基本操作 .............................................................................................. 5 2.2.2 图像类型的转换 ...................................................................................................... 6 2.2.3 图像增强 .................................................................................................................. 6 2.2.4 边缘检测 .................................................................................................................. 7 2.3 图像处理功能的 Matlab 实现实例 .................................................................................. 7 2.4 本章小结......................................................................................................................... 10 第三章 人脸图像识别计算机系统............................................................................................... 10 3.1 引言................................................................................................................................. 10 3.2 系统基本机构 .................................................................................................................. 11 3.3 人脸检测定位算法 .......................................................................................................... 12 3.4 人脸图像的预处理 ......................................................................................................... 17 3.4.1 仿真系统中实现的人脸图像预处理方法 ........................................................... 18 第四章 基于直方图的人脸识别实现 ........................................................................................... 20 4.1 识别理论........................................................................................................................... 20 4.2 人脸识别的 matlab 实现 ................................................................................................. 20 4.3 本章小结......................................................................................................................... 21 第五章 总结 .................................................................................................................................. 21 致谢 ................................................................................................................................................ 22 参考文献 ........................................................................................................................................ 23 附录 ................................................................................................................................................ 24

第一章 绪论
本章提出了本文的研究背景及应用前景.首先阐述了人脸图像识别意义;然 后介绍了人脸图像识别研究中存在的问题; 接着介绍了自动人脸识别系统的一般 框架构成;最后简要地介绍了本文的主要工作和章节结构.

1.1 研究背景
自 70 年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐 渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领 域,.这一领域除了它的重大理论价值外,也极具实用价值. 在进行人工智能的研究中, 人们一直想做的事情就是让机器具有像人类一样 的思考能力,以及识别事物,处理事物的能力,因此从解剖学,心理学,行为感 知学等各个角度来探求人类的思维机制,以及感知事物,处理事物的机制,并努 力将这些机制用于实践,如各种智能机器人的研制.人脸图像的机器识别研究就 是在这种背景下兴起的,因为人们发现许多对于人类而言可以轻易做到的事情, 而让机器来实现却很难,如人脸图像的识别,语音识别,自然语言理解等.如果 能够开发出具有像人类一样的机器识别机制, 就能够逐步地了解人类是如何存储 信息,并进行处理的,从而最终了解人类的思维机制. 同时,进行人脸图像识别研究也具有很大的使用价依.如同人的指纹一样, 人脸也具有唯一性,也可用来鉴别一个人的身份.现在己有实用的计算机自动指 纹识别系统面世,并在安检等部门得到应用,但还没有通用成熟的人脸自动识别 系统出现.人脸图像的自动识别系统较之指纹识别系统,DNA 鉴定等更具方便 性,因为它取样方便,可以不接触目标就进行识别,从而开发研究的实际意义更 大.并且与指纹图像不同的是,人脸图像受很多因素的干扰:人脸表情的多样性; 以及外在的成像过程中的光照,图像尺寸,旋转,姿势变化等.使得同一个人,

1

在不同的环境下拍摄所得到的人脸图像不同,有时更会有很大的差别,给识别带 来很大难度.因此在各种干扰条件下实现人脸图像的识别,也就更具有挑战性. 国外对于人脸图像识别的研究较早,现己有实用系统面世,只是对于成像条 件要求较苛刻,应用范围也就较窄,国内也有许多科研机构从事这方而的研究, 并己取得许多成果.

1.2 人脸图像识别的应用前景
人脸图像识别除了具有重大的理论价值以及极富挑战性外, 还其有许多潜在 的应用前景,利用人脸图像来进行身份验证,可以不与目标相接触就取得样本图 像,而其它的身份验证手段,如指纹,眼睛虹膜等必须通过与目标接触或相当接 近来取得样木,在某些场合,这些识别手段就会有不便之处. 就从目前和将来来看,可以预测到人脸图像识别将具有广阔的应用前景,如 表 1-1 中所列举就是其中已经实现或逐步完善的应用.
表 1-1 人脸识别的应用 应用 信信用卡,汽车驾照, 护照以及个人身份验证等 优点 图像摄取可控 图像分割可控 图像质量好 嫌疑犯照片匹配 图像质量不统一 多幅图像可用 互联网应用 与 银行/储蓄安全 监控效果好 图像分割不可控 图像质量较差 人群监测 图像质量高 可利用摄像图像 图像分割自由 图像质量低,实时性 视频信息价值高多人参 存在虚假 潜在的巨大图像库 存在问题 需要建立庞大的数据库

2

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

1.4 识别系统构成
人类似乎具有"与生俱来"的人脸识别能力,赋予计算机同样的能力是人类 的梦想之一,这就是所谓的"人脸识别"系统.假设我们把照相机,摄像头,扫 描仪等看作计算机的"眼睛" ,数字图像可以看作计算机观察到的"影像" ,那么 AFR 赋予计算机根据其所"看到"的人脸图片来判断人物身份的能力. 广义的讲,自动人脸识别系统具有如图 1.1 所示的一般框架并完成相应功能 的任务.

人 脸 人 图 像 获 测 取 检 脸

特 人 征 提 取 识 别 脸

图 1.1 人脸识别系统一般框架

(1)人脸图像的获取 一般来说,图像的获取都是通过摄像头摄取,但摄取的图像可以是真人,也 可以是人脸的图片或者为了相对简单,可以不考虑通过摄像头来摄取头像,而是 直接给定要识别的图像.
3

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

1.5 论文的内容及组织
第二章主要介绍人脸识别系统中所用到的仿真软件 Matlab, 介绍了在人脸图 像识别过程中所需要的图像处理技术,包括:一些基本操作,格式转换,图像增 强等.并做了一个 Matlab 图像处理功能的实例 第三章主要始涉三个方面:首先是对人脸识别系统的构成做详细论述;其次 就是对人脸识别过程中的关键环节人脸检测,特征提取和图像预处理做详细介 绍;最后就是 Matlab 在人脸识别系统中的具体应用,即人脸图像识别的具体技 术,并用 Matlab 进行仿真试验并得到结果.
4

第四章是对人脸图像识别体系构架的设计, 并给出了人脸识别用到的理论知 识即直方图差异对比,并编写 matlab 代码实现人脸图像识别. 第五章总结了全文的工作并对以后的需要进一步研究的问题进行了展望.

第二章 图像处理的 Matlab 实现
2.1 Matlab 简介
由 Math Work 公司开发的 Matlab 语言语法限制不严格,程序设计自由度大, 程序的可移植性好. Matlab 还推出了功能强大的适应于图像分析和处理的工具箱, 常用的有图像处理工具箱,小波分析工具箱及数字信号处理工具箱.利用这些工 具箱,我们可以很方便的从各个方面对图像的性质进行深入的研究.Matlab 图像 处 理 工 具 箱 支 持 索 引 图 像 , RGB 图 像 , 灰 度 图 像 , 二 进 制 图 像 并 能 操 作.bmp,.jpg,.tif 等多种图像格式文件.

2.2 数字图像处理及过程
图像是人类获取信息,表达信息和传递信息的重要手段.利用计算机对图像 进行去除噪声,增强,复原,分割,提取特征等的理论,方法和技术称为数字图 像处理.数字图像处理技术已经成为信息科学,计算机科学,工程科学,地球科 学等诸多方面的学者研究图像的有效工具.数字图像处理主要包括图像变换,图 像增强,图像编码,图像复原,图像重建,图像识别以及图像理解等内容.

2.2.1 图像处理的基本操作
读取和显示图像可以通过 imread()和 imshow()来实现;图像的输出用 imwrite() 函数就可以很方便的把图像输出到硬盘上;另外还可以用 imcrop(),imrisize(), imrotate()等来实现图像的裁剪,缩放和旋转等功能.

5

2.2.2 图像类型的转换
Matlab 支持多种图像类型,但在某些图像操作中,对图像的类型有要求,所以 要涉及到对图像类型进行转换.Matlab7.0 图像处理工具箱为我们提供了不同图 像 类 型 相 互 转 换 的 大 量 函 数 , 如 mat2gray() 函 数 可 以 将 矩 阵 转 换 为 灰 度 图 像,rgb2gray()转换 RGB 图像或颜色映像表为灰度图像.在类型转换的时候,我们 还经常遇到数据类型不匹配的情况,针对这种情况,Matlab7.0 工具箱中,也给我们 提供了各种数据类型之间的转换函数,如 double()就是把数据转换为双精度类型 的函数.

2.2.3 图像增强
图像增强的目的是为了改善图像的视觉效果,提高图像的清晰度和工艺的适 应性,以及便于人与计算机的分析和处理,以满足图像复制或再现的要求.图像增 强的方法分为空域法和频域法两大类,空域法主要是对图像中的各个像素点进行 操作;而频域法是在图像的某个变换域内对整个图像进行操作,并修改变换后的系 数,如傅立叶变换,DCT 变换等的系数,然后再进行反变换,便可得到处理后的图 像.下面以空域增强法的几种方法加以说明. (1).灰度变换增强 有多种方法可以实现图像的灰度变换,其中最常用的就是直方图变换的方法, 即直方图的均衡化. 这种方法是一种使输出图像直方图近似服从均匀分布的变换 算法. Matlab7.0 图像处理工具箱中提供了图像直方图均衡化的具体函数 histeq(), 同时我们可以用函数 imhist()函数来计算和显示图像的直方图. (2).空域滤波增强 空域滤波按照空域滤波器的功能又可分为平滑滤波器和锐化滤波器. 平滑滤 波器可以用低通滤波实现,目的在于模糊图像或消除噪声;锐化滤波器是用高通滤 波来实现,目的在于强调图像被模糊的细节.在 Matlab 中,各种滤波方法都是在空 间域中通过不同的滤波算子实现,可用 fspecial()函数来创建预定义的滤波算子,然 后可以使用 imfilter()或 filter2()函数调用创建好的滤波器对图像进行滤波.

6

2.2.4 边缘检测
数字图像的边缘检测是图像分割,目标区域识别,区域形状提取等图像分析 领域十分重要的基础,也是图像识别中提取图像特征的一个重要属性.边缘检测 算子可以检查每个像素的邻域并对灰度变化率进行量化,也包括对方向的确定,其 中大多数是基于方向导数掩模求卷积的方法.常用的有 Sobel 算子,Prewitt 算 子,Roberts 算子,Log 算子等. Matlab7.0 工具箱中提供的 edge()函数可以进行边缘 检测,在其参数里面,可以根据需要选择合适的算子及其参数.

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)灰度图像直方图均衡化

7

通过比较原图和直方图均衡化后的图像可见,图像变得更清晰,而且均衡化后 的直方图比原直方图的形状更理想.该部分的程序代码如下: 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 均衡化前后的直方图对比图

(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);
8

h=fspecial('gaussian',2,0.05);j2=imfilter(i,h);figure,subplot(1,2,1),imshow(i) subplot(1,2,2),imshow(j2)

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

加入噪声的图像

滤波后的图像

图 2.4 平滑滤波效果

原灰度图像

锐化后的图像

图 2.5 锐化滤波效果图

3)边缘检测 Matlab7.0 图像处理工具箱提供了 edge()函数实现边缘检测,还 有各种方法算子供选择,在本实例中采用了 canny 算子来进行边缘检 测,
9

程序代码如下: i=imread('f:face.tif'); j=edge(i,'canny',[0.04,0.25],1.5); imshow(j) 效果图如图 2.6:

原灰度图像

边缘检测后的图像

图 2.6 边缘检测效果图

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

第三章 人脸图像识别计算机系统
3.1 引言
计算机人脸识别是一个非常活跃的研究领域,因其在公安刑侦破案,银行密 码系统,计算机安全系统以及动态监视系统等方面都有广泛应用,已成为当前模 式识别,计算机视觉领域的研究热点.人脸识别系统一般包括人脸检测与定位,

10

人脸图像预处理,特征提取和匹配识别四个组成部分.其中,人脸图像预处理, 作为特征提取和识别的前提步骤,是计算机人脸识别系统中的必要环节.其目的 是在去除噪声, 加强有用信息, 对输入设备或其他因素造成的退化现像进行复原, 为后续的特征提取和识别作准备. 不同的人脸识别系统根据其采用的图像来源和识别算法需要不同, 采用的预 处理方法也不同.常用的人脸图像预处理方法有:滤波去噪,灰度变换,图像二 值化,边缘检测,尺寸归一化,灰度归一化等.用在同一系统中的可能只有其中 一种或几种预处理方法,但一旦库中采集到的原始图像质量发生较大变化(如人 脸大小,光照强度,拍摄条件,成像系统等方面变化) ,原有的预处理模块便不 能满足特征提取的需要,还要更新,这是极不方便的. 鉴于此,作者在总结分析了灰度变换,滤波去噪,边缘检测三种广泛应用于 不同人脸识别系统中的预处理方法基础上, 设计了一个通用的人脸图像预处理仿 真系统.该系统可对不同条件下的原始图像进行相应的预处理.如,用户可根据 需要选择使用不同的滤波方法去除噪声,不同的边缘检测算子检测人脸边缘,选 择不同的灰度变换算法实现图像的灰度校正和灰度归一化, 仿真系统同时还实现 了尺寸归一化,二值化等其他常用的图像预处理算法.

3.2 系统基本机构
人脸识别是一个复杂的过程,一个计算机人脸识别的流程如图 3-1 所示.它 包括几个步骤:对采集到的图像,首先进行人脸检测(在输入图像中寻找人脸) , 给出人脸有无的结果;然后进行人脸定位,确定人脸的位置并提取出来.对人脸 的定位在输入是图像序列时一般也称之为人脸跟踪.通常检测和定位结合进行. 对提取出来的人脸借助人脸描述就可以进行(狭义的)人脸识别,即通过提取特 征来确定其身份.

11

图 3.1 基本框架图

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

出区域,使用椭圆拟合各个区域,根据椭圆长短轴的比率判断是否为人脸. 模板匹配的方法一般是人为地先定义一个标准人脸模板, 计算输入图像与模 板的似然度; 然后, 确定一个似然度阈值, 用以判断该输入图像中是否包含人脸. 标准人脸模板可以是固定的样板,也可以是带参变量的曲线函数. 基于先验知识的方法则采用符合人脸生理结构特征的人脸镶嵌图(mosaic image)模型,并在分析了足够多的人脸图像样本的基础上,针对人脸的灰度, 边缘, 纹理等信息, 建立一种关于人脸的知识库. 在检测中, 首先抽取这些灰度, 边缘等信息,然后检验它是否符合知识库中关于人脸的先验知识. 以上三种方法的优缺点比较见表 3-1.

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

基于隐式特征的方法将人脸区域看成一类模式, 使用大量 "人脸" , "非人脸" 样本训练,构造分类器,通过判别图像中所有可能区域是否属于"人脸模式"的 方法来实现人脸检测. 这类方法有: 特征脸法, 人工神经网络法, 支持向量机法; 积分图像法. 特征脸法(eigenface)把单个图像看成一维向量,众多的一维向量形成了人 脸图像特征空间,再将其变换到一个新的相对简单的特征空间,通过计算矩阵的
13

特征值和特征向量,利用图像的代数特征信息,寻找"人脸""非人脸"两种模 , 式在该特征空间中的分布规律. 人工神经网络(Artificial Neural Network,ANN)的方法是通过训练一个网 络结构,把模式的统计特性隐含在神经网络的结构和参数之中.基于人工神经网 络的方法对于复杂的,难以显式描述的模式,具有独特的优势. 支撑向量机(Support Vector Machine,SVM)法是在统计学习理论基础上发 展出的一种新的模式识别方法,它基于结构风险最小化的原理,较之于基于经验 风险最小化的人工神经网络, 一些难以逾越的问题, 模型选择和过学习问题, 如: 非线性和维数灾难问题,局部极小点问题等都得到了很大程度上的解决.但是直 接使用 SVM 方法进行人脸识别有两方面的困难:第一,训练时需要求解二次规 划问题计算复杂度高,内存需求量巨大;第二,在非人脸样本不受限制时,需要 极大规模的训练集合,得到的支持向量会很多,使得分类器的计算量过高. 基于积分图像(Integral Image)特征的人脸检测方法是 Viola 等新近提出的 一种算法,它综合使用了积分图像描述方法,Adaboost 学习算法及训练方法,级 联弱分类器. 以上四种方法的优缺点比较见表 3-2

表 3-2 基于隐式特征方法的特征 检测方法 本征脸法 算不涉及迭代耗费时间短 检测效率高,错误报警数目不多,训练 神经网络法 成熟的网络监测速度快 支撑向量机 机法 基于积分图 像分析法 比神经网络方法具有更好的泛化能力, 能对为观测到的例子进行有效分类 检测速度快,基本满足实时检测要求, 错误报警数目少时,检测率不高 检测效率可以与神经网络法比较 测错误报警数目多 "非人脸"样本复杂多样,造成支 持向量数目多,运算复杂度大 效率也增加了检测时间 多样本训练耗费时间多,但网络监 优点 标准人脸模板能抽象人脸全部信息,运 缺点与需要改进的地方 但模板检测效率低,多模板提高了

运用 matlab 仿真进行人脸检测定位实例:

14

人脸检测定位程序:
%%%%% Reading of a RGB image

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); pr=o*100/s; if pr<=100 BW(x1:x2, y1:y2)=0; r1=x1;r2=x2;s1=y1;s2=y2; pr1=0; end
15

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');

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;
16

rectangle('Position',[BB2(1,j-2),BB2(1,j-1),BB2(1,j),BB2(1,j+1)],'EdgeColor','r' )

原始图片

灰度图片

均衡化灰度图片

人脸定位

3.4 人脸图像的预处理
不同的人脸识别系统根据其采用的图像来源和识别算法需要不同, 采用的预 处理方法也不同.常用的人脸图像预处理方法有:滤波去噪,灰度变换,图像二 值化,边缘检测,尺寸归一化,灰度归一化等.用在同一系统中的可能只有其中 一种或几种预处理方法,但一旦库中采集到的原始图像质量发生较大变化(如人 脸大小,光照强度,拍摄条件,成像系统等方面变化) ,原有的预处理模块便不
17

能满足特征提取的需要,还要更新,这是极不方便的.鉴于此,作者在总结分析 了滤波去噪,边缘检测,灰度变换三种广泛应用于不同人脸识别系统中的预处理 方法基础上,设计了一个通用的人脸图像预处理仿真系统.该系统可对不同条件 下的原始图像进行相应的预处理.如,用户可根据需要选择使用不同的滤波方法 去除噪声,不同的边缘检测算子检测人脸边缘,选择不同的灰度变换算法实现图 像的灰度校正和灰度归一化,仿真系统同时还实现了尺寸归一化,二值化等其他 常用的图像预处理算法.

3.4.1 仿真系统中实现的人脸图像预处理方法 仿真系统中实现的人脸图像预处理方法
根据所查阅文献资料,常应用于人脸图像的预处理方法有:图像类型转换, 滤波去噪,灰度变换,边缘检测及二值化,尺寸归一化,灰度归一化等.作为通 用人脸图像预处理模块,要能够充分适应不同人脸库中图像在人脸大小,光照强 度,成像系统等方面的任意性和差异性,不能单独采用某种单一的滤波,灰度变 换和边缘检测方法.所以,在本仿真系统中,对上述的每种预处理方法全部加以 实现的同时,还对三种最常用预处理方法:滤波去噪,灰度变换,边缘检测,提 供了多种不同的具体算法供用户比较,选择之用. 1)滤波去噪 由于噪声给图像带来的失真和降质, 在特征提取之前采用滤波的方式来去除 噪声是实际人脸识别系统中所必须的步骤. 滤波的方法有很多, 如各种平滑滤波, 各种锐化滤波等,关于各种滤波方法的原理和分类可参考文献[2].下面对本文 实现的滤波方法及其选择依据加以说明. 在人脸图像预处理中使用较多的滤波是 平滑滤波,方法可分为以下三类:线性滤波,中值滤波,自适应滤波. (1)线性滤波最典型的线性滤波方法如,采用邻域平均法的均值滤波器, 采用邻域加权平均的高斯滤波和维纳滤波. 对图像进行线性滤波可以去除图像中 某些特定类型的噪声,如图像中的颗粒噪声,高斯噪声,椒盐噪声等.对扫描得 到的人脸图像根据其噪声类型一般采用此种滤波方法. 考虑滤波模板大小对滤波 效果影响较大,仿真系统选择算法时对同种滤波算法提供了不同模板大小的情 况. (2)中值滤波法中值滤波法是一种非线性滤波方法,它把像素及其邻域中
18

的像素按灰度级进行排序,然后选择该组的中间值作为输出像素值.中值滤波方 法的最大优点是抑制噪声效果明显且能保护边界. 对于使用基于整体的人脸识别 算法的系统中,由于失掉小区域的细节对特征提取影响较小,所以这种滤波方法 最受欢迎. (3) 自适应滤波自适应滤波能够根据图像的局部方差来调整滤波器的输出, 其滤波效果要优于线性滤波,同时可以更好地保存图像的边缘和高频细节信息. 2)灰度变换 灰度变换是图像增强技术中的一种.通过灰度变换,可对原始图像中的光照 不均进行补偿,使得待识别人脸图像遵循同一或相似的灰度分布.只有这样,不 同图像在特征提取和识别时才具有可比性.这一过程,也被称作灰度归一化.常 用在人脸识别系统中的灰度变换方法主要有:基于图像统计特征的直方图均衡 化,直方图规定化和灰度均值方差标准化三种方法.直方图均衡化和直方图规定 化的灰度变换原理和实现方法可由 matlab 仿真来实现. 三种灰度变换方法, 均能在一定程度上消除由于光照条件不同而对人脸识别 带来的影响.故在仿真系统中提供了三种灰度变换效果比较及选择界面,用户可 根据需要选用. 3)边缘检测 对输入人脸图像进行边缘检测是很多人脸识别系统在人脸粗定位及人脸主 要器官(眼睛,鼻子,嘴巴)定位时采用的预处理方法.边缘检测的方法有很多, 主要有:微分算子法,Sobel 算子法,拉普拉斯算子法,canny 算子法等.每种 算子对不同方向边缘的检测能力和抑制噪声的能力都不同.所以,和灰度变换及 滤波去噪部分的设计思路相同,在仿真系统中,笔者给出了 canny,sobel,log, prewitt 四种算子在不同灰度阈值下, 不同方向的边缘检测算法, 使用者可从检测 结果中加以比较,选择合适的算法.图像类型转换,图像二值化,尺寸归一化也 是一些人脸识别系统中经常使用的预处理方法.为了在不修改其他算法的基础 上,扩大系统处理图像的类型和范围,将输入图像首先转换为统一的类型,是多 数人脸图像预处理中的第一步.在本仿真系统中通过调用 MATLAB 中提供的各 种图像类型转换函数来实现 TIF,JPG 转换为 BMP 格式及彩色到灰度图像的转 换;对图像二值化,采用了 graythresh()函数来自动选择阈值的二值化方法[1];

19

尺寸归一化采用的算法是对人脸图像进行剪裁和尺寸缩放,实现去除大部分头 发,服饰和背景的干扰并将人脸图像大小统一.

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

4.2 人脸识别的 matlab 实现
实现结果如图 4.1 和 4.2

图 4.1 用户界面

图 4.2 实现结果
20

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

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

第五章 总结
基于 matlab 数字图像处理与识别系统其实是一个范围很大的应用系统,作 者在此只是有针对性,有选择地进行了一些开发和实现. 该系统的主要功能模块共有二个: (1)数字图像处理的基本方法; (2)人脸 识别. 在"数字图像处理的基本方法"这一部分,用到的一些基本方法和一些最 常用的处理方法来实现图像预处理,如格式转换,灰度变化和滤波锐化.仅就这 一部分而言,就有很多可以继续完成的工作,可将其它一些数字图像处理方法进 一步加以实现,如图像的平滑,图像矩阵的变换(K-L 变换,Fourier 变换,小波 变换等) ,图像的膨胀腐蚀,图像的几何变换(平移,旋转,缩放等) ,以及各种 编码图像的读写与显示.仅这一部分即可形成一个专用的图像处理平台. 关于"人脸识别" ,在了解了人脸识别的各种方法后,选择了图像直方图差 值比较进行了实现. 该方法能较好地实现人脸的分类, 但对人脸图像的要求较高, 目前仅是采用 Orl 的标准人脸库中的图像来进行测试, 因此能获得较高的识别率. 而在现实生活中采集到的人脸图像则会受到很多因素的影响, 识别率就未必能达 到要求了. 若要进一步提高识别率和适用范围, 则还需要结合其它算法, PCA, 如 神经网络等.

21

致谢

在辽宁工程技术大学的学习生活即将结束,在做毕业设计的这段时间里,我 的老师,同学,朋友和家人给予了我无微不至的关心,毫无保留的指导和耐心细 致的帮助,借此毕业论文完成之际,谨向他们致以我最真诚的感谢! 首先,我衷心感谢我的导师林森老师.林老师学识渊博,治学严谨,平易近 人,他以其宽广的视野,敏锐的洞察力,严谨的治学态度在学术上给了我悉心的 指导.论文进展并不顺利时,是林老师以长者的仁爱胸怀对我表示了理解,不仅 帮我指正了论文的方向,而且为我提供了大量的参考文献和网页论坛,导师勤勉 的敬业精神和一丝不苟的工作态度使我深深感动, 这将是我一生工作和学习的好 榜样. 其次,我还要特别感谢我的同学范红杰以及杜锋,他们不仅为我提供了部分 MATLAB编程代码, 还细心的给我讲解了代码的含义, 让我对我的课题有了更加 深入的了解. 最后,我要感谢我的父母和家人,他们这么多年来一直给我以无私的关爱和 支持,浓浓的亲情和期盼都是我学习的动力和源泉. 再次真心的感谢所有关心爱护我的良师益友和亲人们

22

参考文献
[1] 祝磊, 朱善安.人脸识别的一种新的特征提取方法[J].计算机学报, 2007, (6) 122-1251 34 : [2] 何东风,凌捷.人脸识别技术综述[J].计算机学报,2003,13(12)75-78 [3] ,Younus Fazl-e-Basit Javed 和 Usman Qayyum",采用直方图的人脸识别和处理",第三阶 段仅相关新兴技术研报告. [4] 何国辉,甘俊英.PCA-LDA算法在性别鉴别中的应用[J].中国图像图形学报,2006,32 (19):208-211. [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].中国图像图形学报,2005,23(3) [16] 张燕昆,刘重庆.一种新颖的基于LDA的人脸识别方法[J].自动化学报,2003,22(5): 327-330

23

附录
附录 A 人脸识别程序
function varargout = FR_Processed_histogram(varargin) %这种算法是基于直方图处理的方法 %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', 'gui_LayoutFcn', 'gui_Callback', if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end @FR_Processed_histogram_OutputFcn, ... [] , ... []);

if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT

24

%-------------------------------------------------------------------------% --- 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 % handles % varargin handle to figure reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) command line arguments to FR_Processed_histogram (see VARARGIN)

% Choose default command line output for FR_Processed_histogram handles.output = hObject;

% Update handles structure 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 % hObject cell array for returning output args (see VARARGOUT); handle to figure
25

% eventdata % handles

reserved - to be defined in a future version of MATLAB 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 % handles handle to train_button (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA)

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);

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

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, K) = train_hist_img(max_hist_level, K) + 1;
26

else train_hist_img(I(i,j), K) = train_hist_img(I(i,j), K) + 1; end end end K = K + 1; end end

[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;

%-------------------------------------------------------------------------27

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

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) = else test_hist_img(I(i,j)) = test_hist_img(I(i,j)) + 1; end end end test_hist_img(max_hist_level) + 1;

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

K = 1;
28

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;

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,'\');
29

getString_end=getString_end(end)-1; subjectindex=str2num(pathname(getString_start:getString_end));

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==> the image of subject >> ' Testing Image of Subject >>' num2str(subjectindex) ' matches with

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

display('Testing Done') %-------------------------------------------------------------------------function box_Callback(hObject, eventdata, handles) % hObject % eventdata % handles handle to box (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA)

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

%-------------------------------------------------------------------------% --- Executes during object creation, after setting all properties. function box_CreateFcn(hObject, eventdata, handles)
30

% hObject % eventdata % handles

handle to box (see GCBO) reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows. % See ISPC and COMPUTER.

if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end %-------------------------------------------------------------------------% --- Executes on button press in Input_Image_button. function Input_Image_button_Callback(hObject, eventdata, handles) % hObject % eventdata % handles handle to Input_Image_button (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA)

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 % handles handle to axes3 (see GCBO) reserved - to be defined in a future version of MATLAB empty - handles not created until after all CreateFcns called

31

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

32

相关文章:
基于MATLAB的人脸识别
燕山大学课程设计(论文)任务书院(系) :学号 设计题目 设计技术参数设计要求 基层教学单位: 学生姓名 基于 MATLAB人脸识别 测试数据库图片 10 张 训练数据库...
人脸识别matlab程序
人脸识别matlab程序_IT/计算机_专业资料。人脸识别 % FaceRec.m % PCA 人脸识别修订版,识别率 88% % calc xmean,sigma and its eigen decomposition allsamples...
人脸识别系统设计与仿真 基于matlab的(含matlab源程序)版权不归自己 交流使用
人脸识别系统设计与仿真 基于matlab的(含matlab源程序)版权不归自己 交流使用_信息与通信_工程科技_专业资料。人脸识别系统设计与仿真 基于matlab的(含matlab源程序)...
基于matlab的简单人脸识别程序代码
基于matlab的简单人脸识别程序代码_IT/计算机_专业资料。matlab人脸识别小程序 基于matlab的简单人脸识别实例简介人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的...
人脸识别matlab
本文在总结分析人脸识别系统中 几种常用的图像预处理方法基础上,利用 MATLAB 实现了一个集多种预处理方 法于一体的通用的人脸图像预处理仿真系统, 将该系统作为...
基于matlab的人脸识别源代码
基于matlab人脸识别源代码_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 基于matlab人脸识别源代码_计算机软件及应用_IT/计算机_...
基于matlab的人脸识别
('D:\Matlab 编程实例\pca 和 fisher 算法用于人脸识别\PCA_based Face Recognition System',... 'Select training database path' ); TestDatabasePath = ...
人脸识别matlab
人脸识别matlab_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档人脸识别matlab_计算机软件及应用_IT/计算机_专业资料。 目录 第一章 ...
基于matlab的人脸识别系统设计与仿真
基于matlab人脸识别系统设计与仿真_信息与通信_工程科技_专业资料。毕业论文人脸...- 18 - - II - 人脸识别方法的分析与研究 摘要人脸识别是当前模式识别领域的...
基于matlab的人脸识别技术及实现
基于matlab人脸识别技术及实现_信息与通信_工程科技_专业资料。基于matlab人脸识别技术及实现 本科毕业设计(论文) 人脸识别技术及实现 学专 院业 信息工程学院 ...
更多相关标签:
人脸识别 | 人脸识别matlab代码 | 人脸识别matlab程序 | pca人脸识别matlab | 人脸识别算法 | 人脸识别代码 | matlab摄像头人脸识别 | 人脸检测matlab |