ENVI Landsat8全流程实战:从辐射定标到温度反演与分类
发布时间:2026/10/15 18:06:23 锦皓数字建站

简介这份资源是一份基于ENVI软件的Landsat8遥感影像处理实习报告面向地理信息科学与遥感相关专业的学生及初学者帮助其系统掌握从影像预处理到专题信息提取的完整流程。报告内容覆盖波段组合、图像裁剪与拼接、辐射定标与反射率求算、大气校正及效果比较并进一步延伸到图像融合的Brovey、HSV、主成分变换及定性与定量对比以及水体提取、植被覆盖度、温度反演、监督与非监督分类和土地利用变化分析配有步骤图与结果图文末附实习心得体会。资源包为1个docx文档约7.92MB图文并茂、结构完整适合作为课程实习参考或操作复盘材料。目前已有1240人学习下载可为遥感影像处理实验提供较完整的步骤记录与结果对照。1. 从一份 ENVI 实验报告说起Landsat8 全流程处理到底能落地什么如果你手头正躺着一份遥感实习任务要求用 ENVI 把 Landsat8 影像从原始 DN 值一路做到土地利用分类和温度反演那这份实验报告就是一份可以直接对照复现的作业模板。它覆盖的不是单一操作而是从波段组合、图像裁剪、辐射定标、FLAASH 大气校正到 Brovey/HSV/PC 三种融合方法对比、NDVI 水体提取、单窗算法温度反演、ISODATA 非监督分类与最大似然监督分类的完整链路。适合地信、遥感专业的本科生做综合实习也适合刚接触 ENVI 的从业者拿它当操作手册来查步骤。我带过几届做遥感课设的同学最常见的翻车不是算法不会而是参数填错、波段顺序搞反、坐标系没统一——这份报告的价值就在于把每一步的参数来源和判断依据都写清楚了你照着走一遍至少能少踩一半的坑。2. 预处理三件套波段组合、裁剪与辐射定标2.1 波段组合与矢量裁剪的先后逻辑拿到 Landsat8 的一级产品第一步不是急着做校正而是先把空间范围定下来。原因很简单全幅影像覆盖面积大直接做辐射定标和大气校正会浪费大量计算时间而且 FLAASH 对输入影像的尺寸和波段数有隐性限制。所以合理的顺序是先在 ArcGIS 里用行政区划 shp 裁剪出研究区再回到 ENVI 做波段组合和后续处理。波段组合用 Layer Stacking 完成。Landsat8 OLI 的 1-7 波段是 30 米多光谱第 8 波段是全色 15 米。如果你后面要做图像融合第 8 波段必须参与组合如果只做分类和温度反演可以只组合 1-7 波段减少数据量。这里有个容易忽略的点波段顺序必须按 1 到 8 的正序排列因为后面 Edit Header 修改中心波长时ENVI 是按波段索引依次对应的顺序错了整个光谱信息就乱了。# ENVI 中波段组合的操作路径菜单操作非命令行 # Basic Tools - Layer Stacking - 按顺序导入 Band1 到 Band8 # 输出文件名建议带日期和区域标识例如Leye_2019_stack.dat裁剪环节在 ArcGIS 和 ENVI 之间来回切换。ArcGIS 负责从县级 shp 中筛选出目标县属性表里按名称选择导出为新的 shapefileENVI 负责用这个 shp 做实际裁剪。具体操作是 File - Open Vector File 加载 shp然后在显示窗口加载影像File - Export Active Layer to ROIS 把矢量转成 ROI最后 Basic Tools - Subset Data via ROIS 完成裁剪。注意 Subset 对话框里有一个 Mask pixels outside of ROI 选项选 Yes 才会把 ROI 外的像元变成 0 值选 No 只是裁剪范围但保留背景值。2.2 辐射定标从 DN 值到辐射亮度辐射定标的本质是把传感器记录的 DN 值转换成有物理意义的辐射亮度值单位是 W/(m²·sr·μm)。Landsat8 的定标参数不在影像本身而在随数据附带的 MTL.txt 头文件里。你需要从里面找到 RADIANCE_MULT_BAND_x 和 RADIANCE_ADD_BAND_x 两组系数分别对应增益和偏置。在 ENVI 扩展版中双击 Apply Gain and Offset 工具按波段逐一填入增益和偏置。输出格式建议选 BILBand Interleaved by Line因为后面 FLAASH 大气校正要求输入 BIL 格式提前转好省得再来回折腾。定标完成后记得检查坐标系Landsat8 一级产品默认是 WGS-84 UTM 投影如果裁剪时没有做投影变换这里不需要改但如果你的 shp 是地理坐标系裁剪后影像的坐标系可能变成 Geographic Lat/Lon需要统一回 UTM 再做后续处理。提示增益和偏置的数值在 MTL.txt 里是按波段列出的不要凭记忆填。我见过有人把 Band5 的系数填到 Band4 上结果近红外波段反射率完全不对NDVI 算出来全是负值。2.3 中心波长修改一个容易被跳过的关键步骤辐射定标之后、大气校正之前必须修改影像的头文件信息把每个波段对应的中心波长和半波宽填进去。这一步在 Edit Header 里完成单位选 Micrometers。中心波长的数据同样来自 MTL.txt里面有一行 CENTER_WAVELENGTH 列出了各波段的中心波长值。为什么这一步不能省因为 FLAASH 大气校正需要根据每个波段的中心波长来查找对应的大气透过率和散射参数。如果头文件里没有波长信息FLAASH 会报错或者用默认值校正结果的光谱曲线会出现明显偏差。修改完成后右键影像 - Edit Header - 确认波段列表中的 Wavelength 列有正确数值再进入下一步。3. FLAASH 大气校正参数怎么填、结果怎么验3.1 输入数据准备与格式转换FLAASH 对输入数据有三个硬性要求格式必须是 BIL 或 BIP不能是 BSQ、数据类型必须是浮点型、波段数不能超过 15 个。辐射定标输出的 BSQ 文件需要先转换格式在 ENVI 中用 Convert Interleave 工具把 BSQ 转成 BIL。转换完成后打开 Spectral - FLAASH在 Model Input Parameters 对话框中填入以下关键参数参数项填写依据本次实验取值Input Radiance Image辐射定标后的 BIL 文件定标输出文件Output Reflectance File自定义输出路径带 _ref 后缀Sensor TypeMTL.txt 中 SENSOR_IDLandsat-8 OLIGround Elevation研究区平均海拔970 mAtmospheric Model根据纬度和季节Mid-Latitude SummerAerosol Model根据地表类型UrbanScene Center Location自动读取或手动输入自动填充Flight Date/TimeMTL.txt 中 DATE_ACQUIRED影像获取时间其中 修改参数值为 10 指的是 Scale Factor因为辐射定标后的数值单位是 μW/(cm²·sr·nm)而 FLAASH 期望的单位是 μW/(cm²·sr·nm) 的 10 倍量级所以填 10 做缩放。这个值不是固定的取决于你的定标输出单位如果定标时用的是 W/(m²·sr·μm)缩放因子需要相应调整。3.2 多光谱设置与波段范围选择在 Multispectral Settings 对话框中需要指定哪些波段参与大气校正计算。对于 Landsat8 OLI通常选择 Band1 到 Band7全色波段 Band8 不参与。对话框中有两个关键选项一是 Filter Function FileLandsat8 的波谱响应函数文件通常随 ENVI 安装包提供路径在安装目录的 filter_func 文件夹下二是 Water Retrieval 选项如果研究区没有大面积水体选 No 可以加快处理速度。大气校正完成后验证结果是否合理有几个快速判断方法。第一看植被区域的光谱曲线校正后应该在近红外波段Band5有明显的反射峰红光波段Band4有吸收谷。第二看水体区域校正后水体反射率应该整体偏低且平缓。第三对比校正前后的 Z Profile校正后的曲线应该更平滑去掉了大气散射导致的短波波段偏高现象。注意FLAASH 处理时间较长全幅影像可能需要 20 到 40 分钟。如果中途报错 ACC error通常是输入数据的波长信息不完整或者波段数超限回头检查 Edit Header 里的 Wavelength 列。4. 图像融合四种方法目视与定量怎么选4.1 Brovey、HSV、PC 三种变换的操作差异图像融合的目的是把 15 米全色波段的空间细节注入到 30 米多光谱波段中得到既有高空间分辨率又保留光谱信息的融合影像。ENVI 中常用的三种方法操作路径都在 Transform - Image Sharpening 下但参数设置和适用场景不同。Brovey 变换的数学逻辑是融合后波段 多光谱波段 × (全色波段 / 多光谱波段之和)。它要求输入必须是 RGB 三波段组合所以你需要先从大气校正后的影像中选出 Band5、Band4、Band3 合成假彩色 RGB再把 Band8 作为高分辨率输入。重采样方法选最邻近法因为最邻近法不改变原始像元值对后续定量计算影响最小。HSV 变换先把 RGB 图像转换到 HSV 颜色空间用全色波段替换亮度分量 V再变换回 RGB。操作上同样是输入 543 合成的 RGB 和 Band8重采样选最邻近法。HSV 融合的优点是纹理改善明显缺点是光谱信息损失较大融合后影像的颜色和原始影像会有肉眼可见的差异。PC 变换主成分变换的步骤稍多先对多光谱波段做主成分分析得到各主成分分量然后用全色波段替换第一主成分最后做主成分逆变换。PC 融合理论上不受波段数限制光谱保持性较好但第一主成分集中了大部分信息替换后色调变化明显视觉上可能反而不如原始影像清晰。4.2 定量评价均值、标准差、信息熵与平均梯度目视解译只能给出定性判断要写实验报告还得有定量指标。常用的四个指标是均值、标准差、信息熵和平均梯度。均值和标准差可以直接在 ENVI 中通过 Basic Tools - Statistics - Compute Statistics 计算信息熵和平均梯度需要导出像元值到 MATLAB 或 Python 中编程计算。import numpy as np from skimage.io import imread # 读取融合影像的单个波段假设已导出为 tif band imread(fusion_result_b5.tif).astype(np.float64) # 均值 mean_val np.mean(band) # 标准差 std_val np.std(band) # 信息熵基于灰度直方图 hist, _ np.histogram(band, bins256, range(0, 255)) prob hist / hist.sum() prob prob[prob 0] # 去掉零概率避免 log(0) entropy -np.sum(prob * np.log2(prob)) # 平均梯度反映图像清晰度 grad_x np.diff(band, axis1) grad_y np.diff(band, axis0) mean_gradient np.mean(np.sqrt(grad_x[:-1, :]**2 grad_y[:, :-1]**2)) print(f均值: {mean_val:.4f}, 标准差: {std_val:.4f}) print(f信息熵: {entropy:.4f}, 平均梯度: {mean_gradient:.4f})这段代码的逻辑很直接均值和标准差反映影像的整体亮度和对比度信息熵衡量灰度分布的离散程度熵越大信息量越丰富平均梯度反映边缘和纹理的清晰度。参数方面bins 设为 256 是因为 Landsat8 反射率数据通常在 0-1 之间导出为 8 位时映射到 0-255。如果你的数据是浮点反射率bins 需要相应调整或者先做线性拉伸再计算。从本次实验的定量结果看HSV 融合在信息熵和平均梯度上表现最好说明纹理细节最丰富Brovey 融合的均值偏低是因为全色波段替换后整体亮度被压缩PC 融合的标准差最小印证了目视解译中变得更模糊的判断。这些数值和目视结论相互印证写报告时就有了完整的证据链。5. 避坑与排查那些让实验报告卡住的常见问题5.1 波段顺序错乱导致光谱曲线异常现象大气校正后植被光谱曲线在近红外波段没有反射峰或者整条曲线形状和标准植被光谱完全对不上。原因Layer Stacking 时波段导入顺序不是 1 到 8 的正序或者 Edit Header 中中心波长的排列顺序和实际波段顺序不一致。ENVI 按索引匹配波长顺序错了光谱就错位了。解决重新做 Layer Stacking导入时严格按 Band1 到 Band8 的顺序添加。完成后在 Edit Header 中逐条核对 Wavelength 列确保 Band1 对应 0.443 μm、Band2 对应 0.482 μm以此类推。5.2 FLAASH 报错 ACC error 或处理中断现象FLAASH 运行到一半弹出 ACC error 提示或者直接卡死无响应。原因最常见的是输入数据格式不对BSQ 未转 BIL、波段数超过 15 个、或者头文件中缺少波长信息。另外如果影像尺寸过大超过 2000×2000 像元内存不足也会导致中断。解决确认输入文件是 BIL 格式且为浮点型检查波段数Landsat8 只用 1-7 波段在 Edit Header 中补全 Wavelength 信息如果影像太大先做空间裁剪再跑 FLAASH。5.3 融合影像与原始影像地理范围不一致现象融合后的影像和大气校正后的影像叠加显示时边缘出现错位或者范围大小不同。原因融合过程中重采样方法选错或者全色波段和多光谱波段的空间范围本身不一致全色波段通常比多光谱波段范围略大。解决融合前先用 Subset Data 把全色和多光谱裁剪到完全相同的空间范围重采样统一用最邻近法融合后在 ENVI 中用 Layer Stacking 把融合影像和原始多光谱放在一起检查像元对齐情况。5.4 温度反演结果整体偏高或偏低现象单窗算法反演出的地表温度比实际气象站记录高出 10K 以上或者整体偏低。原因大气校正法中的大气透过率和大气平均作用温度参数估计不准或者单窗算法中的比辐射率没有根据 NDVI 做分级修正。Landsat8 热红外波段Band10的定标参数如果填错也会导致亮温计算偏差。解决大气透过率参考 NASA 提供的标准大气剖面数据按研究区海拔和季节选取比辐射率用 NDVI 阈值法修正NDVI 大于 0.5 的区域取 0.99小于 0.2 的区域取 0.97介于两者之间的按公式计算Band10 的定标参数单独核对 MTL.txt 中的 RADIANCE_MULT_BAND_10 和 RADIANCE_ADD_BAND_10。5.5 监督分类样本选择导致分类精度虚高现象最大似然分类的精度评价报告显示 Kappa 系数 0.95 以上但分类图上明显有大量错分区域。原因训练样本和验证样本来自同一批 ROI或者样本选择时只选了容易区分的纯净像元没有覆盖过渡区域和混合像元。解决把 ROI 分成两组一组做训练一组做验证两组样本在空间上不重叠样本选择时每个类别至少选 30 个以上像元且要覆盖该类别的光谱变异范围分类后做混淆矩阵看各类别的制图精度和用户精度是否均衡。6. 从分类到变化监测一个可复用的进阶技巧做完单期影像的分类之后土地利用变化监测的常规做法是把两期分类图做叠加分析用 ENVI 的 Change Detection Statistics 工具生成转移矩阵。但这里有一个容易被忽略的细节两期影像的分类体系必须完全一致类别编码也要对应否则转移矩阵会出现无意义的错位。我一般会这样做先在 2013 年和 2019 年的分类图上分别定义相同的类别编码比如 1水体、2植被、3建设用地、4耕地、5裸地然后用 ENVI 的 Classification - Post Classification - Confusion Matrix - Using Ground Truth ROIs 分别做精度评价确认两期分类的 Kappa 系数都在 0.8 以上再做变化检测。如果某一期精度不够回头补样本重新分类不要带着低精度分类图硬做变化分析否则转移矩阵的结论完全不可信。另一个实用技巧是温度反演结果和分类图的叠加分析。把地表温度反演图按类别做分区统计可以得到不同地类的平均温度比如建设用地的平均温度通常比水体高出 5-8K植被区域介于两者之间。这个分析在写生态环境与土地利用关系的讨论时非常有用也是实验报告里能体现分析深度的部分。import numpy as np # 假设已导出分类图和温度反演图尺寸一致 landcover np.array([[1, 1, 2, 2], [1, 3, 3, 2], [4, 4, 3, 3], [4, 4, 4, 3]]) # 1水体 2植被 3建设用地 4耕地 temperature np.array([[25.1, 25.3, 28.7, 29.0], [24.8, 32.5, 33.1, 28.5], [30.2, 31.0, 33.5, 32.8], [29.8, 30.5, 31.2, 32.0]]) # 按地类统计平均温度 for lc in np.unique(landcover): mask landcover lc mean_temp temperature[mask].mean() print(f地类 {lc} 平均温度: {mean_temp:.2f} K)这段代码的逻辑是按地类掩膜提取温度值再求均值。参数方面landcover 和 temperature 的数组尺寸必须一致实际使用时从 ENVI 导出为 ASCII 或 TIF 后读入即可。如果两期影像都做了这个分析还能对比同一地类在不同年份的温度变化进一步讨论城市热岛效应或生态恢复效果。从那以后我每次做遥感综合实验都会在分类完成后强制走一遍精度评价 - 变化检测 - 地类温度统计的流程不跳过任何一步。因为一旦分类精度不达标后面的所有分析都是空中楼阁写出来的报告自己都不敢信。希望帮到你。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。