matlab对一幅图片进行主成分分析的目的是什么

2024-12-30 21:36:12
推荐回答(2个)
回答1:

数据说明:采用的数据源是从别人那里拷的2012年全年的Sea Surface Temperature(海标温度,SST)数据,一直想找一份比较好的主成分分析数据,也没找到。

Matlab自身有主成分分析的函数princomp,其中返回的第二个数据就是样本经过K-L变换后的各个成分数据,第三个参数就是特征值大小。(第一个参数貌似是协方差矩阵,我还没看)

PCA的基本原理:

一般图像的线性变换可以表示为:

y=Tx,

式中X为待变换图像数据矩阵,Y为变换后的数据矩阵,T为实现这一线性变换的变换矩阵。如果变换矩阵T是正交矩阵,并且它是由原始图像数据矩阵X的协方差矩阵S的特征向量所组成,则该线性变换成为主成分分析,并且成Y矩阵的每一行矢量为变换后的一个主成分。

具体的算法步骤为:

马上要走了,偷个懒,直接把握之前做的一个PPT放出来了(话说也真是懒啊,这n多年没更新一点内容能不懒嘛!!!(⊙o⊙)…)

以下为代码实现部分:

+ View Code

处理的结果对比显示:

主成分结果显示(按照特征值由大到小):

这个结果是和它内部的函数运算出来的结果是一样的:

1234567891011121314151617

% PCA[coeff score latent] = princomp(sst_data');[m,n] = size(score);%figure;for i = 1:len    outpic = score(:,i);         min_num = min(outpic);    max_num = max(outpic);         outpic = reshape(outpic,360,180);    outpic = rot90(outpic);    outtitle = ['特征值=' num2str(latent(i))];    subplot(4,3,i),imshow(outpic,[min_num max_num]),title(outtitle);%显示,并输出特征值    colorbar;end

回答2:

先求协方差矩阵,之后对协方差矩阵求特征值与特征向量,将特征从大到小排列,取其贡献率大于85%~95%的特征值与特征向量作为其主元与负荷,之后根据负荷求得分。

说得有点抽象,你可以参考下面的例子

%% 导入原始数据
[Xrow, Xcol] = size(X); % Xrow:样本个数 Xcol:样本属性个数

%% 数据预处理,进行标准化出理,处理后均值为0方差为1