高光谱图像基于MATLAB的PCA降维

工具:matlab,本人使用的是2016a
使用数据集用公开的Salinas数据集为例,Salinas数据集为512*217*204,即它有204个波段,我们要把它从204维降至3维。

matlab中内含了进行PCA降维的函数,但这个函数输进去的数据要是二维的,所以我们先用resharp函数把原矩阵处理成111104*204的矩阵M
再使用自带的降维函数:
[pc,score,latent,tsquare] = pca(M)

latent用来计算降维后取多少维度能够达到自己需要的精度,
通过下面的代码运行结果可以得到取pc中对应每一维度对原始数据的精度:
在命令行输入
cumsum(latent)./sum(latent)
部分截如下
高光谱图像基于MATLAB的PCA降维_第1张图片
我们可以看到只去取第一维的话和原始数据的准确度只有74.4%,我们取到第三维,此时已有99%的精度,一般来说取到90%以上即可。

再取前三维,把矩阵还原为三维。此时便已完成了对高光谱图像的降维。

完整代码如下:
M=reshape(d,111104,204);
[pc,score,latent,tsquare] = pca(M);
feature_after_PCA=score(:,1:3);
RES=reshape(feature_after_PCA,512,217,3);

导入进来的矩阵命名为d

把它转为图片看看效果:
imwrite(RES(:,:,1),’1.jpg’);

你可能感兴趣的:(matlab)