特征子空间 matlab,使用张量子空间分析进行图像特征值提取

*人脸识别中TesorLDAA算法Matlab程序

clc;clear;

cd E:\人脸识别\ORL人脸图库\样本:测试集\5_5\train

fdir=dir('*.bmp');

fnum1=size(fdir,1);

nbcol=255;

class=15;

% M_Xtran=0;

for i=1:fnum1

imgname=fdir(i,1).name;

d=imread(imgname);

a=double(d);

[m,n]=size(a);

Xtran(:,:,i)=a;

% Xtran(:,i)=reshape(a,m*n,1);

% M_Xtran=M_Xtran+a;

end

M_Xtran=sum(Xtran(:,:,:),3);

M_X_mean=M_Xtran/fnum1;%求均值矩阵M(X)

%计算类内均值矩阵M(X)

for i=1:class

Xtran_class_mean(:,:,i)=sum(Xtran(:,:,5*(i-1)+1:5*(i-1)+5),3)/5;

end

%计算Sw,Sv

Sw_U=0;

Sb_U=0;

Sw_V=0;

Sb_V=0;

for i=1:class

d=Xtran_class_mean(:,:,i);

for j=5*(i-1)+1:5*(i-1)+5

h=Xtran(:,:,j);

Sw_U=Sw_U+(h-d)'*(h-d);

Sw_V=Sw_V+(h-d)*(h-d)';

end

end

C_k=fnum1/class;

for i=1:class

d= Xtran_class_mean(:,:,i);

Sb_U=Sb_U+C_k*(d-M_X_mean)'*(d-M_X_mean);

Sb_V=Sb_V+C_k*(d-M_X_mean)*(d-M_X_mean)';

end

%计算投影矩阵U,V

SS_V=inv(Sw_V)*(Sb_V);

SS_U=inv(Sw_U)*(Sb_U);

[U11,D11]=eig(SS_V);

[V11,E11]=eig(SS_U);

u1=U11(:,1);

v1=V11(:,1);

d1=D11(:,1);

e1=E11(:,1);

U=u1;

V=v1;

D=d1;

E=e1;

Au=eye(m);

Av=eye(n);

for i=2:m

Bv=U'*inv(Sw_V)*U;

