机器学习概述课程设计报告(MATLAB人脸识别)
Matlab中的人脸识别算法

Matlab中的人脸识别算法概述人脸识别技术在当今社会得到了广泛的应用,它不仅可以用于身份验证和安全管理,也可以用于人脸表情识别、年龄估计等领域。
在这个领域中,Matlab作为一种常见的工具,在人脸识别算法的研究和应用中发挥着重要的作用。
本文将介绍Matlab中的人脸识别算法,包括基本原理、常见算法以及实际应用。
一、基本原理人脸识别算法的基本原理是通过分析人脸图像的特征来实现对人脸的识别。
首先,需要对输入的人脸图像进行预处理,包括图像的灰度化、归一化、去噪等。
然后,从图像中提取出特征向量,这些特征向量可以表示人脸的形状、纹理等特征。
最后,使用分类器对特征进行分类,确定输入图像中的人脸类别。
二、常见算法1. 主成分分析(Principal Component Analysis, PCA)PCA是一种常见的线性降维算法,它通过对输入图像进行主成分分析,将高维的人脸图像降低到低维的特征向量。
在Matlab中,可以使用pca函数实现PCA算法的应用。
该函数将输入图像矩阵转换为特征向量矩阵,然后根据特征向量的重要程度进行排序,选择重要的特征向量作为输入图像的特征。
2. 线性判别分析(Linear Discriminant Analysis, LDA)LDA是一种常见的线性分类算法,它在PCA的基础上引入了类别信息,通过最大化类间散度和最小化类内散度来实现降维和分类。
在Matlab中,可以使用lda 函数实现LDA算法的应用。
该函数根据输入图像的类别信息构建类别矩阵,然后计算投影矩阵,最后根据投影矩阵将输入图像映射到低维空间。
3. 非负矩阵分解(Nonnegative Matrix Factorization, NMF)NMF是一种近年来发展起来的非负矩阵分解算法,它具有很好的稀疏性和局部性质,适用于人脸图像的特征提取。
在Matlab中,可以使用nmf函数实现NMF算法的应用。
该函数将输入图像矩阵分解为非负的权重矩阵和特征矩阵,其中特征矩阵表示人脸的特征。
如何使用Matlab进行人脸检测和人脸识别

如何使用Matlab进行人脸检测和人脸识别人脸检测和人脸识别是计算机视觉领域中的重要技术应用,可以广泛用于人脸识别系统、人脸支付、安全监控等众多领域。
本文将介绍如何使用Matlab进行人脸检测和人脸识别。
1. 背景介绍人脸检测和人脸识别技术的出现,为计算机系统实现对人脸的自动分析和识别提供了可能。
人脸检测是指从一幅图像或视频序列中确定是否存在人脸,并找出人脸的位置和大小。
而人脸识别则是在检测到的人脸图像上进行特征提取和模式匹配,以实现对人脸的身份识别。
2. 人脸检测在Matlab中,可以使用Viola-Jones算法进行人脸检测。
该算法通过构造Haar特征与Adaboost集成学习算法相结合,能够在较短的时间内实现高效的人脸检测。
具体操作如下:2.1 加载图像首先,在Matlab中加载需要进行人脸检测的图像。
可以使用imread函数进行图像加载,并将其转换为灰度图像进行处理。
例如:```Matlabimage = imread('face.jpg');gray_image = rgb2gray(image);```2.2 构建人脸检测器在Matlab中,可以使用vision.CascadeObjectDetector对象构建人脸检测器。
该对象可以通过Viola-Jones算法进行人脸检测。
具体代码如下:```MatlabfaceDetector = vision.CascadeObjectDetector();bbox = step(faceDetector, gray_image);```2.3 显示检测结果最后,可以使用insertObjectAnnotation函数将检测到的人脸位置在原始图像上标记出来。
代码示例如下:```Matlabdetected_image = insertObjectAnnotation(image, 'rectangle', bbox, 'Face');imshow(detected_image);```3. 人脸识别在Matlab中,可以使用基于人脸特征的Eigenface、Fisherface和LBPH等算法进行人脸识别。
(完整word版)基于MATLAB的人脸识别

