五分钟搞定百度网盘Mac版免费SVIP:极速下载完全指南
2026/6/9 2:49:03
以下是基于文档中高光谱数据处理的核心代码及输出示例总结:
import spectral # 读取ENVI格式数据(支持.raw/.spe/.lan等) img = spectral.envi.read_envi(file='my_data.hdr', image='my_data')在使用spectral(SPy)库处理遥感数据时,这些文件通常都必须配合一个同名的.hdr头文件才能被正确读取。
以下是这三种格式的具体解释:
📂 1. raw (Raw Binary)
.hdr文件。.hdr文件中记录了数据的维度(行、列、波段数)、数据类型(如float32)、存储方式(BSQ/BIL/BIP)等元数据。image='my_data.raw'。📂 2. spe (Spectral Image)
.spe来表明其光谱属性。处理方式与.raw完全一致,同样需要.hdr头文件来解释数据结构。📂 3. lan (Landsat Image)
.lan曾被用作某些图像处理结果的输出后缀。在spectral库的文档中,它被列为支持的读取格式之一。.raw类似,但在某些特定的数据集(如经典的 AVIRIS 数据集示例)中会出现。# 加载完整数据为多维数组 data = img.load() # 读取元数据(坐标系、变换系数) metadata = img.metadata projection = metadata['pseudo projection info'] rpc = metadata['rpc info']这三行代码是处理高光谱遥感数据时读取关键元数据的操作,具体含义如下:
1.metadata = img.metadata
img中提取元数据(metadata)img是通过spectral库(如open_image()或read_envi())加载的高光谱数据对象,其metadata属性包含数据的附加信息(如坐标系、波段信息、采集参数等)。此操作将元数据存储为字典对象metadata。2.projection = metadata['pseudo projection info']
'pseudo projection info'是 ENVI 格式文件中存储投影信息的特定键名,其值通常是一个列表或字符串,包含:GEOGCS或投影坐标系PROJCS)WGS84)UTM、Albers等)meter或degree)['PROJCS["WGS84_UTM_Zone_50N", ...]', 'UNIT["meter",1]'] # 表示 WGS84 坐标系下的 UTM 投影3.rpc = metadata['rpc info']
# 获取前10个波段子集 subset = img.extract(0, 10) # 读取单个波段 data0 = img.read_band(0) # 获取波长信息 wavelength_units = img.bands.band_unit # 波长单位 wl = img.bands.centers # 中心波长 bandwidth = img.bands.bandwidths # 光谱分辨率 # 输出示例: # [10.0, 8.0, 12.0] # 单位:纳米(nm)from spectral import * img = open_image('92AV3C.lan') #每个波段对应特定波长范围的光谱信息。29, 19, 9 表示选择第 29、19、9 个波段(按波长顺序排列)作为 RGB 三通道,用于生成彩色图像 view = imshow(img, (29, 19, 9)) # 显示RGB合成图像 save_rgb('rgb.jpg', img, ) # 保存为RGB图像输出示例:
ImageView object: Display bands : (29, 19, 9) RGB data limits : R: [2054.0, 6317.0] G: [2775.0, 7307.0] B: [3560.0, 7928.0](m, c) = kmeans(image=img, nclusters=20, max_iterations=30) # 可视化聚类中心 import matplotlib.pyplot as plt plt.figure() for i in range(c.shape): plt.plot(c[i]) plt.grid()# 加载真实标签 gt = open_image('92AV3GT.GIS').read_band(0) # 创建训练集并训练分类器 classes = create_training_classes(img, gt) gmlc = GaussianClassifier(classes) clmap = gmlc.classify_image(img) # 分类结果图 # 显示分类结果与误差 gtresults = clmap * (gt != 0) gterrors = gtresults * (gtresults != gt) imshow(classes=gterrors) # 误差图# 计算主成分 pc = principal_components(img) # 保留99.9%方差的主成分 pc_0999 = pc.reduce(fraction=0.999) img_pc = pc_0999.transform(img) # 降维后数据 # 可视化前3个主成分 imshow(img_pc[:, :, :3], stretch_all=True)# 1. 数据预处理(PCA降维) from sklearn.decomposition import PCA X = img.load().reshape((-1, img.shape[-1])) pca = PCA(n_components=30) X_pca = pca.fit_transform(X) # 2. 划分训练集 from sklearn.model_selection import train_test_split y = img.read_band(145) # 真实标签 X_train, X_test, y_train, y_test = train_test_split(X_pca, y, test_size=0.3) # 3. SVM分类 from sklearn.svm import SVC clf = SVC(kernel='linear') clf.fit(X_train, y_train) # 4. 评估结果 from sklearn.metrics import classification_report y_pred = clf.predict(X_test) print(classification_report(y_test, y_pred))输出示例:
precision recall f1-score support 0 0.95 0.92 0.93 150 1 0.88 0.93 0.90 120 accuracy 0.91 270 macro avg 0.91 0.92 0.92 270 weighted avg 0.92 0.91 0.92 270spectral:高光谱数据处理核心库。scikit-learn:机器学习算法(分类、降维)。matplotlib:可视化光谱曲线与结果。以上代码均基于文档中的实际案例,适用于高光谱数据的读取、分析、分类及应用开发。