基于Python的高光谱降维操作
- 高光谱数据:点击此处可下载
- 用到的库:matplotlib、scipy、spectral
- 主要内容:主成分分析(PCA)与线性判别(LDA)
欢迎有兴趣的朋友交流指点。最后,废话不多说直接上代码😄
import matplotlib.pyplot as plt
from scipy.io import loadmat
import spectral as spy
# PCA主成分分析
def pca_dr(src):
pc = spy.principal_components(src)
pc_98 = pc.reduce(fraction=0.98) # 保留98%的特征值
print(len(pc_98.eigenvalues)) # 剩下的特征值数量
spy.imshow(data=pc.cov, title="pc_cov")
img_pc = pc_98.transform(input_image) # 把数据转换到主成分空间
spy.imshow(img_pc[:, :, :3], stretch_all=True) # 前三个主成分显示
return img_pc
# LDA线性判别
def lda_dr(src, gt):
classes = spy.create_training_classes(src, gt)
fld = spy.linear_discriminant(classes)
print(len(fld.eigenvalues))
img_fld = fld.transform(src)
spy.imshow(img_fld[:, :, :3])
return img_fld
input_image = loadmat('D:/Hyper/Indian_pines_corrected.mat')['indian_pines_corrected']
gt = loadmat("D:/Hyper/Indian_pines_gt.mat")['indian_pines_gt']
pca_dr(input_image)
lda_dr(input_image, gt)
plt.pause(60)
spy.principal_components
计算数据的主成分,并返回一个主成分的平均值、协方差、特征值和特征向量。该对象还包含一个将数据旋转到主成分空间的变换方法,以及一个将特征向量数量减小的方法。