Mv=(Au-inv(Sw_V)*U*inv(Bv)*U')*SS_V;

[UKK,DKK]=eig(Mv);

uk=UKK(:,1);

dk=DKK(:,1);

U=[U uk];

D=[D dk];

end

for i=2:n

Bu=V'*inv(Sw_U)*V;

Mu=(Av-inv(Sw_U)*V*inv(Bu)*V')*SS_U;

[VKK,EKK]=eig(Mu);

vk=VKK(:,1);

ek=EKK(:,1);

V=[V vk];

E=[E ek];

end

%降维

Tr_D=sum(D(1,:));

for i=1:m

Tr_d=sum(D(1,1:i));

Per_d_D=Tr_d/Tr_D;

if Per_d_D>=0.90

k=i;

break,end

end

Tr_E=sum(E(1,:));

for i=1:n

Tr_e=sum(E(1,1:i));

Per_e_E=Tr_e/Tr_E;

if Per_e_E>=0.90

l=i;

break,end

end

u=U(:,1:k);

v=V(:,1:l);

% % %查看矩阵U,V的正交性

S_U_1=U*U';

S_V_1=V*V';

% %还原图像检测投影矩阵的可行性

% figure(1)

% t1=Xtran(:,:,1);

% imshow(uint8(t1));

% grid on

% figure(2)

% t2=U*U'*t1*V*V';

% imshow(uint8(t2));

% grid on

% figure(3)

% t3=u*u'*t1*v*v';

% imshow(uint8(t3));

% grid on

% %叠代

% %计算Sw,Sv

Sw_U=0;

Sb_U=0;

Sw_V=0;

Sb_V=0;

for i=1:class

d= Xtran_class_mean(:,:,i);

for j=5*(i-1)+1:5*(i-1)+5

h=Xtran(:,:,j);

Sw_U=Sw_U+(h-d)'*u*u'*(h-d);

Sw_V=Sw_V+(h-d)*v*v'*(h-d)';

end

end

C_k=fnum1/class;

for i=1:class

d= Xtran_class_mean(:,:,i);

Sb_U=Sb_U+C_k*(d-M_X_mean)'*u*u'*(d-M_X_mean);

Sb_V=Sb_V+C_k*(d-M_X_mean)*v*v'*(d-M_X_mean)';

end

% %二次计算投影矩阵U,V

SS_V=inv(Sw_V)*(Sb_V);

SS_U=inv(Sw_U)*(Sb_U);

[U11,D11]=eig(SS_V);

[V11,E11]=eig(SS_U);

u1=U11(:,1);

v1=V11(:,1);

d1=D11(:,1);

e1=E11(:,1);

% fprintf('d1=%d\n',d1);

% fprintf('e1=%d\n',e1);

U=u1;

V=v1;

D=d1;

E=e1;

Au=eye(m);

Av=eye(n);

for i=2:m

Bv=U'*inv(Sw_V)*U;

Mv=(Au-inv(Sw_V)*U*inv(Bv)*U')*SS_V;

[UKK,DKK]=eig(Mv);

uk=UKK(:,1);

dk=DKK(:,1);

U=[U uk];

D=[D dk];

end

for i=2:n

Bu=V'*inv(Sw_U)*V;

Mu=(Av-inv(Sw_U)*V*inv(Bu)*V')*SS_U;

[VKK,EKK]=eig(Mu);

vk=VKK(:,1);

ek=EKK(:,1);

V=[V vk];

E=[E ek];

end

% Tr_d1_D=trace(d1)/trace(D);

% Tr_e1_E=trace(e1)/trace(E);

% %查看矩阵U,V的正交性

S_U_2=U*U';

S_V_2=V*V';

% %

% % %还原图像检测投影矩阵的可行性

% t4=U*U'*t1*V*V';

% figure(4)

% imshow(uint8(t4));

% grid on

% % 降维

% %选取占特征值综合的X%的特征值对应的特征向量组成投影矩阵,

Tr_D=sum(D(1,:));

for i=1:m

Tr_d=sum(D(1,1:i));

Per_d_D=Tr_d/Tr_D;

if Per_d_D>=0.90

k=i;

break,end

end

Tr_E=sum(E(1,:));

for i=1:n

Tr_e=sum(E(1,1:i));

Per_e_E=Tr_e/Tr_E;

if Per_e_E>=0.90

l=i;

break,end

end

u=U(:,1:k);

v=V(:,1:l);

% % %查看矩阵u,v的正交性

% S_u=u*u';

% S_v=v*v';

%

% % %还原图像检测投影矩阵的可行性

% t5=u*u'*t4*v*v';

% figure(5)

% imshow(uint8(t5));

% grid on

% figure(5)

% z=u*u'*M_X_mean*v*v';

% imshow(uint8(z));

% grid on

%把图像矩阵影射到张量子空间中

for i=1:fnum1

d=Xtran(:,:,i);

e=u'*d*v;

Ytran(:,:,i)=e;

end

% % %查看投影到张量子空间后的图像形状

% c=Ytran(:,1);

% d=reshape(c,k,l);

% figure(6)

% imshow(uint8(d));

% grid on

%计算投影到张量子空间中的图像类内均值

% for i=1:class

% Ytran_class_mean(:,:,i)=sum(Ytran(:,:,10*(i-1)+1:10*(i-1)+10),3)/10;

% end

%人脸识别

cd E:\人脸识别\ORL人脸图库\样本:测试集\5_5\test

fdir=dir('*.bmp');

fnum2=size(fdir,1);

for i=1:fnum2

imgname=fdir(i,1).name;

d=imread(imgname);

a=double(d);

[m,n]=size(a);

Xtest(:,:,i)=a;

end

for i=1:fnum2

f=Xtest(:,:,i);

g=u'*f*v;

Ytest(:,:,i)=g;

end

correct=0;

error=0;

for i=1:fnum2

h=Ytest(:,:,i);

for j=1:fnum1

f=Ytran(:,:,j);

% dis(i,j) =sqrt(sum(sum((f-h)*(f-h)')));

% r=(f-h)*(f-h)';

% [P,Q]=eig(r);

% dis(i,j)=sqrt(trace(Q*Q'));

% %识别率为X%=95%, Y=163,Z=81.5

dis(i,j) = sqrt(sum(sum((f-h).^2)));

%识别率为 X%=95%,Y=168 ,Z=84

% X%=90%,Y=168,Z=84

end

end

for i=1:fnum2

[mind,ind] = min(dis');

if ceil(ind(i)/5) == ceil(i/5)

correct = correct + 1;

else

error = error + 1;

end

end

correct_detection=correct/(correct+error);

fprintf('correct=%d\n',correct);

fprintf('error=%d\n',error);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在MATLAB中,可以使用函数`eig`对矩阵进行特征值分解,得到信号空间和噪声空间特征值分解是一种重要的矩阵分解方法,它将一个方阵分解为特征向量矩阵和对角矩阵。在信号处理中,我们可以将信号和噪声分别看作是矩阵的特征向量和特征值。因此,将信号矩阵进行特征值分解可以得到信号空间,而将噪声矩阵进行特征值分解可以得到噪声空间。 假设我们有一个大小为n×n的矩阵A,我们可以使用以下代码在MATLAB进行特征值分解: [V,D] = eig(A) 其中V是特征向量矩阵,D是对角矩阵,对角线上的元素为A的特征值特征向量矩阵V的每一列代表一个特征向量,对应于一个特征值。我们可以通过对特征值进行排序,选择特征值较大的前k个特征向量作为信号空间,而剩余的特征向量作为噪声空间。 具体实现时,我们可以根据特征值大小对特征向量进行排序,然后选择前k个特征向量构成信号空间。代码示例如下: [~,I] = sort(diag(D),'descend'); signal_subspace = V(:,I(1:k)); 而噪声空间则是剩下的特征向量,可以使用以下代码得到: noise_subspace = V(:,I(k+1:end)); 通过这种方式,我们可以利用MATLAB对矩阵进行特征值分解,得到信号空间和噪声空间,从而进行信号处理和噪声处理的相关工作。 ### 回答2: 在Matlab中,可以使用eig函数对矩阵进行特征值分解,从而得到信号空间和噪声空间特征值分解是将一个矩阵表示为特征值特征向量的乘积的过程。对于一个n×n的矩阵A,特征值分解可以表示为A = V * D * V^-1,其中V是特征向量矩阵,D是特征值组成的对角矩阵。 在Matlab中,可以通过以下代码实现矩阵的特征值分解: [V, D] = eig(A) 其中,A为待分解的矩阵,V是由特征向量组成的矩阵,D是由特征值形成的对角矩阵。 通过特征值分解,我们可以得到矩阵A的特征值特征向量。特征值表示了矩阵A的特征,而特征向量表示了在该特征下的方向。从特征值特征向量中,我们可以进一步得到信号空间和噪声空间。 信号空间是由与信号相关的特征值特征向量组成的空间。在信号空间中,特征向量对应的特征值较大,代表了较强的信号成分。 噪声空间是由与噪声相关的特征值特征向量组成的空间。在噪声空间中,特征向量对应的特征值较小,代表了较弱的噪声成分。 根据特征值分解得到的特征向量矩阵V,我们可以通过选取对应较大特征值特征向量,得到信号空间;通过选取对应较小特征值特征向量,得到噪声空间。 需要注意的是,特征值分解是一种线性代数的数值算法,仅适用于方阵的情况。如果矩阵A不是方阵,则可以通过对矩阵A的转置与其乘积进行特征值分解,得到的特征向量可以表示矩阵A的左特征向量。 总结起来,Matlab特征值分解函数eig可以用于对矩阵进行特征值分解,通过特征值特征向量可以得到信号空间和噪声空间。 ### 回答3: Matlab中可以使用eig函数进行矩阵的特征值分解,通过分解可以得到信号空间和噪声空间特征值分解是指将一个矩阵分解为特征值和对应特征向量的过程。在信号处理中,我们可以将待处理的信号表示为矩阵形式,然后对该矩阵进行特征值分解。通过分解得到的特征值特征向量,可以从中提取出相应的信息。 对于信号空间,我们可以通过选取与较大特征值相对应的特征向量来得到。这些较大特征值对应的特征向量代表了信号的主要成分或重要特征,反映了信号的相对强度和主导方向。 而噪声空间则是通过选取与较小特征值相对应的特征向量得到的。这些较小特征值代表了噪声的主要成分或不重要特征,反映了噪声信号的相对弱强度和非重要方向。 特征值分解的结果可以帮助我们对信号和噪声进行分离和分析。通过分离出的信号空间,我们可以提取出信号的主要成分,进一步进行处理和分析。而噪声空间则可以用于估计和去除噪声,从而提高信号的质量和准确性。 总之,Matlab中的特征值分解能够通过提取矩阵的特征值特征向量来得到信号空间和噪声空间,从而对信号进行分析和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值