
1. 预处理顺序的底层逻辑为什么是条带去除优先先解决一个很多人上来就会问的问题这三步能不能调换顺序答案是最好别乱换。先说条带去除。条带问题最典型的来源是Landsat 7 ETM2003年5月31日之后它的扫描线校正器SLC出现故障导致获取的影像两侧出现大面积的数据空洞这些空洞以规则的条带形态分布占了影像面积差不多22%左右。条带区域本身是“没有数据”NoData的如果不处理后续做任何定量分析都会在条带处产出空值或者异常值。条带去除的本质是“把缺失的数据补回来”它不是对已有像元做数学变换所以它和辐射定标、大气校正之间没有数值层面的冲突。把它放在最前面唯一需要考虑的是你用什么方法补补出来的数据是“估计值”还是“插值”这会影响到后面定标和大气校正的物理意义。但顺序上先补洞再定标最后做大气校正是效率最高、逻辑最顺的路线。再说辐射定标和大气校正的顺序。辐射定标做的事情是把传感器记录的DN值Digital Number数字量化值转换成具有物理意义的辐射亮度值或反射率值。这个过程只依赖传感器自身的绝对定标参数增益、偏置不依赖大气状态所以它一定是大气校正之前必须完成的一步。大气校正则是在辐射定标的基础上进一步消除太阳辐射经过大气层时的吸收、散射影响把“传感器入瞳处的辐射亮度”转化为“地表真实反射率”。没有辐射定标大气校正就没有输入没有大气校正辐射定标的成果辐射亮度虽然物理意义明确但在多时相对比、植被指数计算、地表分类等应用场景下仍会受到大气条件差异的干扰。所以整个预处理的顺序可以概括为先结构修复条带去除再传感器校准辐射定标最后大气环境消除大气校正。这个顺序不是我拍脑袋定的而是每一步的输出恰好是下一步输入的天然衔接。你在ENVI5.3里操作时按这个顺序走每个工具之间的文件流转也最顺手。1.1 条带去除的两种主流思路条带去除这件事核心难点不在于“会不会点按钮”而在于你用什么数据来补洞。目前主流做法大致分两类。第一类是单景影像内插法。原理很简单条带两侧的有效像元在空间上连续我可以用两侧的像元值拟合出中间空洞区域的近似值。ENVI里经典的Landmax_gapfill工具、局部线性回归匹配Local Linear Regression Matching等方法都是这个思路。这类方法的优点是只需要一景影像就能完成操作简单处理速度快缺点是补出来的条带区域在纹理细节上会有一点“糊”尤其在植被边界、水体岸边这类地物突变区域插值痕迹会比较明显。如果你的研究区正好是破碎地类居多就要对插值结果存一份警惕心。第二类是多时相替换法。思路是找一景同区域、不同时相的清晰影像用它的有效像元去填补目标影像的条带空洞。理论上这是更“物理”的方式因为补进来的数据是真实观测值。但这里有个前提条件两期影像之间地物不能变化太大。如果是做土地利用变化检测目标期和参考期之间地物已经翻了天那你补进去的数据反而会引入新的误差这时候多时相替换反而不如单景内插稳。实际项目中我见过不少人是两期拼接着用也就是同时用一段时间内的多期影像做加权估计这在植被长势监测里用得比较多但对底图的几何一致性要求很高Landsat L1级别产品虽然已经做过几何校正但多期影像之间依然会有几个像元的偏移做替换前需要重新配准。1.2 辐射定标的物理意义不只是“改个数”辐射定标表面上就是拿DN值乘一个增益、加一个偏置公式长这样L Gain × DN Offset但这里的Gain和Offset从哪里来值得展开说一下。Landsat L1级别产品都带一个MTL元数据文件Landsat 8以后叫MTL.txt里面记录了每个波段的RADIANCE_MULT_BAND和RADIANCE_ADD_BAND这两个值就是该景影像当年定标时的增益和偏置。你要做的就是在ENVI的Radiometric Calibration工具里选对文件软件会自动读取元数据里的这些系数不需要手工输入。如果哪天你拿到一景裸影像没有元数据文件那就得去USGS官网查该卫星对应波段的定标参数但这种情况非常少见一般官方分发的L1数据都带全套元数据。还有一个操作细节输出类型的选择。ENVI的辐射定标工具里Output Data Type可以选Float浮点型或Integer整型。我统一建议选Float。原因有两点一是浮点型能保留定标后的小数精度反射率值往往在0到1之间如果转成整型就直接变成0数据就废了二是后续做FLAASH大气校正时输入文件要求是浮点型的BSQ或BIL格式提前转好格式能省掉一个步骤。2. 条带去除实操Landsat 7 SLC-off数据的修复2.1 工具选择与安装ENVI5.3环境下做Landsat 7条带修复最常用的是USGS提供的Landsat Gap Fill插件网上搜“Landsat_gapfill.sav”就能找到下载后放到ENVI的扩展目录下重启ENVI在Toolbox里就能看到Landsat Gapfill工具了。如果你不想装插件ENVI自带的另一种思路是对条带区域做掩膜然后利用邻域像元做卷积插值或克里金插值。但这种做法只能填“小洞”Landsat 7那种规则的、成片的条带空洞用通用插值工具处理效果很差跑出来会有明显的条带残影我还是建议直接用专门的Gap Fill插件。2.2 参数设置与操作步骤打开Landsat Gapfill工具后界面会要求你选择输入影像。这里有个关键点原始L1数据就能直接用不用先做辐射定标。因为条带去除是纯粹的空间域操作补洞的算法只关心像元值之间的空间关系不关心像元值的物理含义。你先把条带补好再去做辐射定标和大气校正出来的成果完全不受影响。工具的核心参数有两个Method方法插件提供了多种补洞算法比如“Nearest Neighbor最近邻”、“Local Linear Regression局部线性回归”、“Phase One基于相位一的回归”等。我推荐“Local Linear Regression”它在保真度和平滑度之间比较均衡尤其在农田、草地这类相对均匀的地表上效果很好。对建筑密集区而言如果要求更高可以试试“Phase One”但耗时会长不少。Number of Neighbors邻域像元数默认值一般是16。数值越大参与拟合的空间范围越大补出来的区域越平滑数值太小则会造成噪声点。实操下来16到40之间是个合理区间我一般先用16跑一版检查条带区域有没有明显的断层如果有再调整到24或32重跑。填完参数点击OK工具会把所有波段一次性处理完输出一个多波段文件。我拿到这个文件后第一件事就是目视检查三个地方一是条带区域是否还有明显的规则纹理二是条带边缘是否出现亮线或暗线这通常是插值过冲的表现三是水体、云影这类低反射区域是否出现异常的高值斑点。这三关过了条带修复这一步才算真正合格。2.3 条带修复中的几个坑第一个坑是重采样顺序。如果把条带去除放在辐射定标之后做那么你补洞时输入的已经是从DN值转换来的反射率/辐射亮度数据插值算法对这个范围内的小数值很敏感容易在条带区域产生数值抖动。而在DN值通常是16位整型范围几百到几千上做插值算法对数值波动的容忍度更高效果更稳。所以再次强调先补洞再定标。第二个坑是边缘条带的判断。Landsat 7 SLC-off的条带在影像中心区域比较窄越往边缘越宽最宽处能到十几个像元。像元越宽插值的不可靠程度越高。你要是拿条带去除的结果直接做定量分析一定要把研究区尽量控制在条带较窄的中心区域或者明确交代边缘条带区域的精度受限。第三个坑是云和条带的叠加。如果影像里云覆盖区域恰好和条带区域重叠Gap Fill工具会把云当成有效像元去参与插值结果就是条带区域被“补”成了云的值这就是灾难性的错误。遇到这种情况唯一的办法是先对云区做掩膜让填洞算法感知到这些区域也是无效值或者干脆换一景少云的影像。3. 辐射定标实操从DN值到辐射亮度3.1 ENVI5.3辐射定标操作路径在ENVI5.3里辐射定标的入口是Toolbox → Radiometric Correction → Radiometric Calibration。选中后选择你处理过的条带去除影像软件会自动弹出辐射定标参数面板。这里要注意ENVI5.3版本的界面逻辑是你选的影像如果自带元数据Landsat L1产品的MTL信息被ENVI识别为头文件记录它会自动把Calibration Type设置为Radiance辐射亮度并且自动填入各波段的增益和偏置参数。你需要手动确认的只有三件事Output Interleave输出波段存储顺序我建议选BSQBand Sequential因为FLAASH大气校正官方推荐格式就是BSQ或BIL选BSQ可以从头就统一省得后面再转格式。Output Data Type输出数据类型选Float。Scale Factor缩放系数默认是0.1这个要特别留意。在ENVI5.3的默认设置下输出辐射亮度值会自动乘以这个缩放系数也就是说如果真实辐射亮度是100输出文件里存的其实是10需要读文件时心里有这个数。我当时第一次用ENVI跑定标输出的反射率图怎么看怎么暗查了半天才发现是这里默认乘了0.1。3.2 定标系数怎么读怎么看如果你是第一次接触Landsat数据建议打开MTL文件翻一翻。以Landsat 8为例文件里有这么几行RADIANCE_MULT_BAND_1 1.2345e-02 RADIANCE_ADD_BAND_1 -49.12345第一个数是增益第二个数是偏置。定标的本质就是把DN值代进公式里算出辐射亮度。Landsat 8以后还有更省事的做法ENVI的辐射定标工具可以直接读取MTL里的反射率定标系数REFLECTANCE_MULT_BAND / REFLECTANCE_ADD_BAND输出Reflectance类型这样连大气校正都不用做就能得到表观反射率Top of Atmosphere Reflectance。但注意表观反射率和地表真实反射率是两回事它是大气校正之前的中间产品。很多人拿TOA反射率去做NDVI做完才发现和实测值偏差明显原因就是这个TOA反射率还没去掉大气的影响。3.3 定标结果的检验方法定标做完别急着往下走先检查一下结果是否合理。我常用的办法是取几个典型地物的辐射亮度值做对照清洁水体在红光波段的辐射亮度通常在 0.5-2 W/(m²·µm·sr) 量级裸土在近红外波段的辐射亮度和红光波段有明显差异浓密植被在近红外波段的辐射亮度明显高于红光波段同一景影像上这个比值通常在3到5倍如果这些特征对得上说明定标过程没问题。如果数值整体小一个数量级或者大一个数量级大概率就是缩放系数没搞对回炉重看。这个检查步骤花不了两分钟但能帮你省下后面大气校正出“花图”后再排查的大把时间。4. 大气校正实操基于FLAASH的参数设置4.1 FLAASH的输入准备FLAASHFast Line-of-sight Atmospheric Analysis of Spectral Hypercubes是ENVI里最常用的大气校正模块它基于MODTRAN辐射传输模型。说到MODTRAN最近总有人问MODIS卫星数据的大气校正怎么做我这里顺带说一句MODIS L1B数据在ENVI里同样可以转成辐射亮度格式后用FLAASH处理但MODIS的波段设置和Landsat差异很大主要是为海洋、气溶胶、火点等特定应用设计的做大气校正前需要仔细查看波段中心波长和响应函数不能照搬Landsat的经验。不过FLAASH的核心参数逻辑大气模型、气溶胶模型、能见度是共通的下面这套参透之后切换到MODIS数据也只是换一套波段参数的问题。回到Landsat。FLAASH要求输入文件满足以下条件数据类型是浮点型存储顺序是BSQ或BIL单位是辐射亮度即 W/(m²·µm·sr)包含波长信息且波长单位正确如果你前面辐射定标严格按上面的步骤来那么你的定标输出文件已经满足了前三个条件。波长信息这一步是FLAASH里最容易出问题的地方。ENVI对于Landsat L1文件一般能自动识别波长但如果你用的是波段合成后重命名过的文件它可能就不认了。解决办法是在Toolbox里用Edit Headers工具手动输入每个波段的中心波长值。4.2 FLAASH参数设置的完整清单打开Toolbox → Radiometric Correction → Atmospheric Correction Module → FLAASH Atmospheric Correction选中定标后的BSQ浮点文件界面弹出后按以下参数配置Input Radiance Image选定标文件单位选 W/(m²·µm·sr)Sensor Type选Landsat 8 OLI或对应的传感器类型。ENVI5.3内置了常见传感器的中心波长和响应参数选对之后它会把下面19个波段的波长自动填好。这一步对精度影响极大千万别选错传感器类型Flight Date and Time飞行日期和时间填影像的采集UTC时间在MTL文件里能找到。这个参数影响太阳天顶角和太阳方位角的计算。填错的话大气校正的几何关系就错了校正值可能出现整体偏移Scene Center Location影像中心经纬度填影像中心点的经纬度MTL文件里有填错纬度可能导致大气模型判断错误Ground Elevation地面平均海拔填研究区平均海拔单位是千米。这个值可以从DEM数据里提取也可以粗略估。它对大气分子吸收和散射的路径长度计算有直接影响Atmospheric Model大气模型根据影像所在的纬度和获取季节选择。热带Tropical、中纬度夏季Mid-Latitude Summer、中纬度冬季Mid-Latitude Winter、亚北极夏季/冬季。中国大多数区域在30-45°N之间夏季选中纬度夏季冬季选中纬度冬季海南、广东等低纬度地区选热带模型Aerosol Model气溶胶模型这个选项有Urban城市、Rural乡村、Maritime海洋、Tropospheric对流层等。城市及其周边区域选Urban植被覆盖好的乡村区域选Rural沿海区域选MaritimeInitial Visibility初始能见度这个参数是个“启动值”FLAASH后续会根据影像本身的特征自动反演气溶胶光学厚度。如果你无法确定能见度我建议填40km这是大陆洁净大气的常用初始值。实测下来初始值对最终结果影响不大FLAASH迭代几次后会自己收敛但注意别填得太极端比如5km或100kmSpectral Polishing光谱平滑可选Yes或No我建议选Yes它用低通滤波的方式压制光谱噪声对多光谱数据影响不大但能有效减少条带残余带来的噪声Modtran ResolutionMODTRAN分辨率设置MODTRAN模型的波数分辨率光谱分辨率选15 cm⁻¹或100 cm⁻¹。Landsat 8 OLI作为多光谱传感器波段数不够多分辨率选15或100差别不明显选100能显著加快计算速度参数填完后点击ApplyFLAASH会进入计算状态。这个过程的耗时取决于影像大小和机器性能一景标准的Landsat影像约8000×8000像元除去条带和无效区域后约6000×6000在普通台式机上大概要跑10到20分钟。跑完后输出文件会自动变成地表反射率数据。4.3 大气校正结果的检查大气校正完的结果一定要求做一个“合理性检查”这也是判断参数是否设置正确的关键。我的习惯是看三个指标图像直方图是否出现大面积接近0或接近1的饱和现象如果大气校正过量反射率会整体被压向0如果不足则整体偏亮水体在近红外波段的反射率是否接近0。水体对近红外吸收极强正常大气校正后近红外反射率应该在0.02以下如果还显示很亮说明大气校正没到位植被的红光和近红外反射率是否合理。健康植被的近红外反射率一般0.35-0.45红光反射率一般0.05-0.10这个比值直接决定了NDVI的可靠性顺便提一下FLAASH还有一个高级功能叫Water Retrieval它可以利用大气校正过程中反演的水汽含量给影像做卷云剔除对含云影像的质控很有用。如果大面积水汽反演异常回头检查一下前面的输出数据。5. 常见问题与排查技巧实录5.1 条带去除之后影像上还是有隐约的条纹这个问题我前前后后遇到过不下十次。排查思路无非两条一是回头检查Gap Fill的邻域像元数是否太小二是针对插值区域用低通滤波做一次轻微的平滑。但如果你补洞之后紧接着就做辐射定标定标过程对DN值做线性拉伸拉伸幅度大的波段通常是短波红外波段会把条带区即使轻微的亮度不均放大成可见条纹。解决办法是在Gap Fill阶段就把邻域参数调大或者在定标前先对条带区做一次3×3的高斯低通滤波把插值带来的锯齿感消掉。5.2 FLAASH报错“Cannot open input file”这个报错看起来像是文件读取问题但往往原因只有一个输入文件的格式或头文件信息不完整。最常见的情况是你在辐射定标时输出选了ENVI标准格式但中途又用ArcGIS或者其他工具打开保存过软件重写了头文件把波长信息丢掉了。FLAASH一检查发现没有波长信息直接拒绝处理。解决办法就是回到Edit Headers里手工把波长补进去。所以我的习惯是从头到尾都在ENVI里处理尽量不用第三方软件中转以免头文件被意外改写。5.3 大气校正后的图像“鬼影”严重“鬼影”通常表现为地物的边缘出现亮色或暗色轮廓像是照片曝光过度或不足的效果。这在植被与裸土交界的区域最明显。原因有二一是波段配准不足Landsat L1产品虽然做过几何校正但波段间仍有亚像元级偏移在边缘区域会被大气校正算法放大二是大气校正中气溶胶模型选错了。如果你把城市区域选成了Rural模型气溶胶光学厚度被低估校正后的反射率在亮地表上会偏高产生光晕效应。处理办法先检查波段间错位用ENVI的Compute Registration Offset针对两个波段做偏移检测如果波段没问题再去调整气溶胶模型和能见度重跑。提示凡是大气校正后出现影像整体发灰、边界发亮的问题先别急着怀疑工具本身手动检查参数是最重要的。尤其要看飞行日期、中心经纬度、大气模型、气溶胶类型四项90%以上的异常结果都出在这四个参数上。5.4 辐射定标后影像变暗或变亮这个问题的常见原因前面放过排查路径这里再补充一个容易被忽略的点Landsat 8 OLI的辐射定标系数里有些波段的偏置是负值比如-49.1这个量级。定标以后暗像元如水体阴影的辐射亮度可能会变成负值。ENVI显示影像时会按最小值拉伸直方图负值会全部显示为纯黑影像看起来就会偏暗。这个不是错误不用管它FLAASH大气校正时负值会被默认按无效值处理或者你也可以在FLAASH设置里把负值重新缩放。所以看到负值别慌确认头文件里的单位和波长没问题就行。5.5 处理流程中的数据管理建议这一节算是额外赠送。我个人的习惯是建立固定的文件命名体系避免预处理做了一半文件名对不上号原始数据LC08_xxx_RAW.dat 条带去除后LC08_xxx_GF.dat 辐射定标后LC08_xxx_REF.dat或RAD.dat 大气校正后LC08_xxx_SRF.dat同时在ENVI的Layer Manager里给每一层级命名加前缀比如“RAW”、“GF”、“CAL”、“FLAASH”这样在进行多景对比或批量处理时一眼就能串起数据来不至于中途不知道该拿哪个文件做下一步。做遥感预处理最怕的就是数据版本混乱尤其是在做长时间序列分析时一景影像处理错了整条时间序列的精度都会受影响。6. 整条流程的串联回顾与扩展思路6.1 三步走的完整数据流转把条带去除、辐射定标、大气校正串起来整个数据流转是这样的输入Landsat L1级别产品带MTL元数据内含DN值影像第一步条带去除Landsat Gapfill工具输出DN值的补洞影像第二步辐射定标Radiometric Calibration工具输出浮点型辐射亮度影像BSQ格式第三步大气校正FLAASH工具基于MODTRAN模型输出地表真实反射率影像这套流程的最终产物——地表反射率影像——是所有遥感定量分析的基础。NDVI、LAI、地表温度反演、分类、变化检测全都要从这一步开始。6.2 一盏灯式的经验总结最后聊点实际经验。第一次跑这个流程的新手最喜欢问的问题是“参数设多少合适”但做完几次之后你就会发现参数本身不重要重要的是你理解每个参数在物理上到底是什么、极端情况下会怎样影响结果。以FLAASH的大气模型为例你要是把亚北极冬季模型用在中国南方夏天的数据上结果绝对是很夸张的裂开式偏差——植被近红外反射率能冲到0.8以上这个样子不只是定量分析不可用连目视解释都成问题。参数的含义和适用场景必须刻在脑子里比背一百个快捷键都有用。我个人的经验存放在这三个口诀里先结构后物理条带不除后面全白做定标看单位反射率、辐射亮度傻傻分不清数据就毁了大气校正的四个必填参数日期、经纬度、大气模型、气溶胶错了任何一项输出都是“精致的垃圾”按照这套流程走下来你拿到的Landsat数据就是可以直接扔进各种波段运算、机器学习分类模型的高质量地表反射率数据了。后续如果再进阶可以在这个基础上做地形校正对山区数据特别重要、BRDF归一化对长时间序列特别重要但那是下一层的精度提升课题。先把预处理做扎实比什么玄学调参都重要。