
一景Landsat7影像下载回来在ENVI5.3里打开满屏黑白交错的条带第一反应往往是“数据是不是坏了”。其实不是数据坏了是Landsat7的扫描行校正器SLC在2003年失效后留下的“经典伤疤”。这种条带不处理直接做辐射定标和大气校正结果基本没法用。这篇就围绕ENVI5.3把条带去除、辐射定标、大气校正这一整条链路讲透。文章不绕弯子直接说操作顺序、参数怎么选、哪些坑我替你们先踩过了。我用ENVI做Landsat预处理大概有七八年中间也接过不少Landsat、MODIS的定量反演项目。每次带新人都要花一个下午给他们解释“为什么辐射定标之后的数值还是不对”“为什么FLAASH一直报图像单位错误”。这些问题的根源绝大多数不是软件操作不熟而是没理解数据在每个环节到底变成了什么物理量。所以这篇不只是给步骤更会把背后的道理讲清楚适合刚接触遥感的本科生、研究生以及需要快速上手预处理流程的从业者。1. 条带从哪里来Landsat7 SLC失效后的“经典问题”1.1 SLC失效不等于数据不能用Landsat7发射于1999年设计寿命本来不长但硬是撑了二十多年。2003年5月它的扫描行校正器出现永久性故障导致获取的影像出现大量数据缺失条带。简单说正常的影像每一行都是由扫描镜连续推扫出来的SLC坏了以后扫描镜的摆动没法精确补偿轨道前进带来的偏移图像上就会周期性地出现一条有数据、一条没数据的“百叶窗”效果。很多人一看到条带就放弃觉得这是废数据。实际上Landsat7在SLC故障后仍然持续获取影像只是某些波段、某些区域有大段缺失。用ENVI5.3自带的Landsat Gapfill扩展配合相邻日期的影像能把大部分缺失填补回来。尤其是农业监测、大尺度植被分析这类项目Landsat7后期影像依然有参考价值。不过有一点要清楚条带填充解决的是“视觉连续”和“地理覆盖”问题没法恢复真实地表信息。填出来的像元在光谱上可能是插值结果后续如果做高精度定量反演要把掩膜信息保留下来或者明确标注哪些区域是填充的。1.2 条带数据为什么不能直接扔进定量流程如果把带条带的影像直接做辐射定标ENVI会正常计算但缺失条带区域的值会被当作0或背景值处理。这会导致两个问题一是统计直方图时引入大量异常低值影响后期阈值分割二是做大气校正时FLAASH会基于整景影像的统计信息估算气溶胶参数这些黑条会严重干扰反演出来的地表反射率可能出现错乱。所以我建议的顺序是先看条带位置和占比再做条带填充或掩膜确认影像“干净”了再进入辐射定标。这个顺序可以节省很多排查时间。之前有个项目我图省事直接跳过了填充结果大气校正后的NDVI图像上出现规则的条纹状异常后来不得不回头重新做。2. 条带去除实操用Gap Fill把洞补上但要认清边界2.1 先安装并打开Landsat Gapfill扩展ENVI5.3主界面默认不直接显示Gapfill工具需要先检查是否安装了扩展。打开Toolbox在搜索框输入“Gap Fill”如果能搜到Landsat Gapfill说明已经装了没装的话通过ENVI App Store或以往习惯使用的扩展包安装重启后即可看到。扩展装好后操作路径一般是Toolbox Raster Management Landsat Gapfill。它会要求输入至少一幅主影像和一幅参考影像。主影像是你想修复的那景参考影像最好选择与主影像时间接近、云量较少、条带位置不重合的另一景Landsat数据。选择同一轨道、相邻日期的影像效果最好因为地表覆盖变化最小。2.2 单景填充和多景填充怎么选Landsat Gapfill支持两种模式一种是只用主影像自身的信息来估算缺失值另一种是结合参考影像数据。我实测下来如果条带区域较大单靠主影像自身信息基本没用因为插值出来的区域会非常平滑失去真实纹理。多景填充明显更可靠。具体设置里需要指定“Fill Direction”和“Pixel Search Size”之类的参数。Fill Direction通常有“Both”和“Forward/Backward”可选我的习惯是选Both让算法从缺失区域左右两侧同时搜索有效像元取平均或加权值填充。Pixel Search Size决定搜索半径默认值一般够用但如果你处理的影像条带特别宽可以考虑适当调大搜索范围。输出时应选择“Gap Mask”一起输出这样后续分析可以明确排除填充区。2.3 填充后质量评估的“红线”用Gapfill工具处理完不要急着关掉。我会做两步检查第一步目视对比条带区域和非条带区域的地物纹理看是否出现明显的“水彩画”模糊痕迹。第二步在原始影像和填充影像的同一位置分别采样统计DN值范围。如果填充区域的值和周边差异过大说明参考影像的地物变化太大或者是云的边界影响了匹配。如果填充效果不理想不要硬用。条带占比超过30%的影像即便强行填充后续定量反演误差也会很大。这种数据不如直接换一景或者改用Landsat8/9数据。填出来的数据当作视觉底图可以但写论文或做决策时需要谨慎说明数据来源和修复方式。3. 辐射定标把DN值变成“能比较”的物理量3.1 DN、辐亮度、反射率三者的关系辐射定标是整个预处理流程里最容易被低估的一步。Landsat Level-1产品存的是DN值这个值受到传感器增益、偏移、太阳高度角、日地距离等因素影响不同传感器的DN值没有可比性。要做时间序列分析或者把Landsat和MODIS数据放在一起用必须统一到辐亮度或反射率。三个概念的区别可以用一个比喻DN值是“原汁原味没处理过的相机数字”辐亮度是“换算成传感器入瞳处能量的物理量”反射率是“把太阳照亮程度和测量几何归一化之后的地表特性”。辐亮度受光照影响反射率则更接近地物本身性质所以很多遥感指数最终都用反射率计算。3.2 ENVI5.3 Radiometric Calibration设置在ENVI5.3里打开Toolbox搜索Radiometric Calibration。输入文件选择原始Landsat影像或MTL文件。如果直接选MTLENVI会自动读取各波段的增益和偏移系数省去手动输入的过程。关键在右侧设置面板Calibration Type如果是为了FLAASH大气校正选择Radiance如果只是做反射率产品选择Reflectance。Output Interleave建议BSQ或BIL。FLAASH尤其喜欢BIL因为处理效率高。Output Data Type浮点型Float或Double避免整数截断带来的精度损失。Scale FactorENVI默认可能是0.1要根据实际情况谨慎选择。我的习惯是“定标一次输出RAD再在FLAASH里做反射率”。因为FLAASH必须输入的是辐亮度图像而不是反射率图像。定标到Reflectance的结果可以直接用但如果后续想换大气模型就要重新回到辐亮度多留一个中间产品总没有坏处。3.3 定标后检查单位和异常值辐射定标完第一件事不是直接套公式而是检查像素值。打开曲线剖面工具查看几个典型像元的数值。如果是TOA反射率应该在0到1之间如果是辐亮度不同波段的量级不同但通常不会出现几千几万这样的离谱数值。有次我帮同事排查他说辐射定标后反射率全是0.0001到0.0003一看就是DN值没有乘上增益系数。原因是他输入的MTL文件路径不对ENVI只读到了图像像素值没有匹配元数据。这种情况在ENVI5.3里很常见所以不管用什么工具打开数据后都要看一眼Pixel Editor里的Value再做下一步。如果是为了后续FLAASH还要格外注意单位。FLAASH默认接受单位是微瓦每平方厘米每球面度每纳米而Landsat8 OLI的辐亮度单位通常定义为瓦每平方米每球面度每微米。ENVI如果设置了Scale Factor可能在输入FLAASH之前会自动调整但如果下载的是别人做好的辐亮度产品时刻记得确认数值量级。4. 大气校正FLAASH参数和常见报错一次说清4.1 FLAASH和QUAC怎么二选一ENVI里大气校正最常用两个模块FLAASH和QUAC。FLAASH基于MODTRAN辐射传输模型物理过程完整输入参数多精度高是绝大多数Landsat定量分析的首选。QUAC则是快速近似算法输入简单不需要太多辅助参数适合快速浏览级别的反射率图像或者当你完全不知道影像拍摄时间和地理位置时。我在实际项目里是这样选的需要分析植被光谱曲线、反演水质参数或者多时相定量对比用FLAASH只做假彩色合成、目视解译、快速分类用QUAC完全够用。FLAASH跑一景Landsat8如果计算机性能一般大概要十几分钟到半小时QUAC一分钟之内就能出结果但反射率的绝对值会存在一定偏差。4.2 FLAASH参数逐项拆解FLAASH面板看起来复杂核心参数其实就那么几个。逐个说Input Radiance Image选择辐射定标后的辐亮度文件。如果提示“数据不是辐亮度单位”先确认定标类型选的是Radiance再检查数值量级。Sensor Type / Flight Data选择Landsat8 OLI或Landsat7 ETM等对应类型ENVI会自动填入传感器高度。飞行日期要和影像获取日期一致这个会影响日地距离和太阳高度角。Scene Center Location点“Load”从影像中读取中心经纬度别手动填手动容易填反或者填错。Atmospheric Model根据影像纬度和获取季节选择。我的建议是参考ENVI文档里的大气模型表格中纬度夏季就选Mid-Latitude Summer热带就选Tropical不要为了省事所有影像都用Tropical。Aerosol Model城区用Urban海边用Maritime一般陆地农田用Rural。拿不准又有两三个波段满足反演条件时可以开启Aerosol Retrieval让算法估算。Initial Visibility默认40km通常不错。如果影像里有明显的灰霾或雾我会改成15到20km再观察结果。Spectral Polishing和Wavelength Calibration默认即可除非你要做高光谱一般不碰。4.3 MODIS数据做大气校正的共性操作最近常有人问modis卫星数据大气校正怎么做其实和Landsat的流程没有本质区别。MODIS L1B产品同样是DN或反射率格式需要先通过MRT、MCTK或者ENVI里的MODIS Conversion Toolkit转成辐亮度产品加上中心波长和波段宽度信息然后按照同一个FLAASH流程处理。区别在于MODIS分辨率更粗像元混合效应更明显大气校正后的噪声也可能更大所以参数上会更依赖适度平滑。我处理过MODIS的海洋水色和陆地植被数据FLAASH都适用。关键是先确认MODIS产品的定标系数有没有正确导入。MCTK转出来的产品单位通常已经是W/(m²·µm·sr)FLAASH也认识。如果单位不对系统会直接报错倒是个省心的校验办法。4.4 FLAASH常见报错排查FLAASH报错最常见的就是“Input radiance image is not in units of microwatts”核心原因是影像数值量级和单位不匹配。解决方法是回到Radiometric Calibration里重新输出并调整Scale Factor把辐亮度数值调整到符合FLAASH要求的范围。记住FLAASH关心的不是“绝对数值”而是“数值背后的单位乘数”。第二个常见问题是“No valid wavelengths found”。这通常是影像缺少波长信息或者之前做了波段裁剪、波段重组导致中心波长信息丢失。在ENVI里用Edit Headers查看Band Info手动补上每个波段的中心波长。Landsat8 OLI的多光谱波段中心波长可参考同行公开的波段列表填写。第三个坑是“Scene Center Location is out of range”。这多半是经纬度填写错误或者把十进制度和度分秒搞混。用Load读取最稳。5. 从条带去除到大气校正的完整操作链路与个人习惯5.1 一条完整的Landsat预处理流程把这个流程简化成我平时直接照做的清单下载Landsat Level-1产品优先选云量小于10%的影像。在ENVI5.3里打开影像和MTL文件先检查条带情况。有条带就用Landsat Gapfill处理同时输出Gap Mask。用Radiometric Calibration把DN值定标为辐亮度输出浮点型BIL文件。检查辐亮度数值量级确认与FLAASH单位兼容。打开FLAASH Atmospheric Correction模块填好传感器、日期、经纬度、大气模型、气溶胶模型和初始能见度。运行大气校正输出地表反射率。用典型地物光谱曲线验证结果比如植被在近红外波段有明显高反射水体在近红外波段很低。这套链路里最容易出错的是第4步和第6步之间。不少人把辐亮度定标后默认的Scale Factor直接带进FLAASH结果反射率整体偏低或偏高。我的经验是定标完输出时把Scale Factor设为0.1输出数值大概在10到200之间FLAASH里对应单位设为µW/(cm²·sr·nm)这样一次就能跑通。5.2 我在这个流程里踩过的几个坑早期做某个区域的土地利用分类时我遇到过两个记忆深刻的坑。第一个是条带填充后没注意掩膜分类算法把填充区域的平滑纹理当成了水体导致水域面积被严重高估。后来我把Gap Mask作为排除层分类精度才恢复正常。这件事教会我一个原则预处理里生成的掩膜数据和最终影像一样重要。第二个坑是大气校正输入了错误的飞行时间。Landsat影像文件名里有一串日期和时区信息FLAASH需要的是格林尼治标准时间。我有一回直接用北京时区的时间填进去结果太阳高度角差了不少反射率波形在红光和近红外波段出现了不合理交叉。检查结果时发现植被光谱曲线不对劲回头反复核对了元数据才找到原因。所以填日期和时间之前建议在MTL文件里查看DATE_ACQUIRED和SCENE_CENTER_TIME字段确保用的不是本地时区。5.3 什么时候可以“跳过”大气校正不是所有项目都必须做大气校正。如果只做单期影像的分类且训练样本和验证样本都来自同一景影像那么大气校正与否对分类精度影响不大用TOA反射率也足够。如果是做多时相变化检测、跨传感器数据融合或者反演植被理化参数就必须做大气校正。这个决定要在项目开始前就定好别等全部处理完再回头补。有一次我只想快速算归一化差异水体指数直接用了辐射定标后的TOA反射率结果也还行。原因是那个区域大气比较干净影像清晰度很高。但如果拿到的是雾霾天气下的影像TOA反射率和地表反射率差距很大用NDVI阈值提取植被面积就会失真。最终判断标准还是看你需要的是“相对关系”还是“绝对量值”。回到开头那个场景拿到带条带的Landsat7影像与其放弃不如把它当作一条完整练习链路。先用Gapfill修好条带再定标、再校正整个流程跑过一遍你会发现ENVI5.3里这些工具并不难难的是理解每一步数据变成了什么、为什么是这个参数。最后再分享一个我的个人习惯每处理一景影像我都会存一个文本文件记录下条带填充参数、定标Scale Factor、FLAASH大气模型和初始能见度。这样无论过多久翻回项目都能快速复现结果。这个简单习惯救过我不少次。