⑴ 如何结合pca算法和最近邻法进行人脸识别
%一个修改后的PCA进行人脸识别的Matlab代码
% calc xmean,sigma and its eigen decomposition
allsamples=[];%所有训练图像
for i=1:40
for j=1:5
a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
% 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);
[d2 index]=sort(d1); %以升序排序
cols=size(v,2);% 特征向量矩阵的列数
for i=1:cols
vsort(:,i) = v(:,index(cols-i+1) ); % vsort 是一个M*col(注:col一般等于M)阶矩阵,保存的是按降序排列的特征向量,每一列构成一个特征向量
dsort(i) = d1( index(cols-i+1) ); % dsort 保存的是按降序排列的特征值,是一维行向量
end %完成降序排列
%以下选择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;
% (训练阶段)计算特征脸形成的坐标系
while (i0)
base(:,i) = dsort(i)^(-1/2) * xmean' * vsort(:,i); % base是N×p阶矩阵,除以dsort(i)^(1/2)是对人脸图像的标准化,详见《基于PCA的人脸识别算法研究》p31
i = i + 1;
end
% add by wolfsky 就是下面两行代码,将训练样本对坐标系上进行投影,得到一个 M*p 阶矩阵allcoor
allcoor = allsamples * base;
accu = 0;
%
for i=1:40
for j=6:10 %读入40 x 5 副测试图像
a=imread(strcat('D:\rawdata\ORL\s',num2str(i),'\',num2str(j),'.pgm'));
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)/5 )+1;
class2=floor(index2(2)/5)+1;
class3=floor(index2(3)/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 %输出识别率
函数调用是定义函数,然后用函数名进行调用就可以了
⑵ unscrambler中的光谱矩阵是什么意思
二维光谱技术
指用一个低频率的扰动作用在样品上,通过测定比振动弛豫慢许多,但与分子尺寸运动紧密相关的不同弛豫过程的红外振动光谱,将数学相关分析技术用于红外光谱中得到二维红外相关光谱图。这些慢的弛豫过程可以用现有的普通红外光谱仪,通过简单的时间分辨技术加以研究。
二维光谱技术的基本概念最早起源于30年前的核磁共振(NMR)领域。二维核磁谱是通过多脉冲技术激发核自旋,采集时间域上原子核自旋弛豫过程的衰减信号,经双傅里叶变换得到的。其显着的特点是:将光谱信号扩展到第二维上以提高光谱分辨率,简化含有许多重叠峰的复杂光谱;通过选择相关的光谱信号鉴别和研究分子内和分子间的相互作用。各种二维核磁共振技术(2DNMR)在核磁共振光谱学家的努力下已建立起来并得到了广泛的应用。但是使人感到奇怪的是,尽管二维光谱在核磁领域蓬勃发展,但二维相关技术却一直没能深入其他的光谱分支,如红外、拉曼、紫外、荧光等。
阻碍二维技术发展的一个重要原因是普通光谱的时间标尺(timescale)要比核磁的时间标尺短得多。举例来说,红外吸收光谱观察的分子振动时间标尺在皮秒数量级,而核磁中时间标尺数量级一般在毫秒到微秒间。因此基于多重射频脉冲励磁技术的二维核磁技术可以成功地在精密而昂贵的核磁仪器上实现,却不能在普通的红外、拉曼和紫外等仪器上实现。
1986年,Noda就二维NMR技术的理论提出了一个概念性的突破,他把磁实验中的多重射频励磁看作是一种对体系的外部扰动。以这种全新的视角简化看待二维核磁技术,就可以轻易地设计出完全不同的二维光谱实验技术。
为此,1989年Noda提出一项新的实验方案,用一个低频率的扰动作用在样品上,通过测定比振动弛豫慢许多,但与分子尺寸运动紧密相关的不同弛豫过程的红外振动光谱,将数学相关分析技术用于红外光谱中得到二维红外相关光谱图。这些慢的弛豫过程可以用现有的普通红外光谱仪,通过简单的时间分辨技术加以研究。于是,最初的二维红外相关光谱技术的理论就此诞生。
然而最初的二维红外相关光谱技术的理论中,外扰的波形仅局限于正弦波形。这就极大地限制了二维相关技术在普通光谱上的进一步发展。1993年,Noda再次对已有理论进行修正,破除了外扰波形的局限,并且用Hilbert转换替代了原先二维相关分析中的Fourier转换,由此缩短了二维处理的时间,并把新的理论正式命名为“广义二维光谱技术技术”。至此,应用的外扰的波形可以多种多样,从简单的正弦波、一串脉冲,到随机的噪音或静态的物理变化,均可应用于外扰。如电场、热、磁、化学、机械甚至声波等变化。每种外扰对体系的影响是独特而有选择性的,由特定的宏观刺激和微观或分子级别的相互作用机理决定。此后,这种二维相关分析技术开始逐渐适用于拉曼、荧光、X射线衍射、GPC等其它谱学技术中。
二维光谱技术的相关方程编辑
二维光谱技术的基本想法实际非常简单。就是考虑由外扰引起的外扰变量t在Tmin和Tmax间变化时光谱强度y(ν,t)的变化。体系对外扰的反应经常表现为有特征的光谱变化,称作动态光谱(dynamicspectrum)。因此,二维相关实际上测的就是动态光谱的变化。外扰变量t经常被当作时间,但它也可以是任意其它合理的物理变量,如温度、压强、浓度、电压等。光学变量ν可以是任何合适的光谱量化系数,如拉曼位移、红外或近红外波数、紫外波长,甚至是X光散射角。体系受外扰引起的动态光谱y(ν,t)可以正式定义为:
y(ν,t)=y(ν,t)-y(ν)Tmin≤t≤Tmax0otherwise(1)
y(ν)是体系的参比光谱。参比光谱的选择并不一定要严格一致,在大多数情况下,我们使用光谱的平均值,定义为:
y(ν)=1Tmax-Tmin∫TmaxTminy(ν,t)dt(2)
在某些应用中,我们可以通过选择在某个参考点(t=Tref)观察到的光谱作为参考光谱。参考点可以选择实验的初始状态,即在施以外扰前的足够长的时间(Tref※-∞),或是在实验开始时(Tref=Tmin),或是在实验结束时(Tref=Tmax),甚至是在体系完全不受外扰影响的时候(Tref※+∞)。当然参比光谱也可以简单地设为零,这样动态光谱就和我们观察到的光谱强度完全一致了。二维相关强度X(ν1,ν2)代表在一定外部变化t的区间内,对不同光学变量ν1和ν2的光学强度变化y(ν1,t)的函数进行比较。由于相关函数是计算两个互不依赖的光学变量ν1和ν2光学强度的变化,因此我们可以将X(ν1,ν2)转变为复数形式:X(ν1,ν2)=Υ(ν1,ν2)+iΧ(ν1,ν2)(3)
组成复数的相互垂直的实部和虚部分别被称作同步和异步二维相关强度。同步二维相关强度Υ(ν1,ν2)表示随着t值的变化,两个在不同光学变量下测量的互不依赖的光学强度的相似性变化。恰恰相反,异步二维相关强度Χ(ν1,ν2)表示光学强度的相异性变化。广义二维相关函数及其定义的同步和异步相关强度如下:X(ν1,ν2)=1π(Tmax-Tmin)∫∞0Y1(ω)·Y*2(ω)dω(4)
Y1(ω)=∫∞-∞y(ν1,t)e-iωtdt(5)
Y*2(ω)=∫∞-∞y(ν2,t)e+iωtdt(6)
Y(ω)是光强y(ν,t)经傅立叶变换得到,傅立叶频率ω代表y(ν,t)随外扰t变化的个体频率。由于二维相关光强的计算过程必须描绘二维光谱中的每一点,即使使用快速傅立叶算法的计算步骤来按照公式(4)计算广义二维光谱技术,数据也会多得难以想象,所以我们在计算过程中应用了适当的估算。我们在外扰t变化区间Tmin和Tmax内等间隔地选取m个动态光谱,Δt=(Tmax-Tmin)(m-1),同步二维相关强度可以简单地表示为:Υ(ν1,ν2)=1m-1∑mj=1yj(ν1)·yj(ν2)(7)
yj(νi)是外扰tj点的光学强度。
yj(νi)=y(νi,tj)i=1,2(8)
如果光谱系列并不是在外扰t上等间隔选取的,那么我们就必须进行一定调整。比如我们可以通过内插等方法使本来不均匀的光谱系列变得均匀。同步光谱就按照这个新的系列由公式(7)给出。异步二维相关光强的计算就更加困难。有许多估算方法可以对异步光谱进行合理的估算,然而最简单有效的估算方法由下式给出:Χ(ν1,ν2)=1m-1∑mj=1yj(νi)·∑mk=1Njk·yk(ν2)(9)其中Njk代表Hilbert-Noda转变矩阵的第j行第k列的元素,表示为:Njk=0j=k1π(k-j)otherwise(10)
二维光谱技术谱图最常见的表示形式就是二维contourmap。
当协方差为0时,表示两个字段线性不相关。
总结一下,PCA的优化目标是:
将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大。
⑶ 主成分分析PCA算法:为什么要对数据矩阵进行均值化
个人觉得 去均值化是为了方面后面的协方差,去均值化后各维度均值为零,
协方差中的均值也就是零了,方便求解。
具体,假设矩阵A去中心化后得到B,那么B的协方差就是B*B的转置
⑷ 用pca算法可以写一篇小论文吗
不可以。该算法的主要作用为:
1、数据压缩;
2、数据预处理;
3、图象、语音、通信的分析处理
4、降维(最主要),去除数据冗余与噪声
5、高维数据集的探索与可视化。
⑸ 求PCA人脸识别算法
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×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个人
⑹ 稀疏表示和PCA算法的关系是什么
PCA是用来特征提取和降维用的
⑺ 人脸识别PCA算法,子空间和投影到子空间怎么理解
PCA人脸识别是把所有图像看做是一个样本,每张图像看成一行向量,有N张图像就有N行,所以这个样本就可以看成是一个N行的矩阵。先求出这个矩阵的协方差矩阵,再求出这个协方差矩阵的特征值,选择特征值中前m个最大的特征值,这前m个最大的特征值,每个都对应一个特征向量(特征向量也叫做特征脸),这m个特征向量组成一个m行的特征矩阵,这个特征矩阵就是“子空间”,也叫做特征脸空间。所谓投影到子空间,就是把样本中的一张图像看成一行向量,这个向量乘以特征矩阵得到一个m维的向量,就是投影的结果,也是这张图像的特征值。
⑻ 什么“PCA算法”。
有关图像融合的一种线性算法,在MATLAB中是一种算法融合程序。