图像识别题目:基于MATLAB的人脸识别院系:计算机科学与应用系班级:姓名:学号:日期:目录引言 (1)1 人脸识别技术 (2)1.1人脸识别的研究内容 (2)1.1.1人脸检测(Face Detection) (2)1.1.2人脸表征(Face Representation) (2)1.2几种典型的人脸识别方法 (3)1.2.1基于几何特征的人脸识别方法 (3)1.2.2基于K-L变换的特征脸方法 (4)1.2.3神经网络方法 (4)1.2.4基于小波包的识别方法 (5)1.2.5支持向量机的识别方法 (5)2 人脸特征提取与识别 (5)2.1利用PCA进行特征提取的经典算法——Eigenface算法 (6)2.2 PCA人脸识别流程 (6)2.3特征向量选取 (8)2.4距离函数的选择 (9)2.5 基于PCA的人脸识别 (9)MATLAB人脸识别程序 (10)3 MATLAB软件程序编写 (10)3.1.创建图片数据库 (10)3.2 主程序 (11)3.3最终程序结果 (12)4 心得与体会 (12)参考文献 (13)引言随着社会的发展及技术的进步,社会各方面对快速高效的自动身份验证的需求可以说无处不在,并与日俱增。
例如,某人是否是我国的居民,是否有权进入某安全系统,是否有权进行特定的交易等。
尤其是自2001年美国“9.1l”恐怖袭击发生以来,如何在车站、机场等公共场所利用高科技手段,迅速而准确地发现并确认可疑分子成了目前世界各国在反恐斗争中普遍关注的问题。
为此,各国都投入大量人力、物力研究发展各类识别技术,使得生物特征识别技术得到了极大的发展。
生物特征识别技术主要包括:人脸识别、虹膜识别、指纹识别、步态识别、语音识别、笔迹识别、掌纹识别以及多生物特征融合识别等。
人类通过视觉识别文字,感知外界信息。
在客观世界中,有75%的信息量都来自视觉,因此让计算机或机器人具有视觉,是人工智能的重要环节。
人脸识别课程设计报告

