高光谱数据集全攻略:从下载到预处理避坑指南
发布时间:2026/9/27 1:31:30 作者:尧图编辑部 阅读量:1,286

高光谱数据这块我前前后后折腾了快五年从最早做矿物填图到后来搞农作物估产、水质监测手里攒下来的数据集没有一百也有八十个。最头疼的从来不是算法调参而是找数据——链接失效、格式对不上、标签错位、下载下来发现是空壳这些坑我全踩过。所以当有人问我“高光谱数据集到底去哪找”的时候我干脆把自己验证过能用的资源整理成了一份清单顺带把每个数据集怎么用、坑在哪、怎么转反射率这些事一并写清楚。这篇内容适合刚入门遥感的新手也适合做深度学习训练需要批量数据的老手你拿到手就能直接下载、直接跑不用再走我走过的弯路。1. 高光谱数据集到底分几类选错了后面全白干1.1 按传感器平台划分机载、星载、地面高光谱数据集的分类方式很多但最实用的一种是按搭载平台来分因为这直接决定了你拿到的数据空间分辨率、光谱范围和后续处理流程。我见过太多人拿着一景星载数据想去做亚米级地物识别结果发现空间分辨率只有30米一个像元里混了好几种地物解混都救不回来。机载高光谱数据集的典型代表是AVIRIS和ROSIS系列。AVIRIS由NASA JPL主导覆盖400到2500纳米224个波段空间分辨率随飞行高度变化常见的有3.5米到20米不等。这类数据的优势是光谱连续性好、信噪比高适合做精细光谱分析比如矿物蚀变信息提取。缺点是幅宽窄、获取成本高公开的数据集往往只覆盖特定试验区。ROSIS更老一些波段数少115个但它的Pavia University场景几乎是高光谱分类的“MNIST”做分类入门必跑。星载高光谱数据集这几年越来越丰富。GF-5的AHSI传感器有330个波段覆盖400到2500纳米空间分辨率30米幅宽60公里这个组合在国产数据里算是相当能打的。我实测下来GF-5的L1级产品做辐射定标和大气校正之后地物光谱曲线和地面实测的吻合度不错做蚀变信息提取完全够用。另外EnMAP、PRISMA这些国外星载数据也有公开样本但下载流程相对繁琐后面会细说。地面高光谱数据集主要是便携式光谱仪采集的比如ASD FieldSpec系列。这类数据光谱分辨率极高1纳米级别但空间信息基本没有通常用来做端元提取或者验证星载/机载数据的校正结果。ICVL数据集就是典型的近景高光谱图像集用Specim相机拍的适合做图像复原和去噪研究。1.2 按任务类型划分分类、解混、检测、复原你拿数据集之前先想清楚要做什么任务不然下了一堆数据发现标签格式对不上白费功夫。分类任务需要的是“图像类别标签”典型的有Indian Pines、Pavia University、Salinas。这三个都是机载数据场景不大标注精细适合快速验证算法。Indian Pines是145×145像素220个波段去掉吸水波段后剩200个16类地物其中大部分是农作物。我建议新手从这个开始因为它的类别不平衡问题很典型能让你提前感受真实场景的难度。解混任务需要的是“图像端元光谱丰度图”像Cuprite矿区数据集就是经典选择。这个场景里有明矾石、高岭石、白云母等多种矿物USGS光谱库里有对应的参考光谱你可以直接拿来做定量评估。目标检测任务在高光谱领域比较特殊因为高光谱的目标检测通常不是“找车找船”而是“找特定矿物或异常”。所以数据集往往需要你自己从大场景里裁剪出感兴趣区域再人工标注。我做过一个燃气管道泄漏检测的项目就是用GF-5数据裁剪了管道沿线区域然后根据甲烷吸收特征波段做异常检测标注量不大但针对性很强。复原任务包括去噪、超分辨、缺失波段重建等。ICVL和Harvard都是近景高光谱图像集适合做这类研究。Harvard数据集包含50个场景每个场景有31个波段420到720纳米空间分辨率是1392×1040数据量适中下载也方便。1.3 按光谱范围划分可见近红外、短波红外、热红外光谱范围决定了你能识别什么地物。可见近红外400到1000纳米主要反映色素、水分、细胞结构等信息做植被分类和农作物长势监测够用。短波红外1000到2500纳米对矿物、含水蚀变矿物、烃类敏感做地质填图和油气探测必须用这个范围。热红外8000到14000纳米主要反映硅酸盐矿物和地表温度数据相对稀缺发射率光谱处理也更复杂。我个人的经验是如果你做农业遥感优先选可见近红外到短波红外全覆盖的数据集比如GF-5或者AVIRIS。如果只做植被分类可见近红外就够数据量小、处理快。如果做矿物填图短波红外是底线最好能覆盖到2200纳米以后因为很多黏土矿物的吸收特征在2200到2400纳米之间。2. 我验证过能用的高光谱数据集清单2.1 经典机载数据集入门必跑的三个Indian Pines是我推荐给所有人的第一个数据集。它由AVIRIS传感器在1992年采集于美国印第安纳州的一个农业试验区空间分辨率20米图像大小145×145像素原始波段数220个。去掉覆盖水汽吸收的波段后通常保留200个波段用于分析。16类地物包括玉米、大豆、小麦、干草等每类样本数从几十到上千不等类别不平衡非常明显。下载方式普渡大学的工程系网站有公开链接直接搜“Indian Pines dataset Purdue”就能找到。文件格式是MATLAB的.mat文件里面包含数据矩阵和标签矩阵。我实测下载速度一般但链接稳定不会失效。注意这个数据集的标签矩阵里0表示未标注像元做分类训练时要先剔除不然会把背景当成一类。Pavia University由ROSIS传感器在意大利帕维亚大学上空采集空间分辨率1.3米图像大小610×340像素115个波段。9类地物包括沥青、草地、砾石、树木、金属板等是城市地物分类的标准测试集。这个数据集的特点是空间分辨率高地物边界清晰适合做面向对象的分类或者超像素分割。下载方式同样在普渡大学的网站上有或者搜“Pavia University dataset”也能找到多个镜像。文件格式也是.mat标签矩阵里0同样是未标注。Salinas由AVIRIS在加州萨利纳斯山谷采集空间分辨率3.7米图像大小512×217像素224个波段。16类地物主要是不同种类的蔬菜和葡萄园。这个数据集的特点是同类地物内部光谱变异小不同类之间区分度高分类精度通常比Indian Pines高很多。适合做算法对比实验因为容易出好结果。2.2 星载高光谱数据集GF-5和EnMAP的获取与处理GF-5 AHSI数据是我这几年用得最多的国产星载高光谱数据。它的L1级产品包含辐射亮度值需要经过辐射定标、大气校正才能得到反射率。我通常用ENVI的FLAASH模块做大气校正参数设置里气溶胶模型选乡村或城市能见度根据当天天气填一般填20到40公里。校正完之后用地面实测光谱或者USGS光谱库做验证吻合度在90%以上。下载方式中国资源卫星应用中心官网有数据分发服务需要注册账号然后按区域和時間检索。我实测下载速度还可以但高峰期会慢一些。数据格式是HDF5ENVI可以直接打开但需要手动设置波长信息不然波段对应不上。提示GF-5的短波红外波段和可见近红外波段是分开存储的打开的时候要注意波段顺序不然光谱曲线会乱掉。EnMAP数据是德国的高光谱卫星空间分辨率30米波段数224个覆盖420到2450纳米。它的L2A级产品已经是地表反射率省去了大气校正的步骤对新手很友好。下载需要通过EnMAP的官方数据门户注册后按需检索。我下载过几景欧洲区域的数据格式是GeoTIFF每个波段一个文件用GDAL可以批量读取。PRISMA数据是意大利的高光谱卫星空间分辨率30米波段数239个覆盖400到2500纳米。它的L2D级产品也是地表反射率下载需要通过意大利航天局的官方门户。我试过下载流程稍微繁琐一些需要填写用途说明但数据质量不错。2.3 近景高光谱数据集ICVL和Harvard的用法ICVL数据集是以色列计算机视觉实验室发布的近景高光谱图像集用Specim PS Kappa相机拍摄空间分辨率1392×1300波段数519个覆盖400到1000纳米。这个数据集的特点是光谱分辨率极高适合做图像去噪、超分辨和光谱重建研究。下载方式ICVL的官网有公开链接文件格式是MATLAB的.mat文件每个场景一个文件。我实测下载速度很快文件大小适中适合批量处理。注意ICVL的原始数据是辐射亮度值如果你要做反射率相关的分析需要用白板参考进行归一化。具体做法是找到图像中的白板区域计算其平均光谱然后用每个像元的光谱除以白板光谱得到相对反射率。Harvard数据集包含50个室内外场景每个场景31个波段覆盖420到720纳米空间分辨率1392×1040。这个数据集的特点是场景多样包括人脸、纸张、水果、建筑等适合做跨场景的算法验证。下载方式同样在哈佛大学的网站上有公开链接格式是.mat文件。2.4 其他值得关注的数据集Cuprite、Botswana、KSCCuprite是AVIRIS在内华达州Cuprite矿区采集的数据空间分辨率20米波段数224个。这个场景是矿物填图的经典测试集包含明矾石、高岭石、白云母、方解石等多种矿物。USGS光谱库里有对应的参考光谱你可以直接拿来做解混和填图算法的定量评估。下载方式在AVIRIS的官网数据页面有链接。Botswana是Hyperion传感器在博茨瓦纳采集的数据空间分辨率30米波段数242个去掉噪声波段后剩145个。14类地物包括不同种类的植被和土壤。这个数据集的特点是信噪比相对较低适合做去噪和特征选择研究。下载方式在普渡大学的网站上有。KSC是AVIRIS在肯尼迪航天中心采集的数据空间分辨率18米波段数224个。13类地物包括不同种类的湿地植被、土壤和水体。这个数据集的特点是空间异质性强适合做高分辨率分类研究。下载方式同样在普渡大学的网站上有。3. 高光谱数据从下载到可用的完整处理流程3.1 辐射定标把DN值变成辐射亮度不管你下的是机载还是星载数据第一步都是辐射定标。原始数据通常是DN值数字量化值需要根据传感器的定标系数转换成辐射亮度值单位是W/(m²·sr·μm)。以GF-5 AHSI为例定标公式是L DN / Gain Offset其中Gain和Offset在数据的元数据文件里有每个波段都不一样。我通常用Python的h5py库读取HDF5文件然后批量计算。代码大概长这样import h5py import numpy as np with h5py.File(GF5_AHSI_L1.h5, r) as f: dn f[/Data/EV_Radiance][:] # DN值 gain f[/Calibration/Gain][:] # 增益 offset f[/Calibration/Offset][:] # 偏移 radiance dn / gain offset注意有些传感器的定标系数是随时间变化的元数据里会给出采集时间对应的系数一定要用对不然辐射亮度会偏。3.2 大气校正从辐射亮度到地表反射率大气校正是高光谱处理里最复杂的一步也是最多人卡住的地方。我试过ENVI的FLAASH、ACORN、6S模型各有优劣。FLAASH操作最简单但参数设置对结果影响很大ACORN精度高但需要商业授权6S免费但需要自己写脚本调用。我目前的主力方案是ENVI FLAASH参数设置如下传感器类型根据数据选择GF-5选Unknown然后手动输入波段范围和光谱分辨率地面高程从DEM数据获取一般填平均高程气溶胶模型乡村或城市根据场景选择能见度20到40公里根据天气情况调整水汽反演选择Yes让FLAASH自动反演校正完之后用地面实测光谱验证。我通常选几个均匀地物比如大片草地、裸土、水体提取图像上的平均光谱和实测光谱对比。如果吻合度在90%以上说明校正参数没问题如果偏差大就要调整气溶胶模型或能见度。提示高光谱数据的大气校正对水汽吸收波段特别敏感校正后这些波段往往噪声很大做分析时建议直接剔除。比如1350到1450纳米、1800到1950纳米、2400到2500纳米这几个区间。3.3 反射率转换从辐射亮度到相对反射率如果你拿到的数据没有经过大气校正或者你只需要相对反射率可以用白板参考法。具体做法是在采集数据时放一块已知反射率的标准白板然后计算每个像元的辐射亮度和白板辐射亮度的比值再乘以白板的反射率。公式是R (L / L_white) × R_white其中L是像元辐射亮度L_white是白板辐射亮度R_white是白板反射率通常接近1。这个方法简单快速但精度不如大气校正适合近景高光谱数据或者对精度要求不高的场景。3.4 波段选择与降维去掉冗余保留信息高光谱数据的波段之间相关性很高直接拿全部波段做分类容易过拟合计算量也大。我通常先做波段选择或降维。波段选择的方法有基于信息量的如方差、熵、基于类间可分性的如JM距离、基于稀疏性的如稀疏表示。我常用的是JM距离因为它直接衡量波段对分类的贡献。具体做法是计算每个波段的JM距离然后按从大到小排序选前N个。降维的方法有PCA、ICA、LDA、t-SNE等。PCA是最常用的因为它简单快速能保留大部分方差。我通常保留前20到30个主成分能覆盖95%以上的方差。注意PCA降维后主成分的物理意义不明确如果你需要解释结果建议用波段选择而不是降维。3.5 样本标注与数据集划分别让标签错误毁了一切高光谱数据的标注是个体力活尤其是做目标检测的时候。我做过一个农田地块识别项目用GF-5数据裁剪了2000多个地块每个地块都要人工确认边界和类别花了整整两周。标注工具有很多我常用的是QGIS加Python脚本。QGIS可以加载高光谱影像需要先转成多波段GeoTIFF然后手动绘制多边形导出为Shapefile。Python脚本用来把Shapefile转成标签矩阵方便后续训练。数据集划分通常是7:3或者8:2训练集和测试集要保证类别分布一致。我习惯用分层抽样确保每个类别在训练集和测试集里的比例相同。提示标注的时候一定要留出验证集而且验证集的样本要来自不同的区域不然空间自相关会导致精度虚高。4. 高光谱数据集使用中的常见问题与排查技巧4.1 下载链接失效怎么办这是最常见的问题尤其是那些老数据集网站改版或者服务器迁移之后链接就挂了。我的应对策略是先用Wayback Machine网页存档服务查历史快照很多时候能找回旧链接搜数据集名称加“mirror”或者“alternative download”很多研究者会在GitHub或者个人主页上放镜像去Kaggle或者Zenodo上搜这两个平台有很多高光谱数据集的备份如果实在找不到发邮件给数据集的发布者一般都会回复我实测下来Indian Pines、Pavia University、Salinas这三个在普渡大学网站上的链接一直很稳定ICVL和Harvard的官网链接也没问题。GF-5的数据在中国资源卫星应用中心官网需要注册但链接稳定。4.2 格式不兼容怎么处理高光谱数据的格式五花八门有.mat、.h5、.tiff、.img、.bsq等。我常用的转换工具是GDAL和Python的rasterio库。比如把ENVI格式转成GeoTIFFgdal_translate -of GTiff input.img output.tif把HDF5转成GeoTIFFimport h5py import rasterio import numpy as np with h5py.File(input.h5, r) as f: data f[/Data/Reflectance][:] with rasterio.open(output.tif, w, driverGTiff, heightdata.shape[1], widthdata.shape[2], countdata.shape[0], dtypedata.dtype) as dst: dst.write(data)注意转换的时候要注意波段顺序和数据类型不然会出错。比如有些HDF5文件是波段在最后一维有些在第一维读的时候要确认清楚。4.3 标签错位怎么排查标签错位是高光谱分类里最隐蔽的问题表现为精度异常低或者混淆矩阵完全乱掉。我排查的方法是先把标签矩阵可视化看看类别分布是否合理然后随机选几个像元提取其光谱曲线看看是否符合该类地物的光谱特征如果光谱曲线和类别对不上说明标签错位了常见的原因是标签矩阵和数据矩阵的维度顺序不一致比如数据是行列波段标签是波段行列直接对应就会错。解决办法是用np.transpose调整维度。4.4 内存不够怎么优化高光谱数据动辄几个GB全读进内存容易爆。我常用的优化策略是分块读取用rasterio的窗口读取功能每次只读一块降采样如果不需要全分辨率可以先做空间降采样波段选择只保留需要的波段减少数据量用内存映射numpy的memmap可以把磁盘文件当内存用适合超大文件我做过一个100GB的高光谱数据分类项目就是用分块读取加增量训练解决的。每次读一块提取特征然后更新模型最后合并结果。4.5 常见问题速查表问题可能原因解决方法下载链接失效网站改版或服务器迁移用Wayback Machine查快照或搜镜像格式不兼容传感器厂商自定义格式用GDAL或rasterio转换标签错位维度顺序不一致用np.transpose调整维度内存不够数据量太大分块读取、降采样、波段选择光谱曲线异常大气校正参数错误调整气溶胶模型或能见度分类精度低样本不平衡或特征冗余分层抽样、波段选择、降维反射率超过1定标或校正错误检查定标系数和大气校正参数5. 几个我踩过的坑和独家心得5.1 别迷信“全网最全”适合的才是最好的我刚开始做高光谱的时候看到数据集就下硬盘里堆了几百GB结果真正用上的没几个。后来我总结出一个原则先明确任务再选数据集。做分类就用Indian Pines、Pavia University、Salinas这三个做解混就用Cuprite做去噪就用ICVL和Harvard做星载应用就用GF-5和EnMAP。每个任务都有对应的标准数据集不用贪多。5.2 数据预处理的时间往往比算法开发还长我做过一个项目算法开发花了三天数据预处理花了三周。辐射定标、大气校正、几何校正、波段选择、样本标注每一步都有坑。我的建议是把预处理流程脚本化用Python或者Shell写成流水线这样下次用新数据的时候可以直接跑省时间。5.3 验证集一定要独立我见过太多人把训练集和测试集随机划分结果精度虚高。高光谱数据有很强的空间自相关相邻像元的光谱几乎一样随机划分会导致训练集和测试集里有大量相似样本。正确的做法是空间划分比如按区域划分或者按地块划分。我通常留出20%的区域作为验证集确保和训练集不重叠。5.4 反射率转换不是必须的但做了会更好如果你只是做分类用辐射亮度值也能跑出不错的结果因为分类器主要看光谱曲线的形状而不是绝对值。但如果你要做定量分析比如矿物丰度反演、叶绿素含量估算那就必须转成反射率。我通常建议不管做什么任务都先转反射率因为这样结果更可解释也方便和别人的研究对比。5.5 数据集的版本很重要同一个数据集可能有多个版本比如Indian Pines有原始版本和校正版本Pavia University有不同的大气校正结果。我建议用最新版本因为老版本可能有定标错误或者标注错误。下载的时候注意看数据集的说明文档确认版本号和更新日期。5.6 别忽略元数据元数据里包含传感器的定标系数、采集时间、太阳角度、大气条件等信息这些对预处理至关重要。我见过有人不看元数据直接做大气校正结果参数全错校正后的反射率完全不能用。我的习惯是先把元数据读一遍把关键参数记下来然后再开始处理。5.7 多源数据融合能解决很多问题单一数据源往往有局限比如GF-5空间分辨率只有30米做精细分类不够用。我试过把GF-5和高分二号空间分辨率0.8米融合用高分二号做空间细节用GF-5做光谱信息分类精度提升了15%以上。融合的方法有Gram-Schmidt、PCA、小波变换等我常用的是Gram-Schmidt因为它在保持光谱信息方面表现最好。5.8 开源工具能省很多钱ENVI和ERDAS是商业软件功能强大但价格不菲。如果你预算有限可以用开源工具替代。Python的spectral库、scikit-learn、PyTorch、TensorFlow都能做高光谱分析。QGIS可以做可视化 and 标注。GDAL可以做格式转换和投影变换。我现在的流程基本全用开源工具效果不比商业软件差。5.9 数据集分享要注明来源和许可如果你要把数据集分享给别人一定要注明来源和许可协议。有些数据集是公开的可以自由使用有些需要引用特定论文有些禁止商业用途。我整理数据集清单的时候每个都会标注来源和许可避免侵权。5.10 持续更新别用死链接数据集网站会变链接会失效所以定期更新清单很重要。我每半年会检查一遍所有链接把失效的替换掉把新发现的数据集加进去。这样分享出来的清单才是真正可用的而不是一堆死链接。最后再分享一个小技巧如果你找不到某个数据集的下载链接可以去Google Scholar搜数据集的名称找到引用它的论文然后看论文里有没有提供下载方式。很多研究者会在论文的补充材料里放数据链接或者直接提供联系方式。我通过这个方法找到了好几个冷门但很好用的数据集。