mondeo_2008 发表于 2007-5-18 10:18

请高手帮忙看下程序,有点问题

我运行这个程序老出现:Warning: Matrix is close to singular or badly scaled.
                                             Results may be inaccurate. RCOND = 3.631628e-022

运行的结果:accuracy =19(与理想结果相差很大,理想结果应该90多)


大家看前先说下,我分段运行求ST和SB的程序都没出现Warning,直到求(ST-SB)的逆矩阵f 乘以SB得到a3,然后求a3的特征向量时候会出现Warning。 望高手帮忙看下,不胜感激。   

另外这个程序开始用到的人脸库我传不上,我存在http://www.mofile.com/cn/index_storage.jsp
用户名:mondeo2008         密码:123456          进去点提取文件就可以,拜托了!谢谢

代码:
load orl_faces%加载orl数据库faces
a=faces; %644*400



%取出所有训练图像y 是644*200
y=[];
for i=1:40
    for j=1:5    %相当于 for(i=0;i<mm;i++)
      y=;%a(:,(i-1)*10+j)是一个列向量   y=就是很多列向量组成一个矩阵x
    end
end


%估计总体的协差阵ST
a2=y'; %转置
yy=mean(a2); %求均值,yy:1*644
xmean=[];
for i=1:5*40
    xmean=;
end
xmean= xmean'
M= xmean* xmean';
M=(1/5*40)*M;% M为总体协差阵   M是ST



%求SB
x=[];
ymean=[];
for i=1:40
for j=1:5    %相当于 for(i=0;i<5;i++)
x=;%a(:,(i-1)*10+j)是一个列向量      x=就是很多列向量组成一个矩阵x
end
a1=x'; %转置
xx=mean(a1); %求均值,xx:1*644
ymean=;
end
ymean= ymean'
N= ymean* ymean';
N=(1/40)*N;%N是SB
S=M-N;%S是SW
   

a3=[];
f=inv(S);%算矩阵SW的逆矩阵
a3=f*N;%SW的逆乘以SB
=eig(a3);
Y=sort(v);
Z=[];
for i=1:39
    Z=;
end
w=Z;
B=w'*x;%将644维的X投影到39维的Y上





%输入查询图像p
accu=0;
for m=1:40
    for n=6:10
       p=a(:,(m-1)*10+n);
%计算查询图象p的投影坐标
Q=w'*p;
% 计算出p与所有样本图象X间的欧几里得距离
      distance=[];
      fork=1:size(B,2)
             e=Q-B(:,k);
             temp=sqrt(sum(e.^2));
             mag=temp;
             distance=; %数组distance存放距离
      end
                =sort(distance);
             %最近邻域判别法
      class=ceil(index2(1)/5); % ceil向正取整,class:距离最近的类别
         if class==m;
         accu=accu+1; %记录识别成功次数
         end      
end
end
accuracy=(accu/200)*100



   
   

mondeo_2008 发表于 2007-5-18 10:33

忘了说MOFILE网站文件提取码

匿名提取:http://pickup.mofile.com/0210200032816447
或者登陆后输入提取码0210200032816447
页: [1]
查看完整版本: 请高手帮忙看下程序,有点问题