基于MATLAB的高光谱遥感数据的PCA运用php
高光谱遥感数据下载
高光谱遥感数据来源
本文章以Indian Pines包为例。该数据文件下包括Indian_pines_corrected.mat和Indian_pines_gt.mat文件。
数据包导入matlab
下载后的数据文件夹中存在两个以.mat结尾的文件。其中文件名中含有corrected的.mat文件为原始三维的遥感数据。剩下的一个.mat文件是遥感数据的lable标签,它是二维数据。
导入数据代码以下:html
filename = ['Indian Pines\Indian_pines_corrected'];%单引号中存放数据文件的地址,地址因人而异,和你存放电脑中的具体位置有关。
X=load(filename);%matlab读取数据
注:导入matlab中的遥感数据是以结构体(struct)的形式存在,不能直接当作矩阵进行运算。矩阵数据是结构体中的一个属性,所以须要使用“.”来调用其中的矩阵信息。
3. 对数据进行降维
(。。大神,此小段能够跳过。。)将三维数据降维成二位数据,须要使用软件自带的一个函数(reshape( )函数),关于reshape( )函数的具体使用能够在Command window中输入 help reshape进行查看运用的规则。web
在降维以前须要肯定最终生成二维矩阵的大小,在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这种转换没毛病 烙铁。
废话很少说,直接上降维代码;svg
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进行查看运用的规则。工具
这是本身的第一篇博文,确定有许多须要改正的地方。若有发现错误,还请与我联系。欢迎讨论,共同进步·····~~~atom