基于MATLAB的高光谱遥感数据的PCA运用

基于MATLAB的高光谱遥感数据的PCA运用

  1. 高光谱遥感数据下载
    高光谱遥感数据来源
    本文章以Indian Pines包为例。该数据文件下包括Indian_pines_corrected.mat和Indian_pines_gt.mat文件。
  2. 数据包导入matlab
    下载后的数据文件夹中存在两个以.mat结尾的文件。其中文件名中含有corrected的.mat文件为原始三维的遥感数据。剩下的一个.mat文件是遥感数据的lable标签,它是二维数据。

导入数据代码如下:

filename = ['Indian Pines\Indian_pines_corrected'];%单引号中存放数据文件的地址,地址因人而异,和你存放电脑中的具体位置有关。
X=load(filename);%matlab读取数据

注:导入matlab中的遥感数据是以结构体(struct)的形式存在,不能直接当做矩阵进行运算。矩阵数据是结构体中的一个属性,因此需要使用“.”来调用其中的矩阵信息。
3. 对数据进行降维
(。。大神,此小段可以跳过。。)将三维数据降维成二位数据,需要使用软件自带的一个函数(reshape( )函数),关于reshape( )函数的具体使用可以在Command window中输入 help reshape进行查看运用的规则。

在降维之前需要确定最终生成二维矩阵的大小,在matlab中我们可以使用自带的size( )函数对数据的大小进行查看。例如本例中查看Indian_pines_corrected.mat数据文件中的矩阵大小,代码如下:

A=X.indian_pines_corrected;%这里在上面的注 解释过了。
[m,n,p]=size(A);%其中m表示三维矩阵的行,n表示列,p表示页,A是作为参数传入size()

数据降维的关键思想:如何将三维数据压缩成二维,举例便知。
有一个5*6*7的三维矩阵,是否可以转换成7*30的二维矩阵?答案是可以的。嘻嘻
分析:5*6*7的三维矩阵中包含的元素个数是210个,转换之后的二维矩阵所包含的元素个数是不是也是210,so这种转换没毛病 烙铁。
废话不多说,直接上降维代码;

t=m*n;
M=reshape(A,p,t);%A为传入的三维数组,p为最终得到二维矩阵行的个数,t为最终得到二维矩阵列的个数
M=M';%将M矩阵转置

至于为何转置,请参考下面这位博主的文章。降维需要转置
4. 进行主成分分析(PCA)
使用matlab工具箱自带的princomp( )函数。
代码如下:

[COEFF,SCORE,latent]= princomp(M)

COEFF,SCORE,latent三个参数代表什么含义,可以在Command window中输入 help princomp进行查看运用的规则。

这是自己的第一篇博文,肯定有许多需要改正的地方。如有发现错误,还请与我联系。欢迎讨论,共同进步·····~~~

你可能感兴趣的:(高光谱)