资讯动态

Hyperion高光谱数据处理全流程:坏波段标识、辐射定标与大气校正

发布时间:2026/10/9 8:38:00 来源:尧图企业网站定制
简介高光谱遥感影像拥有数百个连续波段但并非所有波段都适合直接参与定量反演。受大气水汽吸收和传感器响应的限制部分波段信噪比很低若直接用于辐射定标或大气校正常导致反射率异常。因此识别并剔除“坏波段”是高光谱预处理中的关键步骤。Hyperion作为EO-1卫星上的经典星载高光谱传感器提供了242个波段其中约67个波段需依据Barry 2001清单进行标识。本文以ENVI为工具完整演示了从数据打开、L1R/L1T产品选择、坏波段标识、辐射定标到FLAASH大气校正的标准流程并针对VNIR/SWIR错位、负反射率、760nm尖刺等常见问题给出了排查方法。无论是研究生还是行业从业者掌握这套流程都能显著提升Hyperion数据的处理效率与结果可靠性。1. Hyperion 高光谱数据处理先从“用不了的波段”讲起拿到一景 Hyperion 数据最容易卡住的并不是找不到下载链接而是打开影像后面对 242 个波段不知道该拿哪些下手。Hyperion 高光谱数据处理的第一步不是辐射定标更不是直接跑大气校正而是先把水汽吸收严重的波段标成坏波段——课件里给出的 Barry 2001 清单一下子划掉了 67 个波段。正是这些“坏波段”决定了后面大气校正能不能跑出正常结果。这份《Hyperion高光谱数据处理》课件把整条链路拆成四步数据打开、水汽吸收波段标识、辐射定标、大气校正。每一步都对应 ENVI 里的具体菜单照着点就能走通省去自己翻手册对菜单的功夫。适合刚接触 EO-1 数据、被 242 个波段和 L1R/L1T 分级一头雾水的研究生也适合要给历史 Hyperion 影像做批处理的从业者当流程参照。这里有个反直觉的事实242 个波段里接近三成会被标记为“不可用”后面真正参与反演的可能只有 170 个左右。理解了这一点Hyperion 处理就入门了一半。2. 数据打开与文件组织242 个波段和 L1R/L1T 的边界课件用了好几页讲数据源。这些内容不是背景知识而是直接决定后面怎么打开、选什么文件、处理完能不能和别人结果对齐。别跳过。2.1 先记住这几张参数表Hyperion 不是普通的多光谱Hyperion 是 EO-1 卫星上的星载高光谱成像仪2000 年 11 月发射2017 年 4 月退役。它最常用的产品是 L1 级共 242 个波段。课件把参数整理成一张表我照着复述一遍参数数值波长覆盖357 ~ 2567 nm光谱分辨率10 nm空间分辨率30 m扫描宽度7.5 km波段分布可见光 35、近红外 35、短波红外 172数据格式HDF TIFF地图投影UTM按图像中心经纬度定义分区坐标系WGS84重访周期约 200 天要注意的是波段编号和分布。课件里写“1 ~ 70 为可见光近红外V-NIR波段71 ~ 242 为中红外SWIR波段”但严格说 SWIR 是短波红外Shortwave Infrared不是中红外。这不影响操作但写论文参数表时别跟着写成“中红外”。波段分布为什么重要可见光 35 加近红外 35正好对应编号 1-70短波红外 172 个对应 71-242。VNIR 和 SWIR 用的不是同一个探测器响应特性不一样这也是后面 VNIR/SWIR 错位问题的源头。处理时必须把两个探测器数据当成一个整体来用但心里要清楚70/71 交界处本来就是两套东西拼接起来的。还有一点容易被忽略Hyperion 没有全色波段也没有热红外只有 0.4-2.5 µm 这条连续谱。这意味着很多针对 Landsat 的习惯比如用全色波段融合、用热红外做温度反演在 Hyperion 上都不适用。课件里“全色波段 0 个、热红外 0 个”不是随便写的是提醒你别把多光谱处理思路硬套到高光谱上来。2.2 L1R 和 L1T 产品差在哪文件清单与适用场景Hyperion 产品分两级Level 0 和 Level 1。Level 0 是原始数据只用来生产 L1 产品普通用户拿不到也用不了。L1 又分成 L1A、L1B、L1R 和 L1T。课件里讲得很清楚我整理成表产品级别VNIR/SWIR 错位是否纠正辐射纠正几何纠正说明L1A未纠正无无2002 年前的早期产品L1B已纠正系统辐射纠正无USGS 处理生成L1R已纠正系统辐射纠正无常用L1T已纠正辐射校正几何校正常用含 242 个 TIFF课件说“2002 年以前处理的数据为 L1A”又说 L1B 和 L1R 已经纠正了 VNIR 与 SWIR 的空间错位用户无需再做匹配。实际操作里如果你下载到的还是 L1A就要做好两个探测器图像错位的心理准备能换 L1R/L1T 就换。L1T 是这里面最适合入门的版本因为它按波段拆成了 242 个单独的 GeoTIFF不用处理 HDF 布局而且元数据直接以 MTL 文本文件给出。L1R 的文件组织是另一套。课件列了 .MET 元数据文件、HDF 数据集文件.L1R、.fgdc 元数据、.AUX 辅助文件、.hdr 头文件。L1T 的数据包则是 242 个 .TIF、.TXT 元数据和 README.txt。两种文件结构不通用特别是 L1R 的 HDF 文件波段存储格式为 BILBand Interleaved by Line打开时要选对读取方式不然影像会出现诡异的“拉花”。拿到 L1T 后先在目录里看一眼文件组织。用命令行列一下$ ls EO1H1230322013121110PZ* EO1H1230322013121110PZ_MTL_L1T.TXT EO1H1230322013121110PZ_B01.TIF EO1H1230322013121110PZ_B02.TIF ... EO1H1230322013121110PZ_B242.TIF README.txt242 个 tif 文件按编号排列B01 到 B242。MTL 文件是元数据里面有波长、增益、偏置、太阳高度角等关键信息。课件里让打开时直接选 MTL 的 .TXT 文件就是这个原因——ENVI 要从里面读出传感器参数而不是让你自己去填。2.3 在 ENVI 里打开 L1TOpen As 的正确路径和选文件技巧打开 L1T 的正确姿势是走 Open As不是普通 Open。课件给的路径是菜单栏选择 File Open As Optical Sensors EO-1 GeoTIFF。弹出 Open 对话框后选择EO1H1230322013121110PZ_MTL_L1T.TXT文件。点击打开后ENVI 自动读入全部 242 个波段并加载波长、定标系数等元数据。这里要理解为什么选 .TXT 而不是 .TIF。L1T 的 242 个 tif 虽然可以直接按多波段合成打开但那样 ENVI 只会把它当成一堆没有波长信息的普通栅格辐射定标、大气校正、光谱剖面全都无从谈起。走 Open As 之后ENVI 会把 MTL 里的信息挂到数据上后面处理才能自动化。这个细节是很多人第一次处理 Hyperion 翻车的起点。如果你是拿 L1R 的 HDF 数据打开路径也类似File Open As Optical Sensors EO-1然后选择 .L1R 文件。课件强调“数据格式为 HDF波段存储格式为 BIL”所以在打开后要检查一下 Data Manager 里的文件布局Interleave是否显示为 BIL。如果显示成 BSQ 或 BIP要么是读取器选错要么是 HDF 本身结构异常别硬往下做。提示打开后第一件事在 Data Manager 里看波段波长是否从 357 nm 开始、到 2567 nm 结束。如果波长列表是空的或全为 0说明 MTL 没被正确加载后面的辐射定标系数也一定是错的。到这里数据已经打开242 个波段躺在 Data Manager 里。接下来要做的就是把“不能用的波段”请出去。3. 水汽吸收波段标识1-7、58-76、225-242 背后的 Barry 2001 清单3.1 为什么“坏波段”是预处理的第一步先解释原理。太阳辐射穿过大气时水汽在 900 nm、1130 nm、1400 nm、1800 nm 附近有强吸收氧气在 760 nm 附近有吸收。Hyperion 的 242 个波段里落在这些区域的波段信噪比极低信号基本被大气吃掉留下的是探测器和大气噪声。如果让它们参与辐射定标后的统计或者让 FLAASH 用它们做水汽反演模型会被噪声带着跑最后结果经常出现离谱的负反射率或尖刺。所以课件把处理流程写成“数据打开 → 水汽吸收波段标识 → 辐射定标 → 大气校正”顺序不是随便排的。先标识坏波段再辐射定标相当于在做定量换算之前就把脏数据关在门外。有人会问辐射定标之后再标坏波段行不行也行但定标后每个波段都变成了浮点辐射亮度值再标识虽然不影响数值显示和交互会别扭。更重要的是ENVI 的 Radiometric Calibration 工具会继承 Bad Bands 属性如果提前设好输出文件直接带上标识后面 FLAASH 就不会误用这些波段。课件里明确对比了版本差异ENVI 5.3.1 会自动识别 Hyperion 这些波段并作出标识5.3 以及之前版本不会。如果你用的是 5.3 之前版本或者用的是其他软件建议完全手动处理。3.2 Barry 2001 清单和课件里的波段编号课件给了一组由 Barry 2001 提出的坏波段范围同时又补充了受水汽吸收影响的波段。我把两组合并成一张操作清单波段范围原因建议1-7可见光蓝紫端大气散射强、信噪比低设为 058-76水汽和氧吸收带噪声高设为 0121-126水汽吸收影响严重标识167-180水汽吸收影响严重标识222-224水汽吸收影响严重标识225-242SWIR 末端信号弱探测器响应差设为 0“设为 0”在 ENVI 里是 Bad Bands 列表的写法0 不是把像素值改成 0而是表示这个波段不参与运算。你在 Data Manager 里看到的是“0”标识实际栅格值还是原有 DN。这个区别一定要记住不然你会误以为自己把影像数据毁了。把两组放到一起可以算出总共被标记的波段数。用一段小脚本可以快速生成清单# Hyperion L1T 波段编号从 1 开始和 ENVI Data Manager 显示一致 bad_ranges [ (1, 7), # Barry 2001可见光噪声 (58, 76), # Barry 2001水汽/氧气吸收 (121, 126), # 水汽吸收 (167, 180), # 水汽吸收 (222, 224), # 水汽吸收 (225, 242), # Barry 2001SWIR 末端噪声 ] bad_bands set() for start, end in bad_ranges: bad_bands.update(range(start, end 1)) print(f共标识 {len(bad_bands)} 个波段) print(sorted(bad_bands))这段脚本的作用是自动生成坏波段集合。range(start, end1)是因为 Python 的 range 不包含终点所以要加 1集合自动去重避免范围和顺序变化时重复计数。运行后你会看到总数是 67。也就是说242 个波段里接近 28% 被排除剩约 175 个波段参与后续处理。这个比例对 Hyperion 来说并不夸张传感器年代和大气窗口决定了这是正常偏保守的标识方式。3.3 ENVI 中的操作5.3.1 自动标识与旧版本手动处理ENVI 5.3.1 打开 Hyperion L1T 后会自动识别坏波段但自动识别的内容主要是 Barry 2001 那几类121-126、167-180、222-224 这几个水汽吸收带不一定全部被标出来。我的习惯是不管自动标识有没有生效都手动检查一遍。操作步骤在 Data Manager 中选中打开的 Hyperion 影像。打开 Edit Bad Bands 工具或右键图层进入 Bad Bands 编辑。把上表的 6 个波段范围逐个填进去。确认列表里显示 67 个波段保存设置。回到 Data Manager 查看波段列表被标识的波段编号旁边会出现标记。如果是 ENVI 5.3 或更早版本没有自动识别那就纯粹手动输入。可以把上面生成的坏波段列表存成文本文件方便复用with open(hyperion_bad_bands.txt, w) as f: for a, b in bad_ranges: f.write(f{a}-{b}\n)生成的文本文件每一行一个范围导入其他工具也方便。不同软件对坏波段标识的格式不完全一样但“范围列表”这种形式通用性最高。注意标识坏波段时编号一定要和你影像的实际波段数对齐。Hyperion 有 242 个波段但有些数据子集可能只导入了 170 个波段。如果你先做了波段子集再看编号1-7 可能还是 1-7但 58-76 已经不再是原来的 58-76。这也是新手容易踩的坑。标识完成之后这 67 个波段基本退出了后面的计算。课件把这个动作放在数据打开之后、辐射定标之前顺序一定别颠倒。4. 辐射定标与大气校正从 DN 值到反射率的完整链路4.1 辐射定标为什么 L1T 也要再定标Hyperion L1T 产品虽然做过系统辐射纠正但给到用户手里的仍然是 16 位整型 DN 值。DN 没有物理意义必须乘以定标系数转成辐射亮度才能进入大气校正。定标的公式可以写成线性关系L G × DN BL 是辐射亮度G 是增益B 是偏置。对 Hyperion 来说每一个波段的 G、B 都不同这些系数存放在 MTL 元数据里由 USGS 定期维护更新。如果你在校正工具里发现没有自动加载系数就需要手动从元数据里读。课件没有把公式摆出来但处理流程里“辐射定标”这个步骤就是做这件事。ENVI 里选 Radiometric Calibration 时Calibration Type 选 Radiance。这里有一个单位问题Hyperion 官方给出的辐射亮度单位是 W/(m²·sr·µm)但也有资料写成 µW/(cm²·sr·nm)。两者数值上刚好相差 10 倍。FLAASH 的默认单位里如果选错后面大气校正得到的反射率整体会偏差而且不是加个系数就能救回来的那种。4.2 在 ENVI 里做辐射定标从 L1T 元数据读系数我用 ENVI 的流程拆一遍参数在 Data Manager 里选中已标识坏波段的 Hyperion 影像。工具栏选择 Radiometric Correction Radiometric Calibration。Calibration Type 选择 Radiance。Output Data Type 选择 32-bit Float。Scale Factor 设置为 1.0。选择输出文件名点击 OK。参数怎么理解Calibration Type 选 Radiance 是把 DN 转辐射亮度不是地表反射率反射率要等大气校正之后才叫 Reflectance。Output Data Type 选 32-bit Float 是因为 Hyperion 有 242 个波段其中一些波段 DN 值很小如果还用整数保存定标后会出现明显的量化台阶。Scale Factor 1.0 表示不额外缩放直接使用元数据里的系数如果你从 USGS 下载的元数据里给了特殊 scale factor那以官方文档为准但绝大多数情况不需要改。如果 ENVI 读不到 MTL 里的定标系数就需要手动查找。L1R 的 .MET 或 .fgdc 文件里通常有增益和偏置参数L1T 的 MTL 文本里也有。我们一般这样查$ grep -E gain|bias|scale EO1H1230322013121110PZ_MTL_L1T.TXT | head -20用 grep 过滤出增益、偏置、缩放相关字段确认关键系数已经存在。如果没有这些字段说明你打开的不是完整 MTL或者数据本身只含图像文件。此时再回去重新走 File Open As EO-1 GeoTIFF。4.3 大气校正的输入准备把 FLAASH 要的东西先备齐辐射定标完成之后下一步是大气校正。课件把大气校正列为第四个步骤但没有展开参数。我按 Hyperion 常见做法补全在 ENVI 里用 FLAASH 做大气校正时输入是辐射亮度影像需要指定以下参数Sensor TypeEO-1 Hyperion。如果版本里没有选 Custom 并导入 Hyperion 波谱响应函数。影像中心经纬度从元数据读取投影是 UTM/WGS84需要转成经纬度。飞行日期和时间MTL 里有格式如 2013-12-11 10:xx影响太阳角度计算。大气模型按纬度和季节从列表中选一般是 Mid-Latitude 系列或 Tropical。气溶胶模型乡村、城市、海洋、沙漠按研究区选能见度可以先给一个推测值比如 40 km。水汽反演FLAASH 会从 1130 nm 附近的水汽波段反演水汽量坏波段如果不标识水汽量会明显偏大。这一步最典型的错误是把 Sensor Type 选成多光谱传感器然后让 FLAASH 去猜 Hyperion 的响应。结果就是某些波段矫正过度把正常地物曲线拉变形。Hyperion 和 Landsat 的光谱响应差异很大必须用对应的波谱响应函数。4.4 大气校正的效果怎么才叫“合格”大气校正不是点完 OK 就结束的。好的结果有一个快速判断标准拉一条植被光谱曲线应该能看到叶绿素吸收谷0.45 µm 左右和 0.67 µm 左右在 0.7 µm 附近出现红边陡升然后在近红外进入高反射平台。水体光谱在近红外段应接近 0裸地光谱整体平滑矿物如果在 2.2 µm 附近有吸收特征校正后应该保留。如果出现负反射率、光谱锯齿、曲线在 760 nm 附近有尖刺基本是前面坏波段标识没做好或者定标单位、大气参数选错了。这时候回退到第 3 章检查坏波段清单比在大气校正里反复改参数更有效。提示把定标输出的影像存成 BIL 布局的 GeoTIFFFLAASH 在 ENVI 里处理最稳定。如果用其他软件中转注意确认波段顺序没有被重排。5. 处理中的常见问题与排查五个会翻车的细节Hyperion 处理到处是坑。我见过不少人在数据打开后直接去跑大气校正最后出来的反射率不是负得吓人就是整个影像像加了滤镜。下面五条是课件相关操作里最容易翻车的地方按“现象 → 原因 → 解决”的顺序写你遇到了可以直接对照。5.1 现象VNIR 与 SWIR 出现明显错位现象在 70/71 波段交界处地物边缘错开几个像素同一栋楼在 SWIR 波段偏到另一侧两段影像怎么都对不齐。原因最直接的原因是用了 L1A 产品。Hyperion 有 VNIR 和 SWIR 两个探测器分别成像L1A 没有纠正两者之间的空间错位。课件专门提了这个区别L1A 未纠正L1B/L1R/L1T 已纠正。解决换 L1R 或 L1T。如果只有 L1A可以在 ENVI 里用一个波段作为基准另一个做平移配准但过程很繁琐而且精度未必有保证。从下载端重新拿 L1T 是更实际的办法。5.2 现象1-70 波段里有黑条带或全黑波段现象打开影像后可见光到近红外段出现纵向黑色条纹某些波段整幅全黑或全白数值集中在 0 或 65535。原因Hyperion 探测器有未校正的列加上水汽吸收噪声1-7 波段 DN 值几乎被噪声淹没。如果没在坏波段标识里设为 0这些波段就被当成有效数据参加后续统计轻则拉高方差重则让大气校正直接报错。解决在做辐射定标之前用 Barry 2001 清单把 1-7、58-76、225-242 设为 0水汽吸收波段 121-126、167-180、222-224 也一并标识。顺序必须是先标识、再定标课件把这一步放在数据打开之后是有原因的。5.3 现象辐射定标后出现负值或异常大数现象定标结果统计里出现大量负辐射亮度或者出现几万以上的数影像看起来像花屏。原因元数据定标系数没有读进来。最常见的是用普通 Open 直接打开了 242 个 tifENVI 没有读取 MTL也有可能是手动输入系数时填错单位把 W/(m²·sr·µm) 和 µW/(cm²·sr·nm) 混用了。解决重新用 File Open As Optical Sensors EO-1 GeoTIFF 打开 MTL 文件。定标后不要只看图像先看图层 Quick Stats。合理的 Hyperion 辐射亮度范围一般在 0 到 200 W/(m²·sr·µm) 这个量级负数或特大数都说明系数不对不要继续往下做。5.4 现象大气校正后光谱在 760 nm 附近有尖刺现象植被光谱在 760 nm 处突然冒出一个尖峰或者整个近红外段波形变形和波谱库里的标准曲线完全对不上。原因58-76 波段里的氧气吸收带没有正确标识FLAASH 在水汽反演和模型拟合时把噪声当成信号还有一个可能是传感器波谱响应函数没选对。解决确认 58-76 已标识为坏波段在 FLAASH 里选择 EO-1 Hyperion 的响应函数。如果还不行把 121-126 和 167-180 也强制标掉再做一次。注意每次改完坏波段后要重新走一遍辐射定标而不是直接拿旧文件去跑。5.5 现象ENVI 提示文件布局不对HDF 读取出现拉花现象打开 L1R 或 HDF 文件时提示 interleave 与预期不符图像出现斜向错位波段之间内容对不上像被撕碎再拼回去。原因Hyperion L1 数据默认按 BIL 存储即 Band Interleaved by Line按“行-波段-下一行”组织数据。普通 HDF 读取器如果按 BSQ 或 BIP 解析就把空间位置和波段位置搞错了。解决优先用 ENVI 的 Open As Optical Sensors EO-1 打开不要用通用 HDF 读取。L1R 目录里的 .hdr 文件写明了 interleave打开后先观察它是否与影像一致不一致就先修 .hdr再重新加载。6. 进阶验证用光谱剖面和波谱库复查处理质量6.1 先拉一条光谱剖面别急着分类处理完后不要直接去做分类或端元提取。先在 ENVI 中打开最终影像用光标工具在影像上移动打开 Z Profile 窗口逐个看像元光谱。合格的影像里植被像素应该呈现出典型的红边特征水体在近红外段趋近 0裸地光谱平滑连续。如果剖面曲线还是均匀的高幅噪声多半是坏波段没标识干净或者定标单位选错。这一步比看整幅影像的平均值直观得多。6.2 和波谱库交叉验证再用波谱库做一次交叉验证。ENVI 里可以用 Spectral Analyst或者直接把影像光谱和 USGS 波谱库的参考曲线导入同一个窗口对比。关键是把参考谱重采样到 10 nm和 Hyperion 的光谱分辨率对齐否则匹配度会被系统性地拉低。如果匹配度低于 0.8不要怀疑是地物识别问题先回头查辐射定标和大气校正参数如果低于 0.9至少说明预处理还有需要调整的地方。从那以后我每次处理 Hyperion 都强制走一遍“检查产品级别 → 用 Open As 打开 → 按 Barry 2001 标识坏波段 → 辐射定标输出 Float → 大气校正后拉一条剖面”。这一套下来看似只是多花几分钟实际省掉的是成片的返工。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