简介:围绕Landsat8影像处理展开的ENVI实习报告,定位于地信、遥感方向的学习者与实习人员,用于系统梳理从影像预处理到专题信息提取的完整实验流程。压缩包内为1个docx文档,约7.92MB,以图文结合方式记录实验目的、数据概况、图像裁剪、辐射定标与反射率求算、大气校正及比较、图像融合的定性目视解译与定量指标对比,并延伸至水体提取、植被覆盖度、温度反演、监督与非监督分类及土地利用变化分析。文档不仅给出各环节操作与结果图,还附有实习心得体会,便于读者对照复现实验、理解参数选择与结果评价思路。目前已有1245人学习下载,适合需要完成课程实习报告或补齐ENVI处理链条的遥感、地信学习者参考。
1. 一次融合选错,整份报告的结果图全部重做
做 ENVI 处理 Landsat8 影像的那份遥感影像处理实习报告,我在图像融合上付出了代价。当时为演示效果,我用了主成分变换融合,结果图放到答辩投影上,居民地和耕地边界模糊在一起,评委直接问我:“你这张图比原图清晰在哪里?”我当场答不上来。后来用同一景数据重新做了 Brovey 和 HSV 两种融合,并用定量指标对比,才发现问题出在方法选择,操作没有错,而这一步会直接影响后面水体提取和分类精度。这篇按我实际走通的顺序讲:裁剪、波段组合、辐射定标、大气校正、融合、专题提取到分类与变化监测,每一步遇到什么问题、为什么这么选、参数依据是什么,地信和遥感的同学可以拿去当操作底稿。
2. 裁剪与辐射定标:顺序、波长表、增益偏置三件事
预处理链路上真正会返工的地方就三处:裁剪和定标的先后顺序、Edit Header 里的波长表、以及定标最后一步的 BSQ 转 BIL。这三步单独看都不难,但它们有个共同特点:错了不会当场报错,而是在大气校正或者温度反演阶段才爆出来,那个时候你已经把两期影像都跑完了。
2.1 先裁还是先定标:顺序选错,后面每一步都在补窟窿
我的做法是先在 ArcGIS 里用行政区矢量裁出研究区,再进 ENVI 做辐射定标和大气校正。理由很实际:一整景 Landsat8 多光谱数据覆盖面积远大于一个县,裁完之后像元数量能砍掉一大半,后面 FLAASH 跑起来时间差得很明显。具体操作是先打开矢量的属性表,按字段筛选出目标县的那一条记录,导出成单独的 shapefile,这样加载进 ENVI 的矢量只有一个多边形,不会出现整幅影像被一堆相邻县界切碎的情况。
裁剪在 ENVI 里走两条命令:先用 File 下的 Open Vector File 把 shapefile 读进来,显示到已经打开的影像上,确认白线框住的范围对;再点 File 里的 Export Active Layer to ROIs,把矢量转成感兴趣区;最后用 Basic Tools 里的 Subset Data via ROIs,选中刚生成的 ROI,把 Mask 相关选项设成 Yes,输出裁剪结果。
这里有个容易忽略的副作用:Subset Data via ROIs 的输出影像会丢掉原头文件里的波长和增益偏置信息。如果你先裁剪再定标,Edit Header 里那些波长值是空的,得手动一条条补;如果你先定标再裁剪,波长表和定标系数在裁剪前就已经写进 header,裁剪后虽然也可能丢,但至少中间产物是完整的,方便回溯。
我一般这么判断:只跑一遍、只做定性展示,先裁后定标省时间;要做两期对比、要出温度反演数值,先定标后裁剪更稳,因为定标参数一旦丢失,你很难从结果里反推当时填的是哪一组系数。
提示:裁剪前把原始数据的 MTL 头文件和裁剪后的影像放同一个工程目录,后面 Edit Header 填波长、填增益偏置都要来回查,文件乱放是最常见的低级返工原因。
2.2 Layer Stacking 与 Edit Header:波长表填错,大气校正直接崩
波段组合用 Basic Tools 里的 Layer Stacking,把波段 1 到 8 按正序叠成一个文件。这里必须强调“正序”两个字:MTL 文件里每个波段都有对应的中心波长,你的叠放顺序如果和波长表的顺序对不上,FLAASH 拿到的光谱曲线就是错位的,校正结果会出现整体偏色或者异常负值,而且它不会提示你顺序错了。
叠完之后右键影像选 Edit Header,找到 Wavelength 一项,把单位改成 Micrometers,然后按 MTL 文件里各波段的中心波长逐个填。这一步看着机械,但它决定了两件事:一是 FLAASH 能不能正确识别传感器波段响应,二是后面做光谱曲线 Z-Profile 时横轴是不是真实的波长。填完之后我习惯点开看一眼曲线形状,健康的植被像元应该在绿波段有个小峰、红波段有个谷、近红外陡然抬起来,如果曲线是乱的,基本就是波长表填错了。
波段选择上还有个取舍:如果这次不做融合,只在多光谱上做分类和反演,可以只叠 1 到 7 波段,把第 8 波段全色单独留着;如果要做融合,第 8 波段必须一起处理,但要单独记着它的量级和多光谱不一样,后面 4.1 节会专门讲。
2.3 增益偏置和 BSQ 转 BIL:定标最后两步最容易被吞掉
辐射定标的本质是把 DN 值换算成辐射亮度,公式是线性变换,系数就写在 MTL 文件里:每个波段有一组 RADIANCE_MULT_BAND_x 和 RADIANCE_ADD_BAND_x。在 ENVI 的扩展工具里打开 Apply Gain and Offset,把这两组系数按波段顺序填进去,输出结果就是辐射亮度影像。
这一步有两个检查点。第一是波段数,定标输出必须是 7 个波段(不含全色)或者 8 个(含全色),如果你看到输出还是原始波段数,说明系数没匹配上。第二是坐标系,输出时把投影设成 WGS-84,后面所有分析都基于这个坐标系,中途改会很麻烦。
定标完还有一步经常被忘:FLAASH 只接受 BIL 或 BIP 交错格式,BSQ 直接喂进去要么报错退出,要么算出奇怪的结果。ENVI 默认输出往往是 BSQ,所以要用 Convert Interleave 转一次,或者在 Save As 的时候直接把 Interleave 选成 BIL。这一步没有技术含量,但它是整个预处理链路里最容易漏的一环,我第一次跑 FLAASH 失败就是因为这个,报错信息还很不友好,查了半天才反应过来是格式问题。
3. 大气校正:FLAASH 参数填错,后面全是无用结果
大气校正的目的说白了就是把大气散射和吸收的影响剥掉,拿到地表真实反射率。不做这一步直接拿辐射亮度去做 NDVI 或者温度反演,数值看着像那么回事,但两期影像之间根本不可比,因为成像时间、气溶胶条件都不一样。FLAASH 是 ENVI 里最常用的选择,参数不多,但每一个都有明确的物理含义,填错一个结果就废。
3.1 FLAASH 六个必填参数,逐个说清取值依据
打开 Spectral 下的 FLAASH Atmospheric Correction,在 Model Input Parameters 对话框里要填的东西看着多,真正需要你判断的其实就六个。
第一个是输入影像,这里要选转好 BIL 的辐射亮度文件,不是原始 DN 影像,也不是裁剪后的 shapefile 范围。第二个是影像中心经纬度,添加数据后会自动填上,不用改。第三个是传感器类型,选 Landsat-8 OLI,选错会导致波段响应函数完全对不上。
第四个是地面高程,这个必须查,不能留默认值。我这次研究区是西南某山区县,平均海拔接近一千米,如果不改,FLAASH 会按海平面算大气柱长度,水汽和氣溶胶的估算全部偏掉。第五个是大气模型,按纬度和季节选,中纬度夏季成像就选 MLS,这个选择直接影响水汽柱含量。第六个是气溶胶模型,城区和工业区选 Urban,植被覆盖为主选 Rural,我这次研究区有县城建成区,选了 Urban。
除了这六个,还有两个参数值得看一眼:初始能见度默认 40 km,如果当天有雾或者明显霾,可以适当调低;水汽反演在多光谱数据上默认用 2-band KT 方法,保持默认即可,因为 Landsat8 没有专门的水汽吸收波段,改也改不出更好结果。
注意:影像成像时间和文件生成时间在 MTL 里是两个不同的字段,一定要取成像时间。用文件生成时间算大气模型,季节都可能对不上。
3.2 multispectral settings 里的两个波段到底选谁
点开 Multispectral Settings,里面有个波段选择的下拉,需要指定两个波段用于水汽反演和光谱平滑处理。常规做法是第一个选第七波段(短波红外),第二个选第一波段(海岸气溶胶波段)。这个组合的逻辑是:短波红外对水汽吸收敏感,适合做水汽反演参考;第一波段波长短、受气溶胶散射影响大,用来辅助约束气溶胶光学厚度。
如果你的数据是只叠了 1 到 7 波段,那第七和第一都在,没问题。要是把全色波段也叠进去了,注意这里不要选到第 8 波段,全色波段的光谱范围覆盖太宽,放进去会污染反演结果。
这一页的其他参数,像 MODTRAN 分辨率、散射模型,保持默认就好。我见过有人把散射模型改成 DISORT 想追求精度,结果跑了两三个小时,出来的结果和默认设置差异很小,时间成本完全不划算。
3.3 校正结果怎么验:三条对比线和一个 Z-Profile
FLAASH 跑完之后不要直接进入下一步,先验证。我用三条对比线。
第一条是原图和校正后的整体对比,把两幅影像并排显示、链接视图同步缩放,看颜色和反差。校正后的影像通常会比原图“暗”一些,因为大气散射带来的那层亮度被剥掉了,这是正常的,如果反而更亮,八成是气溶胶模型或者能见度填错了。
第二条是辐射定标结果和校正结果的对比,这条主要看数值量级。定标后是辐射亮度,数值可以到几十上百;校正后是反射率,正常地表应该在 0 到 1 之间,水体和阴影会更低。如果校正后出现大面积的负值或者超过 1 的极值,说明参数有硬伤。
第三条是 Z-Profile 光谱曲线,这是最能说明问题的一条。挑一个明显的植被像元,看它的光谱曲线:健康的植被在绿波段应该有个反射峰,红波段被叶绿素吸收形成谷,到了近红外急剧抬升形成一个高平台。校正后的曲线这个形状应该比校正前更清晰、更符合物理规律。要是曲线还是平的或者乱的,前面的波长表多半填错了。
3.4 结果偏色和负值的排查方向
FLAASH 输出偏色是高频问题。我遇到过两种:一种是整体发蓝,原因是气溶胶模型选错,把城区当成了乡村,气溶胶光学厚度估高了;另一种是局部出现紫色或者青色块,通常是那块区域有云或者云影,FLAASH 的云掩膜处理不干净。
负值问题更常见,尤其是水体和阴影区域。少量负值可以接受,ENVI 里有专门的工具可以做反射率归一化处理;但如果负值比例很高,就要回到三个地方查:输入影像是不是 BIL 格式、辐射定标系数有没有填反(乘和加搞混)、地面高程是不是还留着默认的 0。
4. 图像融合四法对比:Brovey、HSV、PC 该选哪个
融合这一步是我这次实习投入时间最多的部分,因为方法多、效果差异大,而且没有绝对的好坏,只有适不适合你的任务。ENVI 里可用的融合工具都在 Transform 下的 Image Sharpening 里,我实际做了 Brovey 变换、HSV 变换和主成分变换三种,各跑一遍再做定性加定量对比。
4.1 融合前的必备动作:把第 8 波段拉到和多光谱同一个量级
这一步是所有融合方法的前置条件,也是最容易被跳过的一步。大气校正之后,多光谱波段的数值是 0 到 1 的反射率,而全色波段的量级完全不同,直接拿去替换或者做比值运算,结果一定是一片灰白或者严重失真。
处理方法是对第 8 波段做反射率拉伸,把它的数值范围压到和多光谱一致的区间。ENVI 里可以用 Stretch Data 或者 Band Math 做线性拉伸,目标是把全色的直方图对齐到参与融合的多光谱波段的分布上。做完之后拿两幅影像做一次快速对比,全色的亮度分布应该和多光谱接近,这是融合能出效果的前提。
融合的输入也要提前准备好。低分辨率影像用大气校正后的第 5、4、3 波段合成 RGB(这个组合在 Landsat8 上接近真彩色,地物判读最直观),高分辨率影像用拉伸后的第 8 波段。重采样方式三种可选:最邻近、双线性、三次卷积。我的经验是最邻近法出来的结果边缘最锐,适合做边界判读;双线性更平滑,适合做后续的定量统计。
4.2 定性对比:三种融合方法在居民地边界上的差异
Brovey 变换的原理是把 RGB 三个波段按比例缩放后与高分辨率波段做乘积,它的特点是光谱保持相对好,但受参与融合的波段数量限制。实际效果上,融合后的影像纹理比原图清晰,道路和建筑轮廓能看出来,但整体色调偏暗,因为三个波段的比值运算压低了亮度。
HSV 变换是把 RGB 转到色度、饱和度、亮度三个分量,用高分辨率影像替换亮度分量,再转回 RGB。这个方法的视觉效果最讨喜:色度和饱和度保留了多光谱的色彩信息,亮度分量被全色替换后清晰度提升明显。我在居民地和耕地交界的地方做了对比,HSV 融合后的建筑边界明显更利落,屋顶和道路的分界能直接判读出来。
主成分变换的做法是先对多光谱做 PCA,把第一主成分(信息量最集中的那个分量)替换成匹配后的高分辨率波段,再做逆变换。这个方法理论上没有波段数量限制,但实际问题很明显:第一主成分承载了大部分光谱信息,替换掉之后色调变化很大,我这张图融合完整体发亮、颜色发飘,地物边界反而比原图更糊。这也是开头那次答辩被问住的直接原因。
从光谱保真度看,Brovey 保留最好,但受波段限制;HSV 纹理改善明显、空间信息保持好,代价是光谱信息损失较大;PC 变换没有波段限制,光谱保持理论上也不差,但第一主成分信息高度集中,色调偏移是绕不过去的问题。
4.3 定量对比:均值、标准差、信息熵、平均梯度的实测表
定性对比容易被主观感受带偏,所以我又做了定量评价。因为没有理想的高分辨率参考影像,只能做无参考评价,选了四个指标:均值、标准差、信息熵、平均梯度。均值反映整体亮度,标准差反映反差,信息熵反映信息量,平均梯度反映清晰度。
均值、标准差直接在 ENVI 的 Basic Tools 下的 Compute Statistics 里算。信息熵和平均梯度 ENVI 没有现成工具,我的做法是用 File 下的 Save File As 导出 ASCII 格式的像元值,再用 MATLAB 编程算。导出的时候小数点位数一定要设成 0,否则文本文件会大到打不开,这一点踩过坑。
实测数据如下,波段对应红、绿、蓝三个通道:
| 影像类别 | 波段 | 均值 | 标准差 | 信息熵 | 平均梯度 |
|---|---|---|---|---|---|
| 融合前 | 5(R) | 10.936080 | 4.650095 | 4.1176379 | 0.1584453 |
| 融合前 | 4(G) | 11.178654 | 4.958502 | 4.1906284 | 0.1914862 |
| 融合前 | 3(B) | 16.844482 | 6.337903 | 4.5817732 | 0.3616036 |
| Brovey | 5(R) | 0.198690 | 0.187026 | 3.8883010 | 0.0940486 |
| Brovey | 4(G) | 0.101463 | 0.089772 | 4.1625831 | 0.1330995 |
| Brovey | 3(B) | 0.142461 | 0.120443 | 4.1894278 | 0.1299985 |
| HSV | 5(R) | 63.119725 | 13.850193 | 5.3389969 | 0.2074093 |
| HSV | 4(G) | 42.423164 | 56.348835 | 5.4343390 | 0.2486476 |
| HSV | 3(B) | 56.472495 | 66.177725 | 4.5831082 | 0.5449109 |
| PCA | 5(R) | 11.431108 | 3.646805 | 3.4472621 | 0.0488623 |
| PCA | 4(G) | 11.731477 | 3.822101 | 3.5242629 | 0.0600151 |
| PCA | 3(B) | 17.956372 | 4.521805 | 3.3009365 | 0.1573539 |
看懂这张表有个前提:Brovey 的均值不能和融合前直接比。它的输出是 0 到 1 量级,融合前是 0 到几十的量级,两者差了两个数量级,均值标准差直接对比没有意义。这就是为什么均值标准差这两个指标只能在同一量级的方法之间比,跨量级比较要看信息熵和平均梯度。
按信息熵看,HSV 三个通道都在 4.5 以上,红绿通道甚至超过 5.3,明显高于融合前的 4.1 到 4.5,说明融合确实带入了新的空间信息。Brovey 的信息熵在 3.9 到 4.2 之间,比融合前略低,说明它在提升清晰度的同时损失了一部分信息量。PCA 的信息熵最低,三个通道都在 3.5 以下,这和我目视看到的“更糊”是一致的。
按平均梯度看,HSV 的蓝通道达到 0.54,是融合前的 1.5 倍左右,清晰度提升最明显;Brovey 的平均梯度反而低于融合前,这有点反直觉,原因是它的数值量级被压缩了,梯度的绝对值也跟着变小,所以这个指标对 Brovey 同样不太公平,只能作为参考。
4.4 选型结论:什么任务用哪种融合
基于上面两组对比,我给自己定了一条清晰的选型线:
要做目视解译、提取建筑边界、做土地利用类型判读,选 HSV。它的清晰度提升最明显,居民区边界最利落,信息熵也最高,代价是光谱保真度差一些,但判读本来就不依赖精确的反射率数值。
要做定量反演、算指数、做光谱分析,选 Brovey,或者干脆不融合。Brovey 的光谱保持相对好,数值虽被压缩但保留了相对关系,做完归一化之后还能用。更稳妥的做法是在多光谱原始分辨率上做反演,把融合只用来做展示图。
PC 变换在这次对比里表现最差,色调偏移大、信息熵低,我不推荐用它做单景融合。但如果做多源数据融合(比如光学加雷达),PCA 去相关的能力还是有价值,那是另一个场景。
5. 专题提取:水体、植被覆盖度、温度反演与分类
融合只是中间过程,真正要出结果的是这四类专题信息。我用的是 HSV 融合后的影像作为底图,因为它的边界最清晰,做掩膜和样本选择时好判断。下面把每一步的算式和参数取值都说清楚。
5.1 水体提取:NDWI 加密度分割定阈值,再回填掩膜
水体提取走的是归一化水体指数路线。在 Basic Tools 的 Band Math 里输入表达式,Landsat8 上常用的是绿波段和近红外波段组合:
# NDWI 归一化水体指数,Landsat8 OLI 对应 b3(绿) 和 b5(近红外) # 水体在绿波段反射相对高、近红外吸收强,所以该指数对水体为正 import numpy as np def ndwi(green, nir): # 加一个小常数避免除零,水体区域可能出现 0 值 return (green - nir) / (green + nir + 1e-10) # 阈值分割:大于阈值判为水体,阈值需要用密度分割确认 water_mask = ndwi(green, nir) > 0.10Band Math 里的写法就是(float(b3) - float(b5)) / (float(b3) + float(b5)),加 float 是为了避免整型相除直接截断成 0。算完之后打开灰度图,用 Overlay 下的 Density Slice 做密度分割,拖动分割点看水体被切出来的范围,把阈值定在能完整包住河湖、又不会把阴影误判成水体的位置。
阈值定好之后,用 Basic Tools 下的 Apply Mask 做掩膜,把水体区域单独抠出来。这一步我遇到过一个具体问题:研究区有一条河正好贴着县界走,裁剪之后河的一半在边界外面,掩膜出来和背景一起变成黑色,看着像水体断了。这不是算法问题,是裁剪范围的问题,解决办法要么把矢量范围向外做一次缓冲,要么在报告里说明这条河的完整性受限。
5.2 植被覆盖度:像元二分模型的两个端点怎么取
植被覆盖度用的是像元二分模型,思路是把一个像元的 NDVI 看成纯植被和纯裸土两部分贡献的线性混合:
# 像元二分模型估算植被覆盖度 # ndvi_soil 取 NDVI 累积分布的 5% 分位,ndvi_veg 取 95% 分位 def fvc(ndvi, ndvi_soil, ndvi_veg): # 归一化到 0-1,超出范围的做截断,避免出现负覆盖度 result = (ndvi - ndvi_soil) / (ndvi_veg - ndvi_soil) return np.clip(result, 0.0, 1.0)两个端点的取值是这一步的关键。硬编码固定值(比如 0.05 和 0.7)在不同影像上表现差别很大,我一般用统计分位数法:统计整幅影像 NDVI 的累积分布,取 5% 分位作为纯裸土端元,95% 分位作为纯植被端元。这样自动适应了这景影像的实际分布,两期对比时也更公平,因为两期用的是各自的分位数,不会因为整体亮度差异导致覆盖度系统性偏高或偏低。
算完之后做一次分级统计,按 0 到 0.2、0.2 到 0.4 这样的区间切分,出面积占比表,两期一对比就能看出植被的变化趋势。
5.3 温度反演:大气校正法和单窗算法的差别在哪
温度反演这部分,我做了大气校正法和单窗算法两种,结果有差异,差异来源值得说清楚。
先说要共同的前置步骤,就是亮温计算。从辐射亮度到星上亮温用普朗克反函数:
# Landsat8 第10波段(热红外)星上亮温计算 # K1、K2 为官方定标常数,随传感器和波段不同而不同,必须从元数据里取 def brightness_temp(radiance, K1=774.89, K2=1321.08): # 注意 radiance 的单位要和 K1 匹配,都是 W/(m2·sr·um) return K2 / np.log(K1 / radiance + 1.0)算出来的亮温是星上亮温,还不是地表温度,因为它没有扣除大气影响,也没有考虑地表比辐射率。
大气校正法(辐射传输方程法)需要三个大气参数:大气上行辐射、大气下行辐射、大气透过率。这三个量一般从大气校正软件里反演出来,或者在 FLAASH 的高级设置里输出。拿到之后按下式反解地表辐射亮度,再用普朗克反函数得到地表温度。这个方法的物理基础最扎实,代价是对大气参数的准确性依赖很强,参数偏一点结果就偏。
单窗算法只需要三个输入:大气透过率、大气平均作用温度、地表比辐射率,用一组回归系数把亮温直接换算成地表温度。它的好处是输入少、计算快,缺点是回归系数是针对特定传感器波段响应拟合出来的,不同文献给的系数不一样。我的做法是两期影像用同一组系数,这样至少保证两期之间可比,绝对值有偏差但不影响变化趋势的判断。
地表比辐射率这一步两种方法都要做,我用的是 NDVI 阈值法:NDVI 低于 0.157 的像元按城镇和水体处理,比辐射率取 0.95 左右;NDVI 高于 0.727 的按纯植被处理,取 0.99 左右;中间区间用植被和裸土的面积比例加权。这两个断点是经验值,用的时候在报告里写清楚来源,不要当成绝对标准。
5.4 分类与变化监测:ISODATA 和监督分类各管什么
分类我两种都做了。ISODATA 是非监督分类,只需要设类别数、最大迭代次数、类别均值变化阈值和最小像元数,算法自己聚类。它的价值在于快速摸底:你不知道这景影像里到底有几种地物、光谱分布是什么样,先跑一遍 ISODATA 看聚类结果,再决定监督分类要分几类、样本往哪采。
监督分类我用的是最大似然法,另外对比了神经网络法。流程是先在一幅影像上采样本兴趣区,每个类别采若干个 ROI,样本要分散、要覆盖该类别的光谱变异范围,不能全挤在一个角落。然后执行分类,参数设置里最大似然主要看概率阈值,神经网络要设训练迭代次数和隐藏层结构。
这里有个必须说的问题:训练样本和精度验证样本不能是同一批 ROI。我第一版就是这么干的,精度评价出来 95% 以上,看着很漂亮,实际上是把答案又抄了一遍。正确做法是采样本时分成两组,一组训练、一组验证,或者用分层随机采样的方式在分类结果上另外布验证点,再和真实参考对比算混淆矩阵。
变化监测是在两期分类结果的基础上做的。ENVI 里有 Change Detection Statistics 工具,输入两期分类图,输出一个转移矩阵,行列分别是前一期和后一期的类别,矩阵里的数值是转移的像元数。从这个矩阵能读出很多信息:哪些类别转成了建设用地、多少耕地退成了林地、水体的面积是增还是减。把像元数乘以像元面积就是面积变化,这部分数据比单纯的分类图更有说服力。
6. 避坑:五条踩坑记录和一份跑图前的检查清单
下面这五条都是我自己踩过的,按“现象、原因、解决”写,每条都能对应到前面某一节的操作。
6.1 全色波段没拉伸就融合,结果一片灰白
现象:融合输出整体发白,地物层次全丢,怎么调显示拉伸都救不回来。
原因:多光谱已经做过大气校正,数值是 0 到 1 的反射率;全色波段还停留在原始量级,两者差了一到两个数量级,直接参与比值或者替换运算,结果被全色的数值主导。
解决:融合前先对第 8 波段做一次反射率拉伸或直方图匹配,把它的分布对齐到多光谱波段,再执行融合。
6.2 FLAASH 跑出大面积负值或者直接报错退出
现象:校正结果里水体和阴影大片负值,或者软件跑到一半报错中断。
原因:九成是输入格式的问题,FLAASH 只吃 BIL 或 BIP,BSQ 直接喂进去就会出问题;剩下的一成是地面高程还留着默认的 0,大气柱长度算错。
解决:定标输出后立刻做一次 Convert Interleave 转 BIL,高程按研究区实际平均海拔填,成像时间取 MTL 里的成像时间而不是文件生成时间。
6.3 裁剪之后波长表丢了,波段顺序对不上
现象:Edit Header 里的 Wavelength 是空的,或者填完之后 Z-Profile 曲线形状很怪,植被没有近红外陡升。
原因:ROI 裁剪的输出不继承原头文件的波长信息;或者 Layer Stacking 时波段顺序和 MTL 里的顺序不一致,波长表和实际波段错位。
解决:裁剪前先确认波段正序叠放,裁剪后回到 Edit Header 重新填一遍波长,单位改成 Micrometers,填完用植被像元的光谱曲线做一次验证。
6.4 温度反演结果和地面气象数据差好几度
现象:反演出来的地表温度和同期气象站气温差了五度以上,城区尤其离谱。
原因:比辐射率全图取了一个常数,城区、水体、植被用了同一个值;大气参数用了默认值;或者拿星上亮温直接当成了地表温度。
解决:按 NDVI 阈值法分地表类型给不同的比辐射率,大气参数用成像时刻的实测或者再分析数据,输出前确认做完了大气影响扣除这一步。
6.5 分类精度虚高到 95% 以上
现象:混淆矩阵算出来总体精度高得不正常,Kappa 系数也在 0.9 以上,但分类图上明显有错分的斑块。
原因:训练样本和验证样本来自同一批 ROI,等于用训练数据评价训练结果;或者验证点全布在容易分的类别上,样本分布有偏。
解决:采样本时就分成训练集和验证集两套,验证点用分层随机方式布设,每个类别都要有足够数量的验证点,混淆矩阵才有意义。
跑图之前我现在会强制过一遍下面这张清单,五个问题挨个确认,只要有一个答不上来就先别开跑:
| 检查项 | 确认内容 |
|---|---|
| 数据准备 | 波段是否正序叠放,MTL 文件是否在同一目录 |
| 头文件 | 波长表和增益偏置是否已写入,单位是否为 Micrometers |
| 格式 | 定标输出是否已转 BIL,投影是否为 WGS-84 |
| 参数 | 高程、大气模型、气溶胶模型是否按研究区实际情况填写 |
| 量级 | 全色波段是否已拉伸到和多光谱同一量级 |
回过头看,这份报告里真正花时间的不是操作本身,而是每次出错之后倒推是哪一步埋的雷。ENVI 的很多步骤不会当场报错,它把问题留到你做温度反演、做分类精度评价的时候才暴露出来,那时候排查成本是原来的好几倍。所以现在我做任何一景新数据,都会先把上面那五项过一遍,宁可前期多花二十分钟,也不想在两期对比做完之后发现波长表填错了。报告里的参数取值、融合对比数据、分类和变化监测的结果图都整理在文件里,需要的可以直接拿去对照着跑一遍。希望帮到你。
本文还有配套的精品资源,点击获取