3. ENVI实战环境搭建与数据准备

光谱角匹配(SAM)的物理基础是把像元光谱看作高维空间中的向量,用两个向量之间的夹角衡量相似性。这个定义决定了它对数据质量极其敏感:只要波段中心波长、波长单位或增益偏移出现偏差,向量方向就会改变,夹角随之失真,分类结果便不可信。因此本章的重点不是急着点开SAM工具,而是把"能算对夹角"的前提条件搭好——软件环境、数据导入、波段定义与元数据三者缺一不可。

一、ENVI版本与扩展模块的配置

ENVI采用"主程序+扩展模块"的结构。SAM本身属于ENVI核心的光谱分析功能,位于Toolbox的Spectral文件夹下,无需额外授权;但实际项目中常需要配合使用FLAASH/QUAC大气校正、Spectral Library Builder波谱库构建、以及ENVI Classic中的部分老工具,这些模块的可用性取决于授权文件(License)是否包含对应条目。建议在动手前先做一次能力确认:打开ENVI,在Toolbox搜索框输入"Spectral Angle Mapper",若能检索到该工具,说明核心功能就绪;再检查Help→About ENVI中的授权列表,确认Atmospheric Correction、Spectral Library等模块状态。

版本方面,ENVI 5.x系列采用全新的 ribbon 界面与ENVI Classic并存的双引擎结构,SAM在两者中均可调用,但参数面板略有差异。若团队协作,应统一主版本号,避免同一批数据在不同版本下产生细微的辐射定标差异。安装路径建议全英文、无空格,例如 D:\ENVI\ENVI5x,因为部分扩展模块在调用外部可执行文件时对中文路径兼容性较差。此外,ENVI依赖IDL运行时,若机器上同时装有多个IDL版本,需确认环境变量指向与ENVI匹配的那一个,否则会出现工具加载失败或界面卡死。

配置完成后,建议用一份小尺寸标准测试数据跑通"打开→波段信息查看→SAM"全链路,确认环境无隐性故障,再进入正式数据准备。

二、高光谱数据导入

高光谱数据常见的交付形式有三类:ENVI标准格式(.hdr + 数据文件)、GeoTIFF(常带波长信息但可能不完整)、以及原始二进制(.raw/.bil/.bsq + 独立头文件)。导入的核心不是"能打开",而是"打开后波段信息正确"。以最常见的ENVI格式为例,通过File→Open直接选择.hdr文件即可,ENVI会依据头文件中的 samples、lines、bands、data type、interleave 自动解析。若只有数据文件而无头文件,则需用File→Open As→Generic Formats→ENVI Standard手动建立头文件,此时必须准确填写行数、列数、波段数、数据类型(如Byte、Integer、Float)与存储顺序(BSQ/BIL/BIP),任何一项填错都会导致图像错位或波段错乱。

对于GeoTIFF,ENVI通常能读取空间参考,但波长信息往往缺失或仅存于元数据标签中,导入后必须进入波段定义环节补齐。原始二进制文件则要特别注意字节序(大端/小端)与偏移量(header offset),尤其是从其他传感器系统导出的数据,偏移量不为零的情况很常见。导入完成后,第一时间在Layer Manager中右键查看File Information,核对行列波段数与文件大小是否自洽——例如一个 614×512×224 的Float型BSQ文件,理论大小约为 614×512×224×4 ≈ 281 MB,若显示大小明显不符,说明头文件参数有误。

三、波段定义与元数据检查

这是本章最关键的一步。SAM计算的是光谱向量夹角,而向量的每个分量对应一个波段,因此"第i个波段对应哪个波长"必须准确无误。在ENVI中通过Edit ENVI Header→Wavelengths查看和编辑波长列表,也可用Spectral→Build Wavelengths按起始波长、结束波长、波段数自动生成等间隔波长。需要重点核对三件事:波长单位是纳米还是微米(SAM本身对单位不敏感,但后续与波谱库匹配时必须一致);波长是否单调递增、有无重复值;波段数是否与波长列表长度严格相等。

元数据检查还应覆盖辐射量纲与坏波段。打开Quick Stats或像元剖面,观察DN值范围:若为0–10000量级,可能是辐射亮度缩放后的整型;若存在大量0值或饱和值,需标记为坏波段并在SAM中排除。同时确认数据是否已做大气校正——未校正的辐亮度数据与实验室波谱库直接做SAM,夹角会系统性偏大,通常需要先做FLAASH/QUAC,或改用影像自身提取的端元波谱作为参考。

SAM数据准备检查链:从环境到可用光谱向量 ① 软件环境 ENVI 5.x 主程序 License:SAM / 大气校正 IDL运行时匹配 全英文无空格路径 ② 数据导入 .hdr + 数据文件 GeoTIFF / 原始二进制 行列波段数、数据类型 BSQ/BIL/BIP、偏移量 ③ 波段定义 Wavelengths 列表 单位 nm / μm 统一 单调递增、无重复 长度 = 波段数 ④ 元数据检查(决定向量是否可信) • 文件大小自洽:samples×lines×bands×字节数 ≈ 实际大小 • DN值范围:0值/饱和值 → 标记坏波段并排除 • 辐射量纲:辐亮度 / 表观反射率 / 已大气校正? 可用光谱向量 → SAM 夹角计算 θ = arccos( (x·y) / (|x|·|y|) ) 波段中心波长准确 ⇒ 向量方向可信 ⇒ 分类可靠 发现异常则回退修正

上图把本章的检查逻辑串成一条链:环境决定工具能否运行,导入决定数据能否被正确解析,波段定义决定向量分量是否对应真实波长,元数据检查则是对前三步的交叉验证。任何一环出问题,都应沿虚线回退修正,而不是带着隐患进入SAM。

四、一份可直接执行的准备清单

为便于复现,下面给出一份按顺序执行的检查表,字段与判断依据均针对SAM任务设计,可在实际项目中逐项打勾。

序号检查项操作位置合格判据
1SAM工具可检索Toolbox 搜索出现 Spectral Angle Mapper
2授权模块状态Help→About ENVI所需模块显示已授权
3数据成功打开File→OpenLayer Manager 出现图层
4行列波段数File Information与交付说明一致
5文件大小自洽资源管理器对比误差在头文件偏移量范围内
6波长列表完整Edit ENVI Header长度=波段数,单调递增
7波长单位统一Wavelengths 面板与波谱库单位一致
8坏波段标记Quick Stats / 剖面0值与饱和波段已记录
9辐射量纲确认像元值范围明确是否已大气校正

完成上述检查后,数据才真正具备参与SAM计算的条件。需要强调的是,第6至第9项不是形式化核对,而是直接作用于夹角数值的实质参数:波长错位会让同一地物在不同波段上的分量"张冠李戴",坏波段会把噪声引入向量模长,未校正的辐亮度则会让影像光谱与参考光谱处于不同量纲,夹角被人为放大。把这些前置工作做扎实,后续的端元选取、阈值设定和分类结果解读才有意义。