工具: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)
部分截如下
我们可以看到只去取第一维的话和原始数据的准确度只有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’);