⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 face-recognize.m

📁 人脸识别代码:图像工程中经常用到的一个实用算法。这里是matlab的实现。
💻 M
字号:
allsamples=[];
for i=1:40
	for j=1:5
	a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
	 b=a(1:112*92);
	b=double(b);
	allsamples=[allsamples;b];
	end
end
samplemean=mean(allsamples);
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean;
end;
%获取特征植及特征向量
sigma=xmean*xmean';
[v d]=eig(sigma);
d1=diag(d);
%按特征值大小以降序排列
dsort=flipud(d1);
vsort=fliplr(v);
%以下选择90%的能量
dsum=sum(dsort);
	dsum_extract=0;
	p=0;
	while(dsum_extract/dsum<0.9)
		p=p+1;
		dsum_extract=sum(dsort(1:p));
	end
i=1;
% (训练阶段)计算特征脸形成的坐标系
base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); 
allcoor=allsamples*base;
accu = 0;
%测试过程
for i=1:40
	for j=6:10%读入40 x 5 副测试图像
	a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
	b=a(1:10304);
	b=double(b);
	tcoor=b*base;
	for k=1:200
		mdist(k)=norm(tcoor-allcoor(k,:));
	end;
  %三阶近邻
[dist,index2]=sort(mdist); 
        class1=floor( (index2(1)-1)/5 )+1; 
        class2=floor((index2(2)-1)/5)+1; 
        class3=floor((index2(3)-1)/5)+1; 
        if class1~=class2 && class2~=class3 
            class=class1; 
        elseif class1==class2 
            class=class1; 
        elseif class2==class3 
            class=class2; 
        end; 
        if class==i 
            accu=accu+1; 
        end; 
    end; 
end; 
accuracy=accu/200 % 输出识别率

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -