基于PCA模型的图像聚类模型分析和简单图像识别分析.docx
基于PCA模型的图像聚类模型分析和简单图像识别分析摘要本文根据实际200张照片,通过PCA模型的方法进行特征提取,并根据提取出的特征和特征值对图像进行聚类分析,本文采用了统计学意义上的聚类方法,包括k-means聚类、层次聚类与多维高斯矩阵模型,分别对其进行聚类分析,考察聚类分析的效果。最后我们通过计算与聚类中心的距离得出测试图片所属的类别,并且小组也通过简单的图片识别方法,考察计算距离最小值,识别匹配测试图片。1 .引言1.1 背景介绍人脸识别是计算机视觉和图像处理等领域近年来的热点研究课题,现在已经有许多识别方法如指纹识别,掌纹识别,书写签字等川。图像识别具有较为广泛的商业应用领域。其在身份认证与安全防护,例如门禁,以及在增强电子商务、电子政务的安全等领域具有广泛的利用价值,例如限定只有权限的人才能进行网上交易等1.2 实验数据我们选取了200张照片,分别是人物、竹林、猫和电脑。图片大小都不一致,因此我们需要同一成150*180的格式,所以必须先对图片进行处理,但是小组注意到直接压缩到150*180的图片要么严重变形要么占居图片的大小比例相差极大,影响识别,因此必须将图片中主要元素的占比处理到相似程度,然后压缩到150*180大小。我们选择先将图片适度变形到主要人物长宽比相似,然后截取一个5:6的部分图片,控制主人物的占比最后压缩到150*180.图1.1样本图片本实验报告对图像数据的处理对计算机内存有一定要求,不然会出现如图1.2卡顿的情况:»main内存不足。请键入HELPMEMORY查看选项。图1.2异常情况可以选择输入memory指令查看相应配置»memory可能的最大数组:1343MB(1.408e+09bytes)*可用于所有数组的内存:1343MB(1.408e+09bytes)*MATLAB使用的内存:1600MB(1.678e+09bytes)物理内存(RAM):4021MB(4.217e+09bytes)图1.3memory命令查看配置2 .数据预处理与PCAPCA(principleComponentAnalysis)是由TUrk和Pentlad提出来的统计学的特征提取方法,它的基础就是KL变换,是一种常用的正交变换。PCA方法具有速度快,识别率高等优点。通过PCA得到的用于识别的特征向量.而这组正交向量是原始人脸空间的总体散布矩阵的特征向量并具有脸的形状,所以也可称为特征脸,它保留了人脸的完整信息式其实质是建立了一个新的坐标系,将一个物体主轴沿特征矢量对齐的旋转变换,这个变换解除了。原有数据向量的各个分量之间的相关性,从而有可能去掉那些带有较少信息的坐标系,以达到降低特征空间维数的目的完整的PCA人脸识别的步骤为:(1)读入数据图像库;(2)计算KL变换的生成矩阵;(3)利用SVD定理计算特征值和特征向量;(4)把训练图像和测试图像投影到特征空间;(5)比较测试图像和训练图像,确定待识别样本类别。2.1 读入数据图像库本实验将找到的数字图像经过像素处理统一为相同的像素,将200张图片作为样本集进行处理和分析,选取一张作为测试集。整合输入的人脸样本,把m*n的矩阵变换成l*(m*n)的矩阵,最终缩小数据范围后转化为10*6750维的样本矩阵,部分(6745-6750列)矩阵数据如下图2.1.1所示:6745至6750列0.52940.51760.50980.49800.49020.42750.87840.87450.83530.73330.57650.73330.87840.87450.89800.91370.89800.87451.00001.00001.00001.00001.00001.00000.72940.67450.60780.54120.50590.50200.99610.99610.99610.99610.99610.99610.18430.18430.18430.18430.18430.18430.80000.78430.77250.75690.74510.73730.94900.94900.94900.94900.94900.94900.80000.79220.78430.77650.78040.7765图2.1样本矩阵代码如下:functionImgData=imgdata()namud=0.8;IrainImgPath=,CUsersyyDesktopMatlab,;(路径体现了团队分工)trainlmgExt=,*.jpg,;trainlmgs=dir(fullfile(trainImgPath,trainImgExt);number=size(trainlmgs,l);pic_all=cell(1,number);fori=1:numberpic-alli=rgb2gray(imread(strcat(num2str(i),.jpg,);pic-alli=imresize(pic-alli,namud);endm,n=size(picalll);fori=ImumberImgData(i,:)=reshape(pic_alli,1,m*n);endImgData=double(ImgData)255;2.2 图像灰度处理通常一副图像由R,G,B三个通道组成,而灰度图像的这三个通道的像素值是通过灰度变化来显示的。灰度图像共有256种灰度的色阶,表示由浅到深的灰度颜色变化。灰度的变化构成了图像的不同特征。2.3 计算K-L变换矩阵K-L变换是模式识别中常用的一种特征提取方法,出发点是从一组特征中计算出一组按重要性从大到小排列的新特征,它们是原有特征的线性组合,并且相互之间是不相关的,实现数据的降维。PCA实质上是K-L展开的网络递推实现,K-L变换是图像压缩中的一种最优的正交变换,其生成矩阵一般为训练样本的总体散布矩阵。N叨算法思想为:假设数据库里有P个人,每人有i幅人脸图像,设每位训练者图像的平均矢量为mi,则M=mO,ml,.mp-1,其总体灰度平均值为m,M与之相减后构成一组大矢量A=l,2p,其中i=mi-m,它用于进行主分量分析,找出M个正交矢量/“及本征值k最好地描述数据分布规律,心及k是协方差矩阵C的本征矢量和本征值,其中c=.)r=>ur叫求解出来的特征值和特征向量即为“特征脸二设为矩阵U,对每个人的训练样本的平均图像矢量叫(i=。,P-D,向由“特征脸”图像矢量所张成的子空间上投影,其坐标系数矢量就是其K-L变换的展开系数矢量,即.1/Wi=O-网。2.4 计算特征值和特征向量把训练图像和测试图像投影到特征空间求出特征协方差矩阵,协方差绝对值越大,两者对彼此的影响越大,反之越小。然后求出协方差矩阵的特征值和特征向量,将特征向量都归一化为单位向量后按照从大到小的顺序排序,选择其中最大的k个,然后将其对应的k个特征向量分别作为列向量组成特征向量矩阵。本实验的样例数为m,特征数为n,减去均值后的样本矩阵为Z,协方差矩阵是T=Zt*Z,选取的k个特征向量组成的矩阵为V,D那么投影后的数据img_new,本实验的运行代码为:此处代码参考:functionCellall=PCA(img,k)%img=1,2;2,1;3,3;3,6;6,3;%k=2;%img=double(img);m,n=size(img);imgmean=mean(img);imgmeanall=repmat(img_mean,m,1);Z=img-imgmeanall;T=Z,*Z;V,D=eigs(T,k);imgnew=img*V*D;Cellall=imgnew,V,D;这样就将原始样例的n维特征变成了k维,这k维就是原始特征在k维上的投影。上面的数据可以认为是Ieam和study特征融合为一个新的特征叫做LS特征,该特征基本上代表了这两个特征。2.5 数据标准化先对数据进行预处理,将其进行标准化,得到如下数据表2.1标准化样本数据PCA-IPCA-2PCA-31.20581785489707-0.0571849699152982-0.96640442299173120.363291735604150-0.776991829992383-0.25555958881224131.486019358637700.2137231736172820.57695199973797440.886336285769643-0.1628296888031260.2436892968373205-0.6799289104421590.4329682722517031.2730001427139160.624313500320956-1.16298484032795-1.241910668770367-0.646792098029122-0.1521513007799401.572792133192941991.97093397217602-0.230943152217570-0.998085484368344200-0.590530164758485-0.5275531224971102.04970237876063进行初步三维可视化,观察数据分布:图2.2三维可视化数据分布代码如下:T=X(U);D=X(:,2);K=X(:,3);scatter3(T,D,K)3 .聚类模型构建聚类分析是研究分类问题的一种统计分析方法口支其中基于模型的方法中,主要为两类:统计学方法和神经网络方法。本实验报告主要从统计学方法的角度出发考察部分聚类模型1 .1k-means图像聚类运用matlab自带的kmeans()函数将标准化样本数据进行聚类,其中k=4,初始聚类中心为matrix.C1.1.1 最优k值选择:2 T111TT0.9r0.8;0.70.6-0.50.40.3-xX-0.20.1-一_°246810121416图3.1簇内误方差曲线图通过误方差曲线图展示拐点在k=4处,这与我们选取图片时的真实情况相符,因此k=4为较为合理的初始k值。函数如下切:functionbest_k(data)globalmatrixn,p=size(data);fori=l:pminr=min(data(:,i);maxr=max(data(:,i);data(:,i)=(data(:,i)-minr)/(maxrminr);%归一化endK=I5;D=zeros(K-1,2);T=0;fork=2:KT=T+1;!able,c,sumd,d=kmeans(data,kstart,'sample*);%一求每类数量一-Sort_num=ZeroS(k,1);%每类数量fori=l:kfbrj=kniflable(j,l)=isortnum(i,1)=sortnum(i,1)+1;endendend%求每类数量一-Sort_ind=SUmd./sortnum;%每类类内平均距离Sort_ind_ave=mean(sOrtind);%类内平均距离%-求类间平均距离-一h=nchoosek(k,2);A=zeros(h,2);t=0;sort_outd=zeros(h,1);fori=lrk-lforj=i+kkt=t+l;A(t,l)=i;A(t,2)=j;endendfori=l:hfbrj=kpsortoutd(i,1)=sort_outd(i,1)+(c(A(i,1),j)-c(A(i,2)j)2;endendSort_oUtd_ave=mean(sort_oUtd);%类间平均距离%-求类间平均距离-一D(T,l)=k;D(T,2)=sortindavesortoutdave;endmin(D(:,2);f,g=find(D=min(D(:,2);PlOt(D(:,1),D(:,2)end但是此代码仍然有一个不可避免的问题,他在每一个k下的k-means结果仍取决于初始聚类中心的选择,这给k值的选择增加了不确定性。3.1.2 初始聚类中心的选择:k-means算法一个最大的缺点是初始聚类中心的选择,初始聚类中心的选择可能会导致不同的函数结果,其中Start参数的选择有如下几种:表3.1k-means函数的start参数参数解释,plus,TheDefault.SelectKobservationsfromXaccordingtothek-means+algorithm:thefirstclustercenterischosenuniformlyatrandomfromX,afterwhicheachsubsequentclustercenterischosenrandomlyfromtheremainingdatapointswithprobabilityproportionaltoitsdistancefromthepoint,sclosestexistingclustercenter.,sample'SelectKobservationsfromXatrandom.,unifbrm,SelectKpointsuniformlyatrandomfromtherangeofX.NotvalidforHammingdistance.,cluster'Performpreliminaryclusteringphaseonrandom10%subsampleofX.Thispreliminaryphaseisitselfinitializedusing'sample*.matrixAK-by-Pmatrixofstartinglocations.Inthiscase,youcanpassinforK,andkmeansinfersKfromthefirstdimensionofthematrix.Youcanalsosupplya3Darray,implyingavaluefor'Replicates'fromthearray,sthirddimension.默认参数根据k-means+算法而来,它假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心,这符合我们的直觉,聚类中心互相离得越远越好。当然在选取第一个聚类中心(n=l)时同样通过在均匀分布中随机选择的方法。而其他参数的条件下,往往随机性更强,不确定性更高,因此小组根据各参数的性质和优缺点,最终选择默认参数。并为了得到更好的分类效果,小组预先定义了精准度函数,进行反复尝试最后选择使得分类效果最好的matrix并保存,其目的是为了固定最优的聚类结果以便后续操作,这一行为存在合理性,通过反复尝试计算得到了一个较优的结果,为后续可视化等提供不变的数据前提。k-means聚类部分程序如下:matrix=load(,a.mat,C,);X=zscore(Cell_ten1,1);%k-means聚类globalIdxIdx,C,sumD=kmeans(X,4,start,matrix.C);%准确率Correctrate=ROC()聚类结果如下:表3.2聚类中心PCA-IPCA-2PCA-3聚类中心10.648734405033652-0.1604666012428190.852754058823783聚类中心2-0.339872087837142-1.01281862187331-0.399023322377259聚类中心3-0.8059849623093970.9035530308063790.128870171673445聚类中心41.166739895039690.585376195990474-1.50101059511070表3.3每个样本的聚类标号图片聚类标号(1-4)样本11样本22样本31样本41样本53样本2001表3.4类间所有点与该类质心点距离之和聚类结果距离之和类175.9267376987829类269.3758625476204类376.0469561413657突448.64973695319913.1.3 准确率评分functionratio=ROC(x)%UNTITLED此处显示有关此函数的摘要%此处显示详细说明A=linspace(1,200,200);B=l+ones(l,14);Bl=ones(l,3)iB2=2+ones(l,3);B3=3+ones(l,20);B4=ones(l,20);B5=1+ones(1,20);B6=2+ones(l,20);B7=3,2,4,3,2,1,4,2,3,2,2,1,3;B8=ones(l,13);B9=3,3,22132,3,3,2,1,1,1,1,1,1,2,2,3,1,3,3,2,2,1,3,3,2,3,233,2,2,4,4;BlO=2,2,2,321,2,2,1,4,3,2,2,3,4,3,2,2,4,2,3,4,3,4,3,2,3,3,4,2,2,3,2,2,3,2,2,2;B=B,Bl,B2,B3,B4,B5,B6,B7,B8,B9,B10;C2=A,x,B,;num=O;fori=1:200ifC2(i,2)=C2(i,3)num=num+1;endendnumratio=num/200;end函数中对现有的图片进行了初始分类标记:1-猫、2-人、3-竹林、4-电脑,这些初始标记为k-means、层次聚类等无监督式聚类提供正确率评价标准,计算聚类正确的数量num和正确率ratioOnum=l10;correctrate=0.5500此聚类结果取得了较好的分类结果,正确率为55%。对于k-means算法而言,它因为原理简单效果较好而被广泛使用,但是算法受初值的影响较为不稳定,且实际应用中一般图像的聚类数目较难确定3.1.4 可视化聚类结果图3.2聚类结果3D效果图我们可以看到聚类的效果较好,但是明显收到边缘点的影响较大,且由于聚类中心靠得仍然相对较近,即图片灰度值相近,因此聚类的效果大打折扣,这体现在各个类的边缘点相聚非常近,容易被误分类,这在实际情况下,体现为猫和人的相似性上或者图片中的电脑的左右转向不同上,这些对聚类的结果产生了较大的影响。代码如下:plot3(X(Idx=lJ),X(Idx=l,2),X(Idx=l,3),r,lMarkerSize',14)holdonplot3(X(Idx=2,l),X(Idx=2,2),X(Mx=2,3),b.VMarkerSizeU4)holdonplot3(X(Idx=3,l),X(Idx=3,2),X(Wx=3,3),7MarkerSize,l4)holdonplot3(X(Idx=4,1),X(Idx=4,2),X(Wx=4,3),yVMarkerSize1,14)plot3(C(,l),C(,2),C(,3),kx,MarkerSize,14,LineWidth,4)plot3(C(:,1),C(:,2),C(:,3),'kx','MarkerSize',14,LineWidth',4)pk)t3(C(:,l),C(:,2),C(:,3),'kx?MarkerSiZd,14,'LineWidth/)plot3(C(:,l),C(:,2),C(:,3),kx,1MarkerSize1,14,LineWidth,4)IegendCCluster,Cluster2',lCluster3,Cluster4,tCentroidsVLocationr,NW,)图3.3轮廓系数图轮廓系数是聚类效果好坏的一种评价方式,包括内聚度和分离度两种因素:a(i)=average(i向量到所有它属于的簇中其它点的距离)b(i)=min(i向量到各个非本身所在簇的所有点的平均距离)第i向量的轮廓系数为:=b(i)-Qa)1max(i),b(i)从图中可以判断,第四类的轮廓系数总体效果最差,存在负值偏差,其他三类轮廓系数都存在一定的误差,有一半左右的值低于0.5。图3.4分类结果的概率热力图如果假设多维高斯更符合正常的概率分布,那么我们可以看到如果用多维高斯模型的概率与k-means模型进行匹配(多维高斯对聚类的结果为:1-竹林;2-人;3-电脑;4-猫)检验数据聚类的结果,可以出现如图的检验结果,我们可以看到k-means对于竹林和电脑的聚类结果正确概率较大,对猫的聚类正确概率次之,对人的正确概率最差。代码如下:(会在后续介绍相关原理和解释)%options=statset(,Display,fina);%gm=gmdistribution.fit(X,4,Optionsoptions);idx=cluster(gm,X);Clusterl=(Idx=3);cluster2=(Idx=2);cluster3=(Idx=4);cluster4=(Idx=1);%X=CellJenl,l;%计算分类概率P=PoSterior(gm,X);%高斯混合分量的后验概率P8=figure;Clfplot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),r.t)gridon;holdonlot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),fbo,)lot3(X(cluster3,l),X(cluster3,2),P(cluster3,3),*')plot3(X(cluster4,1),X(cluster4,2),P(cluster4,4),fy.*)Iegende第1类','第2类T第3类T第4类?LOCation?NWr)clnap=jet(80);CoIOrmaP(CIrmaP(9:72,:)ylabel(colorbar,'Component1PosteriorProbability1)view(-45,20);3.2 分层聚类层次聚类是另一种简单但有效的聚类算法,k-means等算法返回非结构化集合,这一过程需要将特定的簇数目作为输入。分层聚类输出层次结构,这种结构不需要确定提前输入特定变量,且更具信息性。图3.5图片分类层次聚类示意图可以通过T=CIUSter(CIUStTree,4)函数获取分为4类时,200个样本的分类情况:表3.7层级聚类结果样本聚类结果样本13样本23样本33样本2003下面我们通过得分函数得到层级聚类分类的结果得分:num=56;correctrate2=0.2800由于异常点的影响,下面我们选出20和50个样本进行更小范围的尝试:图3.620个样本的层次聚类图根据观察,可以看到dendrogram中参数为20且分成4类时,分类结果一般图3.750个样本的层次聚类图根据观察,可以看到dendrogram中参数为50且分成4类时,分类结果较差层次聚类对于小范围图像聚类效果较差的原因也许是个别图像本身差别已经较大,因此划分类较小时容易出现个别单独成对的分类,这些意外点或者说偏差点对层次聚类的影响较大。代码如下:eucD=pdist(X,'euclidean*);ClustTree=linkage(eucD,average,);COPhenet(ClUStTree,eucD);%评价聚类信息P3=figure;clf;h,nodes=dendrogram(clustTree,30);T=cluster(clustTree,4);correctrate2=ROC(T)3.3 多维高斯分布模型高斯混合模型用高斯概率密度函数精确地量化事物,将一个事物分解为若干基于高斯概率密度函数形成的模型。在三维的情况下,同样的理解:任何一个曲面都可以用高斯函数来逼近。高斯混合模型也被视为一种聚类方法,是一种基于EM算法的极大似然估计算法,用到了全概率公式、朴素贝叶斯等。它的结果是机器学习中对“无标签数据”进行训练得到的分类结果。其分类结果由概率表示,概率大者,则认为属于这一类。主要通过函数P=POSteriOr(gm,X)实现:图3.8多维高斯函数的分类结果分布情况一451图3.9多维高斯分布模型得出的概率分布示意图图3.10三维概率分布拟合图如图是根据多维高斯模型计算得到的聚类分类信息与可视化概率模型;如图是概率结果的三维可视化图。它的结果如下:表3.8多维高斯模型分类结果样本聚类结果样本11样本24样本34样本2001通过我们的得分函数,得到多维高斯分类模型的得分为num=45;correctrate3=0.2250可见多维高斯模型在这里精度较差。且从三维概率图来看,高斯的分类结果存在一个很明显的峰值概率,在分类种类较小的情况下,该模型的效果较差。代码如下:X=zscore(CelIten1,1);idx=cluster(gm,X);Clusterl=(idx=1);cluster2=(idx=2);cluster3=(idx=3);cluster4=(idx=4);%计算分类概率P=POSterior(gm,X);%高斯混合分量的后验概率P8=figure;clf%分类示意图plot3(X(cluster1,1),X(cluster1,2),X(cluster1,3),)gridon;holdonplot3(X(cluster2,1),X(cluster2,2),X(cluster2,3)bo,)lot3(X(cluster3,l),X(cluster3,2),X(cluster3,3)g*)PIot3(X(CIUSter4,1),X(ClUSter4,2),X(ClUSter4,3),'y.')%概率分布示意图与三维图plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),r.t)gridon;holdonplot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),bo,)lot3(X(cluster3,l),X(cluster3,2),P(cluster3,3),g*')PIOt3(X(ClUSter4,1),X(CIUSter4,2),P(CIUSter4,4),'y.')gridon;holdonTl=X(cluster1,1);X(cluster2,1);X(cluster3,1);X(cluster4,1);Dl=X(CIUSterl,2);X(ClUSter2,2);X(ClUSter3,2);X(ClUSter4,2);Pl=P(cluster1,2);P(cluster2,2);P(cluster3,2);P(cluster4,2);XI,Yl,Zl=griddata(T1,D1,P1Jinspace(min(T1),max(T1),linspace(min(D1),max(D1),W);%插值figure,surf(Xl,Y1,Z1)correctrate3=ROC(idx)plot3(X(clusterl,1),X(cluster1,2),P(cluster1,1),r)gridon;holdonlot3(X(cluster2,l),X(cluster2,2),P(cluster2,2),bo,)plot3(X(cluster3,l),X(cluster3,2),P(cluster3,3)g*')PIOt3(X(ClUSter4,1),X(CIUSter4,2),P(CIUSter4,4),'y.')IegendC第1类','第2类:第3类:第4类?LOCation?NW)clrmap=jet(80);COIOrmaP(ClrmaP(9:72,:)ylabel(colorbar,'Component1PosteriorProbability')view(-45,20);3.4 三种聚类模型的比较比较在同一低数据量条件下,三种分类方法的效果如下:表3.9比较汇总分类正确个数正确率k-means11055%层次聚类5628%多维高斯分布模型4522.5%此处就无监督图片的聚类而言,k-means取得了最佳的效果,但对于k-means算法而言,受聚类中心初值的影响大,且聚类数目较难确定。层次聚类在理论上拥有良好的实践性,且不需要提前输入分类数量和初始聚类中心,但其在分类数量较少时,容易受极端值的影响。多维高斯分布模型计算能力出色,但在此处数据量较小的前提下受到了更大的约束,此处的数据偏离正态分布的可能性更大,对其计算产生了巨大的影响,换句话说如果一个聚类的数据并不服从正态分布、偏态分布,聚类算法会出现偏差。4.判别模型与图像识别4.1 判别模型4.2 K-means判别函数通过计算test样本的PCA特征并与四个聚类中心进行欧式距离计算,我们可以得到最短距离,从而得到相应的判别结果。result2=predict2(Cellten,imread(,test.png'),C)对于test.png而言,判别结果为:result2=1此判断结果根据观察test,png图片可以发现是错误的函数代码如下:functionpredictnumber=predict2(Cell_all,testimg,C)%UNTITLED此处显示有关此函数的摘要%此处显示详细说明%对需要识别的图像进行灰度等的处理namud=0.8;V=CelLan2;D=CelLall3;pic=rgb2gray(testimg);%灰度处理pic=imresize(pic,namud);%变换大小2,n2=size(pic);pic=reshape(pic,l,m2*2);%重新排列pic=double(pic)255;pic_done=pic*V*D;%处理完的数据%归一化-避免运算出现特别大的数据Ma=max(max(pic-done);Mi=min(min(picdone);pic_done=pic_done/(Ma-Mi);%distance=ones(1,4);fori=l:4distance=Sqrt(SUm(Pic_done-C(i,:).八2);endindex=find(distance=min(distance);switchindexcase 1predictnumber=1;case 2predictnumber=2;case 3predictnumber=3;case 4predictnumber=4;endend4.2图像识别通过计算范数,把图像之间的几何距离作为评判与哪一个人脸最近的标准WFigure1×文件(F)编辑(E)查看(V)插入件工具(T)桌面(D)窗口(W)帮助(三)QfOSQ测试图像数据库图像图4.1匹配结果代码如下:此处代码参考:%细胞结构体的调用imgall=Cellalll;ml,nl=size(img_all);V=CeILan2;D=Cell_all3;namud=0.8;%图片缩小的倍数%对需要识别的图像进行灰度等的处理pic=rgb2gray(img2find);%灰度处理pic=imresize(pic,namud);%变换大小m2,n2=size(pic);pic=reshape(pic,l,m2*2);%重新排列pic=double(pic)255;picdone=pic*V*D;%处理完的数据%归一化-避免运算出现特别大的数据Ma=max(max(pic-done);Mi=min(min(pic-done);pic_done=pic_done/(Ma-Mi);%fori=l:ml%归一化-避免运算出现特别大的数据Mal=max(imgall(i,:);Mil=min(img_all(i,:);imgall(i,:)=img_all(i,:)/(Mal-Mil);%求范数-把他们之间的几何距离作为评判与哪一个人脸最近的标准error(i)=norm(img_all(i,:)-pic_done);end%找到其中最近的就认为是所要识别的人脸FaceFind=find(error=min(error);%FaceFind=error;4.3一些拓展一测试图像和训练图像,确定待识别样本类别(1)经过矩阵特征值运算后,可以匹配到测试图像在数