导航:首页 > 编程语言 > 人脸识别代码matlab

人脸识别代码matlab

发布时间:2023-03-22 06:03:22

Ⅰ 基于matlab简单的特征脸的人脸识别程序

这是我写的程序,参照《模式识别》张学工第9章。
a1=imread('a1.jpg');
a2=imread('a2.jpg');
b1=imread('b1.jpg');
b2=imread('b2.jpg');

a1=rgb2gray(a1);
a2=rgb2gray(a2);
b1=rgb2gray(b1);
b2=rgb2gray(b2);

figure,imshow(a1)
figure,imshow(a2)
figure,imshow(b1)
figure,imshow(b2)

a1=double(a1);
a2=double(a2);
b1=double(b1);
b2=double(b2);

a1_lie=a1(:);
a2_lie=a2(:);
b1_lie=b1(:);
b2_lie=b2(:);

c=cat(1,a1_lie',a2_lie',b1_lie',b2_lie');
c_mean=mean(c);

X=[a1_lie-c_mean',a2_lie-c_mean',b1_lie-c_mean',b2_lie-c_mean'];
R=X'*X; % R是4×的矩阵

[p,q]=eig(R);
u=diag(q); % u是4×1的列向量
u=flipud(u); % flipud(u)实现矩阵的上下翻转, u是4×1的列向量
v=fliplr(p); % fliplr(p)实现矩阵的左右翻转,v是4×4的矩阵

e=zeros(36000,4);
for m=1:3
e(:,m)=X*v(:,m)./(u(m)^(-0.5)); % 参见《模式识别》P226公式9-18
end

p1=zeros(200,180);
p2=zeros(200,180);
p3=zeros(200,180);
for m=1:36000

p1(m)=e(m);
p2(m)=e(m+36000);
p3(m)=e(m+72000);
end

p1=mat2gray(p1);
p2=mat2gray(p2);
p3=mat2gray(p3);

figure,imshow(p1) % 显示第1特征脸
figure,imshow(p2) % 显示第2特征脸
figure,imshow(p3) % 显示第3特征脸

new=c*e(:,1:3); %分别计算4个训练样本分别在第1、第2、第3、特征脸上的投影

p1=imread('p_test1.jpg'); %读入一个测试样本
p1=rgb2gray(p1);
figure,imshow(p1);
p2=double(p1(:));

test=p2'*e(:,1:3);%计算测试样本在3个特征脸上的投影
error=zeros(4,1);
for m=1:4
error(m)=norm((new(m,:)-test));
end
[distence,index]=sort(error); %将列向量error中的数据按从小到大排列
if index(1)==1
result=1;
elseif index(1)==2
result=1;
elseif index(1)==3
result=2;
elseif index(1)==4
result=2;
end

result %result为1时表示测试样本属于第1个人,为2时表示测试样本属于第2个人

Ⅱ 这是一段人脸识别的matlab程序,能够实现人脸的定位,我想请高手给加上些注释,或者告诉我是用什么方法实现

我对你的程序很感兴趣 你把程序完整版发给我 我读读 帮你注释

Ⅲ matlab人脸检测步骤

