Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
 
 
主题工具 显示模式
旧 2008-05-23, 21:27   #1
lidandan08
初级会员
 
注册日期: 2008-04-15
年龄: 38
帖子: 12
声望力: 18
lidandan08 正向着好的方向发展
默认 pca人脸识别

各位大侠们,本人现急于交论文,以前也没学过MATLAB,在网上下的程序不怎么懂,运行结果不太对,望高手们指教!:cry: :cry:
程序如下:
%PCA人脸识别

imgdata=[];%训练图像矩阵
for i=1:40
for j=1:5
a=imread(strcat('C:\Documents and Settings\Administrator\桌面\orl\s',num2str(i),'\',num2str(j),'.jpg'));
% imshow(a);
b=a(1:112*92); % b是行矢量 1×N,其中N=10304
b=double(b);
imgdata=[imgdata; b]; % imgdata 是一个M * N 矩阵,imgdata中每一行数据一张图片,M=200
end;
end;
imgdata=imgdata'; %每一列为一张图片
imgmean=mean(imgdata,2); % 平均图片,N维列向量
for i=1:200
minus(:,i) = imgdata(:,i)-imgmean; % minus是一个N*M矩阵,是训练图和平均图之间的差值
end;

covx=minus'* minus; % M * M 阶协方差矩阵


[COEFF, latent,explained] = pcacov(covx'); %PCA,用协方差矩阵的转置来计算以减小计算量




%选择构成95%的能量的特征值
i=1;
proportion=0;
while(proportion < 95)
proportion=proportion+explained(i);
i=i+1;
end;
p=i-1;


% 训练得到特征脸坐标系
i=1;
while (i<=p && latent(i)>0)
base(:,i) = latent(i)^(-1/2)*minus * COEFF(:,i); % base是N×p阶矩阵,用来进行投影,除以latent(i)^(1/2)是对人脸图像的标准化
i = i + 1;
end

% 将训练样本对坐标系上进行投影,得到一个 p*M 阶矩阵为参考

reference = base'*minus;

accu = 0;




accu = 0; %计算准确度

% 测试过程
for i=1:40
for j=6:10 %读入40 x 5 副测试图像
a=imread(strcat('C:\Documents and Settings\Administrator\桌面\orl\s',num2str(i),'\',num2str(j),'.jpg'));
b=a(1:10304);
b=double(b);
b=b';

object = base'*(b-imgmean);
distance=100000;

%最小距离法,寻找和待识别图片最为接近的训练图片
for k=1:200
temp= norm(object - reference(:,k));
if (distance > temp)
which = k;
distance = temp;
end;
end;
temp1 = which/5;
if (temp1 == floor(temp1))
left = (temp1-1)*5;
right = temp1*5;
else
left = floor(temp1)*5;
right = ceil(temp1)*5;
end;

if (((i-1)*5+j-5>left)&&((i-1)*5+j-5<=right)) %正确识别
accu = accu+1;
end;
end;
end;

accuracy=accu/200 %输出识别率
lidandan08 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码


相似的主题
主题 主题作者 版面 回复 最后发表
[求助]关于数组的2个问题 wolfnet MATLAB论坛 1 2008-06-24 22:03
[求助]拟合数据点 hy85220 MATLAB论坛 2 2008-06-24 01:33
[求助]求救一个看似简单的问题! tanrenzhe603 MATLAB论坛 2 2008-06-23 18:20
【求助】基带数字通信编码器matlab仿真实现 rayzhangysu MATLAB论坛 1 2008-03-22 13:25


所有时间均为北京时间。现在的时间是 13:10


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.