用Matlab实现人脸识别之巴公井开创作学院:信息工程学院班级:计科软件普131成员:一、问题描述在一个人脸库中,有 15 个人,每人有 11 幅图像.要求选定每一个人的若干幅图像组成样本库,由样本库获得特征库.再任取图像库的一张图片,识别它的身份.对一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量.如一幅N*N象素的图像可以视为长度为N2的矢量,这样就认为这幅图像是位于N2维空间中的一个点,这种图像的矢量暗示就是原始的图像空间,可是这个空间仅是可以暗示或者检测图像的许多个空间中的一个.不论子空间的具体形式如何,这种方法用于图像识另外基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种怀抱来确定图像间的相似度,最罕见的就是各种距离怀抱.因此,本次采纳PCA算法确定一个子空间,最后使用最小距离法进行识别,并用matlab实现.二、PCA 原理和人脸识别方法1)K-L 变换K-L 变换以原始数据的协方差矩阵的归一化正交特征矢量构成的正交矩阵作为变换矩阵,对原始数据进行正交变换,在变换域上实现数据压缩.它具有去相关性、能量集中等特性,属于均方误差测度下,失真最小的一种变换,是最能去除原始数据之间相关性的一种变换.PCA 则是选取协方差矩阵前 k 个最年夜的特征值的特征向量构成 K-L 变换矩阵.2)主成份的数目的选取保管几多个主成份取决于保管部份的累积方差在方差总和中所占百分比(即累计贡献率),它标识表记标帜着前几个主成份概括信息之多寡.实践中,粗略规定一个百分比即可决定保管几个主成份;如果多留一个主成份,累积方差增加无几,便不再多留.3)人脸空间建立假设一幅人脸图像包括 N 个像素点,它可以用一个 N 维向量Γ暗示.这样,训练样本库就可以用Γi(i=1,...,M)暗示.协方差矩阵 C 的正交特征向量就是组成人脸空间的基向量,即特征脸. 将特征值由年夜到小排列:λ1≥λ2≥...≥λr,其对应的特征向量为μk.这样每一幅人脸图像都可以投影到由 u1,u2,...,ur张成的子空间中.因此,每一幅人脸图像对应于子空间中的一点.同样,子空间的任意一点也对应于一幅图像.4)人脸识别有了这样一个由"特征脸"张成的降维子空间,任何一幅人脸图像都可以向其投影获得一组坐标系数,这组系数标明了该图像在子空间中的位置,从而可以作为人脸识另外依据.计算数据库中每张图片在子空间中的坐标,获得一组坐标,作为下一步识别匹配的搜索空间. 计算新输入图片在子空间中的坐标,采纳最小距离法,遍历搜索空间,获得与其距离最小的坐标向量,该向量对应的人脸图像即为识别匹配的结果.三、实验步伐1) 每人选取 4 幅共60 幅作为训练样本,将每一幅图像(128*128)写成列向量形式排列成矩阵2) 求协方差矩阵3) 求协方差矩阵特征值—求特征向量(特征脸)—将特征向量排列成变换矩阵4) 计算每幅图像的投影5) 计算待识他人脸的投影6) 遍历搜索进行匹配四、实验结果与分析matlab 界面效果如下所示图 1 用户使用界面图 2 选择图片图 3 图片选择后图 4 识别后由于利用了标准库,而且识另外人数不是很多,也没有选择有年夜块左阴影和右阴影的人作为训练集以及测试,所以最终的结果还是非常不错的,识别率可达100%. 可是选择有较年夜阴影的人做测试,则会呈现识别毛病,所以 PCA 算法还是存在一定的局限性.图 5 识别毛病主要代码展示function pushbutton1_Callback(hObject, eventdata, handles) % hObject handle to pushbutton1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% read image to be recognize%读取图片global im;[filename, pathname] = uigetfile({'*.bmp'},'choose photo');str = [pathname, filename];im = imread(str);axes( handles.axes1);imshow(im);% --- Executes on button press in pushbutton2.function pushbutton2_Callback(hObject, eventdata, handles)% hObject handle to pushbutton2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global imglobal referenceglobal W %均值向量按列排成的变换矩阵global imgmean%均值向量global col_of_data global pathnameglobal img_path_list% 预处置新数据im = double(im(:));objectone = W'*(im - imgmean); %计算每幅图像的投影distance = 100000000;% 最小距离法,寻找和待识别图片最为接近的训练图片for k = 1:col_of_datatemp = norm(objectone - reference(:,k));if(distance>temp)aimone = k;distance = temp;aimpath = strcat(pathname, '/', img_path_list(aimone).name);axes( handles.axes2 )imshow(aimpath)endend% 显示测试结果% aimpath = strcat(pathname, '/', img_path_list(aimone).name);% axes( handles.axes2 )% imshow(aimpath)% --- Executes on button press in pushbutton3.function pushbutton3_Callback(hObject, eventdata, handles)% hObject handle to pushbutton3 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)global referenceglobal Wglobal imgmeanglobal col_of_dataglobal pathnameglobal img_path_list% 批量读取指定文件夹下的图片 128*128pathname = uigetdir;img_path_list = dir(strcat(pathname,'\*.bmp'));img_num = length(img_path_list);imagedata = []; if img_num >0for j = 1:img_numimg_name = img_path_list(j).name;temp = imread(strcat(pathname, '/', img_name)); temp = double(temp(:));imagedata = [imagedata, temp];endendcol_of_data = size(imagedata,2);% 中心化 & 计算协方差矩阵imgmean = mean(imagedata,2);for i = 1:col_of_dataimagedata(:,i) = imagedata(:,i) - imgmean;endcovMat = imagedata'*imagedata;[COEFF, latent, explained] = pcacov(covMat);% 选择构成 95%能量的特征值i = 1;proportion = 0;while(proportion < 95)proportion = proportion + explained(i);i = i+1;endp = i - 1;% 特征脸W = imagedata*COEFF; % N*M 阶W = W(:,1:p); % N*p 阶% 训练样本在新座标基下的表达矩阵 p*M reference = W'*imagedata;。
人脸识别课程设计报告

用Matlab实现人脸识别学院:信息工程学院班级:计科软件普131成员:页脚内容1一、问题描述在一个人脸库中,有15 个人,每人有11 幅图像。
要求选定每一个人的若干幅图像组成样本库,由样本库得到特征库。
再任取图像库的一张图片,识别它的身份。
对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量。
如一幅N*N象素的图像可以视为长度为N2的矢量,这样就认为这幅图像是位于N2维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。
不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。
因此,本次采用PCA算法确定一个子空间,最后使用最小距离法进行识别,并用matlab实现。
二、PCA 原理和人脸识别方法1)K-L 变换K-L 变换以原始数据的协方差矩阵的归一化正交特征矢量构成的正交矩阵作为变换矩阵,对原始数据进行正交变换,在变换域上实现数据压缩。
它具有去相关性、能量集中等特性,属于均方误差测度页脚内容2下,失真最小的一种变换,是最能去除原始数据之间相关性的一种变换。
PCA 则是选取协方差矩阵前k 个最大的特征值的特征向量构成K-L 变换矩阵。
2)主成分的数目的选取保留多少个主成分取决于保留部分的累积方差在方差总和中所占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。
实践中,粗略规定一个百分比便可决定保留几个主成分;如果多留一个主成分,累积方差增加无几,便不再多留。
3)人脸空间建立假设一幅人脸图像包含N 个像素点,它可以用一个N 维向量Γ表示。
这样,训练样本库就可以用Γi(i=1,...,M)表示。
协方差矩阵C 的正交特征向量就是组成人脸空间的基向量,即特征脸。
将特征值由大到小排列:λ1≥λ2≥...≥λr,其对应的特征向量为μk。
机器学习概述课程设计报告(MATLAB人脸识别)

机器学习概述课程设计报告题目:MATLAB人脸识别系统姓名:**学号:**专业:**时间:2015/8/7目录一、课程设计得目得 ..............................................................................二、设计得内容与要求 ..........................................................................三、详细设计 ..........................................................................................四、课程设计得总结 ..............................................................................五、参考文献 ..........................................................................................一.课程设计得目得人脸识别作为一项新兴得科学研究项目,有着广泛得应用前景,而且随着计算机技术得更新发展,它得科学研究价值也越发凸显。
经过几十年得研发探讨,世界各大研究结构得研发人员得不断努力下,人脸识别技术一已取得丰硕得成果,可在一定限制条件下完成人脸得自动识别。
这些成果得取得更促进了人们对人脸识别这一课题得深入研究。
在电子商务飞速发展得今天,人脸识别系统得范畴一不足以涵括人脸识别得应用范围,在数字图像处理、视频领域、基于内容得检索等方面有着重要得应用价值。
二.设计得内容及要求1、选择KNN,聚类或SVM方法中得一种或其她机器学习方法得一种进行课程设计2、要求能完成具体得识别任务:如图像分割、语音识别、人脸识别3、要求识别得对象中有自己生活元素,比如图像中包括学校得图片或语音时本人得语音等。
人脸识别课程设计报告材料

用Matlab实现人脸识别学院:信息工程学院班级:计科软件普131成员:一、问题描述在一个人脸库中,有 15 个人,每人有 11 幅图像。
要求选定每一个人的若干幅图像组成样本库,由样本库得到特征库。
再任取图像库的一张图片,识别它的身份。
对于一幅图像可以看作一个由像素值组成的矩阵,也可以扩展开,看成一个矢量。
如一幅N*N象素的图像可以视为长度为N2的矢量,这样就认为这幅图像是位于N2维空间中的一个点,这种图像的矢量表示就是原始的图像空间,但是这个空间仅是可以表示或者检测图像的许多个空间中的一个。
不管子空间的具体形式如何,这种方法用于图像识别的基本思想都是一样的,首先选择一个合适的子空间,图像将被投影到这个子空间上,然后利用对图像的这种投影间的某种度量来确定图像间的相似度,最常见的就是各种距离度量。
因此,本次采用PCA算法确定一个子空间,最后使用最小距离法进行识别,并用matlab实现。
二、PCA 原理和人脸识别方法1)K-L 变换K-L 变换以原始数据的协方差矩阵的归一化正交特征矢量构成的正交矩阵作为变换矩阵,对原始数据进行正交变换,在变换域上实现数据压缩。
它具有去相关性、能量集中等特性,属于均方误差测度下,失真最小的一种变换,是最能去除原始数据之间相关性的一种变换。
PCA 则是选取协方差矩阵前 k 个最大的特征值的特征向量构成K-L 变换矩阵。
2)主成分的数目的选取保留多少个主成分取决于保留部分的累积方差在方差总和中所占百分比(即累计贡献率),它标志着前几个主成分概括信息之多寡。
实践中,粗略规定一个百分比便可决定保留几个主成分;如果多留一个主成分,累积方差增加无几,便不再多留。
3)人脸空间建立假设一幅人脸图像包含 N 个像素点,它可以用一个 N 维向量Γ表示。
这样,训练样本库就可以用Γi(i=1,...,M)表示。
协方差矩阵 C 的正交特征向量就是组成人脸空间的基向量,即特征脸。
将特征值由大到小排列:λ1≥λ2≥...≥λr,其对应的特征向量为μk。
基于matlab的人脸识别系统实验报告

基于MATLAB的人脸识别系统小组成员:徐艺达、莫子韬邹明宇、罗远挥、周宁基于MATLAB的人脸识别系统第一部分绪论如图一个人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。
现在已有实用的计算机自动指纹识别系统面试,并在安检部门得到了相应的应用。
人脸图像的自动识别较之于指纹识别系统、DNA鉴定等具有更加方便的性能,其取样方便,可不接触目标进行识别,从而具有更大意义的开发效应。
然而,与指纹成像技术不同的是,人脸图像受很多因素的干扰:人脸表情的多样性,以及外在成像过程中的关照、图像尺寸、旋转、姿势变化等方面,使得同一个人在不同的环境下拍摄所得到的人脸图像不同,有时往往会有很大的差别,给识别带来了很大的难度。
因此,人脸识别也更具有挑战性。
除了具有重大的理论价值及极富挑战性外,人脸识别还具有很多潜在的应用前景,利用人脸图像进行身份验证,可以不与目标接触就取得样本图像,而使用其他的身份手段,如指纹、眼睛虹膜等必须通过与目标接触或相当接近来取得样本,因此此类识别手段也具有很多不便之处。
本文通过使用PCA和NMF两种算法及MATLAB软件对所取图像进行预处理与识别,应用该工具箱对图像进行了经典图像处理,进而应用与人脸识别系统。
主要涉及到图像选取、脸部定位、特征提取及图像处理识别几个过程。
第二部分基于NMF算法的人脸识别系统一、摘要作为一种基于人的脸部特征信息进行身份识别的一种生物识别技术,人脸识别逐渐成为了计算机视觉领域的一个热门研究课题。
NMF就是其中一种主流算法,但由于人脸识别所存在光照、角度、遮挡等问题仍未解决,因此NMF算法仍存在局限性,该算法没有引入任何对空间的位置的约束,所以最小化目标函数很难产生揭示数据X的局部特征的因子分解。
本文以NMF算法为基础,结合LNMF算法来求解人脸问题。
二、实验目的运用NMF算法对数据库中的数据进行人脸识别分析三、实验原理 1.非负矩阵分解法NMF 1.1NMF 定义非负矩阵分解定义为:找到非负矩阵W 与H 得到下式 V ≈WH (1-1)在计算中等式两者很难完全相等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机器学习概述课程设计报告题目:MATLAB人脸识别系统
姓名:**
学号:**
专业:**
时间:2015/8/7
目录
一、课程设计的目的...............................................................................
二、设计的内容与要求...........................................................................
三、详细设计...........................................................................................
四、课程设计的总结...............................................................................
五、参考文献...........................................................................................
一.课程设计的目的
人脸识别作为一项新兴的科学研究项目,有着广泛的应用前景,而且随着计算机技术的更新发展,它的科学研究价值也越发凸显。
经过几十年的研发探讨,世界各大研究结构的研发人员的不断努力下,人脸识别技术一已取得丰硕的成果,可在一定限制条件下完成人脸的自动识别。
这些成果的取得更促进了人们对人脸识别这一课题的深入研究。
在电子商务飞速发展的今天,人脸识别系统的范畴一不足以涵括人脸识别的应用范围,在数字图像处理、视频领域、基于内容的检索等方面有着重要的应用价值。
二.设计的内容及要求
1、选择KNN,聚类或SVM方法中的一种或其他机器学习方法的一种进行课程设计
2、要求能完成具体的识别任务:如图像分割、语音识别、人脸识别
3、要求识别的对象中有自己生活元素,比如图像中包括学校的图片或语音时本人的语音等。
三.详细设计
YCbCr空间——>灰度图像转换——>噪声消除——>图像填孔——>图像重构——>人脸区域确定——>边缘检测
(原图-涉及个人隐私,未呈现原图)
(YCbCr空间转换)(噪声消除)
(图像填孔)(图像重构)
(人脸区域的确定)
(涉及个人隐私)
四.课程设计的总结
通过三天的学习以及课后学习,我利用SVM算法进行人脸识别,由于光照强度的不同、人脸肤色的不同、图片背景的不同往往导致每张图片都具有自身的特色,将人脸区域从背景、衣着、发型等非人类区域中分割出来。
一般使用的RGB图片不适合于建立人脸皮肤模型,因为在RGB空间中,使用三基色(r,g,b)表示图片的亮度以及颜色。
在不同的环境下光照条件的改变,很难将肤色点从非肤色点中分离出来,如果在RGB图像上进行处理,将产生离散的肤色点,图片中间嵌有很多的非肤色点,提高了人脸检测的难度,容易产生不可靠的肤色分割。
解决方法是隔离颜色表达式中的亮度信息与色度信息,充分利用色度空间中肤色所表示出来的聚类性。
为此需要创造这样一个色彩空间,这个空间能把R、G、B所代表的色度信息与亮度信息分开表示。
色彩空间常用的的转换颜色模型主要有:YIQ、YCbCr、HSV 等。
这里,采用YCrCb色彩空间作为报告的设计空间。
经过颜色转换后大大缩减了人脸的搜索范围,为SVM算法提供更有效的方法。
本次课程设计,我学会了很多有用的算法,并能够初步实现,了解机器语言的过程以及了解MATLAB强大的功能。
五.参考文献
[1]姚敏.数字图像处理[M].机械工业出版社,2006:2.
[2]王爱民,沈兰荪.图像分割研究综述[J].测控技术,2000,19(5):1-5.
[3]张德丰.详解MATLAB数字图像处理[M].北京:电子工业出版社,2010,7:249.
[4]杨杰.数字图像处理及MATLAB实现[M].北京:电子工业出版社,2010,2:149-150.
[5]张洪刚,陈光,郭军编著.图像处理与识别[M].北京:北京邮电大学出版社,2006:102-103.
[6]韩晓军.数字图像处理技术与应用[M].北京:电子工业出版社,2009,7:38.
[7]张化光,刘鑫蕊,孙秋野编著.MATLAB/SIMULINK实用教程[M].北京:人民邮电出版社,2009,3:235.
[8]何东健.数字图像处理[M].西安:西安电子科技大学出版社,2008,5:86.
[9]刘刚.MATLAB数字图像处理[M].北京:机械工业出版社,2010,5:199-200.
附录:程序
sum=0;
iptsetpref('ImshowBorder','tight')%%%设置图像处理工具箱的参数
f=imread('333.jpg');
Ori_Face=f;
copy=f;
img=f;
f=rgb2ycbcr(f);%rgb空间转换为ycbcr空间
f_cb=f(:,:,2);
f_cr=f(:,:,3);
f=(f_cb>=100)&(f_cb<=127)&(f_cr>=138)&(f_cr<=170);%皮肤颜色在ycbcr色度空间的分布范围为:100<=cb<=127,138<=cr<=170
figure(1);
imshow(f);
se=strel('square',3);%%构建一个3*3单位矩阵作为结构元素
f=imopen(f,se);%%图片开运算
f=imclose(f,se);%%图片闭运算
figure(2),imshow(f);%%消除噪声
f=imfill(f,'holes');%%%填孔处理
figure(3),imshow(f);
se1=strel('square',8);
f=imerode(f,se1);
f=imdilate(f,se1);
figure(4),imshow(f);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%区域连通
[L,num]=bwlabeln(f,4);设定操作的邻域类型为4-领域
for i=1:num;
[r,c]=find(L==i);
r_temp=max(r)-min(r);
c_temp=max(c)-min(c);
temp=size(r);
sum=sum+temp(1);
area_sq=r_temp*c_temp;
area=size(find(L==i),1);
ratio=area/area_sq;
if(r_temp/c_temp<1.54)|(r_temp/c_temp>2.4)|temp(1)<14000|ratio<0.55
%利用脸部宽长比的大概上下限(1.54-2.4)来确定一个人脸范围.
%脸部区域<14000的去掉,一般为手或其他干扰.
%矩形面积area_sq=目标区长度*宽度,目标区面积为area,若area/area_sq<0.55,认为不是人脸区,删除之.
for j=1:temp(1);
L(r(j),c(j))=0;
end
else
continue;
end
end
L=bwperim(L,8);%边缘检测,检测出人脸的边缘区域
L=uint8(L);
z=find(L(:)>0);L(z)=255;
figure(5),imshow(L);
L_r=L;L_g=L;L_b=L;
L_rgb=cat(3,L_r,L_g,L_b);%在原图上加框
img1_r=min(L_r+img(:,:,1),255);
img1_g=min(L_g+img(:,:,2),255);
img1_b=min(L_b+img(:,:,3),255);
img1=cat(3,img1_r,img1_g,img1_b);
figure(6),imshow(img1);。