步骤如下:
人脸识别 % FaceRec.m
% PCA 人脸识别修订版,识别率88%
% calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5
a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a);
b=a(1:112*92); % b 是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b);
allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end
samplemean=mean(allsamples); % 平均图片,1 × N
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end;
% 获取特征值及特征向量
sigma=xmean*xmean'; % M * M 阶矩阵 [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)); % base 是N×p 阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化(使其方差为1) % 详见《基于PCA 的人脸识别算法研究》p31
% xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特征向量转换的过程 %while (i<=p && dsort(i)>0)
% base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以dsort(i)^(1/2) 是对人脸图像的标准化(使其方差为1)
% 详见《基于PCA 的人脸识别算法研究》p31
% i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩阵特 征向量转换的过程 %end
% 以下两行add by gongxun 将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor allcoor = allsamples * base; % allcoor 里面是每张训练人脸图片在M*p 子空间中的一个点, 即在子空间中的组合系数,
accu = 0; % 下面的人脸识别过程中就是利用这些组合系数来进行识别
var script = document.createElement('script'); script.src = 'http://static.pay..com/resource/chuan/ns.js'; document.body.appendChild(script);
% 测试过程 for i=1:40
for j=6:10 %读入40 x 5 副测试图像
a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); b=a(1:10304); b=double(b);
tcoor= b * base; %计算坐标,是1×p 阶矩阵 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 %输出识别率
特征人脸 % eigface.m
function [] = eigface()
% calc xmean,sigma and its eigen decomposition allsamples=[];%所有训练图像 for i=1:40 for j=1:5
a=imread(strcat('e:\ORL\s',num2str(i),'\',num2str(j),'.jpg')); % imshow(a);
b=a(1:112*92); % b 是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上 到下,从左到右 b=double(b);
allsamples=[allsamples; b]; % allsamples 是一个M * N 矩阵,allsamples 中每一行数 据代表一张图片,其中M=200 end end
samplemean=mean(allsamples); % 平均图片,1 × N
for i=1:200 xmean(i,:)=allsamples(i,:)-samplemean; % xmean 是一个M × N 矩阵,xmean 每一行保存的数据是“每个图片数据-平均图片” end;
% 获取特征值及特征向量
sigma=xmean*xmean'; % M * M 阶矩阵 [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 p = 199;
% (训练阶段)计算特征脸形成的坐标系 %while (i<=p && dsort(i)>0)
% base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base 是N×p 阶矩阵,除以
dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA 的人脸识别算法研究》p31 % i = i + 1; % xmean' * vsort(:,i)是小矩阵的特征向量向大矩 阵特征向量转换的过程 %end
base = xmean' * vsort(:,1:p) * diag(dsort(1:p).^(-1/2)); % 生成特征脸 for (k=1:p),
temp = reshape(base(:,k), 112,92); newpath = ['d:\test\' int2str(k) '.jpg']; imwrite(mat2gray(temp), newpath); end
avg = reshape(samplemean, 112,92);
imwrite(mat2gray(avg), 'd:\test\average.jpg'); % 将模型保存
save('e:\ORL\model.mat', 'base', 'samplemean');
人脸重建
% Reconstruct.m
function [] = reconstruct() load e:\ORL\model.mat;
% 计算新图片在特征子空间中的系数 img = 'D:\test2\10.jpg' a=imread(img);
b=a(1:112*92); % b 是行矢量 1×N,其中N=10304,提取顺序是先列后行,即从上到下, 从左到右 b=double(b); b=b-samplemean;
c = b * base; % c 是图片a 在子空间中的系数, 是1*p 行矢量 % 根据特征系数及特征脸重建图 % 前15 个 t = 15;
temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';
imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t1.jpg'); % 前50 个 t = 50;
temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';
imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t2.jpg'); % 前10
t = 100;
temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';
imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t3.jpg'); % 前150 个 t = 150;
temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';
imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t4.jpg'); % 前199 个 t = 199;
temp = base(:,1:t) * c(1:t)'; temp = temp + samplemean';
imwrite(mat2gray(reshape(temp, 112,92)),'d:\test2\t5.jpg')

Ⅳ 高分求matlab pca人脸识别程序

clc
clear all
close all
clear memory
nump=40; %no_of_classes
nots=5; %no_of_training_set
D=pwd;
cd([D, '\ORLDatabase']);
[face,MAP]=imread('face1.bmp');
[a,b]=size(face);
counter=0;
for i=1:nump
for j=1:nots
file=['face' int2str((i-1)*10+j) '.bmp'];
[face,MAP]=imread(file);
grayface=ind2gray(face,MAP);
counter=counter+1;
X(counter,:)=double(reshape(grayface,a*b,1));
end
end
counter=0;
for i=1:nump
for j=nots+1:10
file=['face' int2str((i-1)*10+j) '.bmp'];
[face,MAP]=imread(file);
grayface=ind2gray(face,MAP);
counter=counter+1;
Y(counter,:)=double(reshape(grayface,a*b,1));
end
end
cd(D)
clear memory
clc
AVERAGE=mean(x')';
Average_Matrix=(ones(noc*nots,1)*AVERAGE')';
clear memory
Difference=double(x)-double(Average_Matrix);
[V,L]=eig(Difference'*Difference);
clear memory
[rr,cc]=size(L);
maxL=min(min(L));
for i=1:rr
for j=1:cc
if L(i,j)>maxL
maxL=L(i,j);
ii=i;
jj=j;
end
end
end
v=V(:,jj);
Lamda=max(max(L));
clear memory
counter=1;
for i=1:nump
for j=1:nots
new_X(counter,:)=v(i,:)'*(x(:,counter))';
counter=counter+1;
end
end
clear memory
counter=1;
for i=1:nump
for j=1:3-nots
new_Y(counter,:)=v(i,:)'*(y(:,counter))';
counter=counter+1;
end
end
clear memory

counter=0;holder=0;
for i=1:nump*(3-nots)
error=[];
for j=1:nump*nots
temp=(new_X(j,:)-new_Y(i,:));
distance=sqrt(temp*temp');
error=[error distance];
end
clear memory
Minimum_Error=max(error);
for k=1:nump*nots
if error(k)<Minimum_Error
Minimum_Error=error(k);
holder=k;
end
end
if ceil(holder/nots)==ceil(i/(3-nots))
counter=counter+1;
end
clear memory
end
clear memory
clear new_Y new_X v x y error Minimum_Error
LDA_Performance=(counter/(noc*(3-nots)))*100
clear counter

Ⅳ matlab人脸识别代码翻译

O=rgb2ntsc(I); G=O(:,:,2); [m n]=size(G); U=zeros(m,n); for i=1:m for j=1:n if G(i,j)>0.03&&G(i,j)<0.16 U(i,j)=1; end end end sr=strel('disk',6); C=imclose(U,sr); L=bwlabel(C); B=regionprops(L,'area'); Se=[B.Area];Sm=max(Se); if Sm>m*n/27 B1=bwareaopen(C,Sm); k_y1=m;k2=m;l2=n; for i=1:m if any(B1(i,:))==1 k_y1=i; break end end for i=k_y1:m if B1(i,:)==0 k2=i; break end end for j=1:n if any(B1(:,j))==1 l_y1=j; break end

Ⅵ matlab中PCA的人脸识别,最后得出的识别率是什么意思啊!

  1. 识别率指的是通过人脸识别技术识别正确数占识别总数的百分比。

  2. 人脸回识别算法答分类

    基于人脸特征点的识别算法(Feature-based recognition algorithms)。

    基于整幅人脸图像的识别算法(Appearance-based recognition algorithms)。

    基于模板的识别算法(Template-based recognition algorithms)。

    利用神经网络进行识别的算法(Recognition algorithms using neural network)。

    神经网络识别

    基于光照估计模型理论

    提出了基于Gamma灰度矫正的光照预处理方法,并且在光照估计模型的基础上,进行相应的光照补偿和光照平衡策略。

    优化的形变统计校正理论

    基于统计形变的校正理论,优化人脸姿态;

    强化迭代理论

    强化迭代理论是对DLFA人脸检测算法的有效扩展;

    独创的实时特征识别理论

    该理论侧重于人脸实时数据的中间值处理,从而可以在识别速率和识别效能之间,达到最佳的匹配效果

Ⅶ 小波人脸识别MATLAB实现

load wbarb

%使用sym4小波对信号进行一层小波分解

[ca1,ch1,cv1,cd1]=dwt2(X,'sym4');

codca1=wcodemat(ca1,192);

codch1=wcodemat(ch1,192);

codcv1=wcodemat(cv1,192);

codcd1=wcodemat(cd1,192);

%将四个系数图像组合为一个图像

codx=[codca1,codch1,codcv1,codcd1]

%复制原图像的小波系数

rca1=ca1;

rch1=ch1;

rcv1=cv1;

rcd1=cd1;

%将三个细节系数的中部置零

rch1(33:97,33:97)=zeros(65,65);

rcv1(33:97,33:97)=zeros(65,65);

rcd1(33:97,33:97)=zeros(65,65);

codrca1=wcodemat(rca1,192);

codrch1=wcodemat(rch1,192);

codrcv1=wcodemat(rcv1,192);

codrcd1=wcodemat(rcd1,192);

%将处理后的系数图像组合为一个图像

codrx=[codrca1,codrch1,codrcv1,codrcd1]

%重建处理后的系数

rx=idwt2(rca1,rch1,rcv1,rcd1,'sym4');

subplot(221);image(wcodemat(X,192)),colormap(map);title('原始图像');

subplot(222);image(codx),colormap(map);title('一层分解后各层系数图像');

subplot(223);image(wcodemat(rx,192)),colormap(map);title('压缩图像');

subplot(224);image(codrx),colormap(map);title('处理后各层系数图像');

%求压缩信号的能量成分

per=norm(rx) rm(X)

per =1.0000

%求压缩信号与原信号的标准差

err=norm(rx-X)

err =

586.4979
这个程序如何实现

Ⅷ 谁能帮我运行一下这个人脸识别的代码 。Matlab的代码,急需啊!把运行的数据和运行结果截图给我,谢谢!

[email protected]

求程序

程序执行过程为:

程序运行后首先提示将TestDatabase,TrainDatabase两个文件夹添加到路径中

然后提示从TestDatabase中随便选择一张图片,程序会从TrainDatabase中选出与刚才所选相同的图片

效果如下

程序挑出来的图片

主程序代码如下:

clear all
clc
close all

% You can customize and fix initial directory paths
TrainDatabasePath = uigetdir(strcat(matlabroot,'work'), 'Select training database path' );
TestDatabasePath = uigetdir(strcat(matlabroot,'work'), 'Select test database path');

prompt = {'Enter test image name (a number between 1 to 10):'};
dlg_title = 'Input of FLD-Based Face Recognition System';
num_lines= 1;
def = {'1'};

TestImage = inputdlg(prompt,dlg_title,num_lines,def);
TestImage = strcat(TestDatabasePath,'',char(TestImage),'.jpg');
im = imread(TestImage);

T = CreateDatabase(TrainDatabasePath);
[m V_PCA V_Fisher ProjectedImages_Fisher] = FisherfaceCore(T);
OutputName = Recognition(TestImage, m, V_PCA, V_Fisher, ProjectedImages_Fisher);

SelectedImage = strcat(TrainDatabasePath,'',OutputName);
SelectedImage = imread(SelectedImage);

imshow(im)
title('Test Image');
figure,imshow(SelectedImage);
title('Equivalent Image');

str = strcat('Matched image is : ',OutputName);
disp(str)

阅读全文

与人脸识别代码matlab相关的资料

热点内容
专题学习网站源码 浏览:163
jsphead什么 浏览:88
gps串口数据怎么发送 浏览:968
win10文件主页共享查看 浏览:411
中国联通有哪些app是免流的 浏览:176
边做边保存的文件找不到了 浏览:858
win10照片应用文件夹名称 浏览:966
编程如何解决资金的原子性 浏览:638
如何制作广角镜头矫正文件 浏览:513
在网页开发中应该选用哪个数据库 浏览:742
iphone5移动卡贴 浏览:990
电脑文件的格式 浏览:127
extjs的xtype 浏览:959
suse11iso文件要u盘安装 浏览:153
如何将报表统计数据转化为图形 浏览:444
如何寄快递材料文件 浏览:265
java构造方法private 浏览:475
手机文件找回恢复 浏览:516
word怎么把u盘里的文件拔掉 浏览:976
港版苹果用的插排 浏览:1000

友情链接