
简介一份面向遥感课程与ENVI入门学习者的操作实习PPT围绕软件界面认知、图像增强与变换、波段运算和预处理三大模块展开适合高校地理信息科学、遥感专业学生及需要快速上手ENVI的科研新手。压缩包内为单个PPT演示文稿大小约2.46MB内容凝练了ENVI界面组成、图像文件格式、像元信息查看、光谱曲线显示、窗口联动、主成分变换、几何配准和空间重采样等操作要点并给出菜单路径指引便于课堂讲解与课后自查。已有99人学习浏览适合作为实验课辅助材料或自学引导。通过跟随幻灯片中的操作流程读者能系统掌握从打开图像到图像配准的完整技能减少摸索时间提高实习效率。1. 遥感软件操作综合实习到底在练什么一条从数据到图件的完整流水线很多人拿到综合实习任务时的第一反应是打开 ENVI 到处点菜单把工具栏里的按钮挨个试一遍。结果图也出了、报告也写了交上去却被导师打回“你做的只是操作演示不是综合实习。”这个反馈点破了这类实习的本质遥感软件操作综合实习练的不是某个工具怎么点而是从一堆原始影像出发经过数据准备、预处理、信息提取、精度验证最后产出一张能讲清楚“地物是什么、分布在哪里、结果可不可信”的专题图。它让新手把生产流水线完整走一遍顺便踩一遍文档里不会写的坑。这篇笔记以 ENVI 为主线覆盖数据准备、辐射定标与大气校正、波段运算、监督分类、精度验证与出图的完整链路同时交代 ArcGIS 和 QGIS 在矢量处理、制图环节的常见分工。适合两类人第一次做综合实习的学生照着步骤能交出一份不被退稿的报告带实习生或负责技术评审的工程师可以拿里面的避坑清单当检查项。全文不追求把菜单讲全只讲实习报告里真正会被检查的环节。2. 软件选型与数据准备ENVI 为主、QGIS 为辅的实习环境搭建2.1 三款常用遥感软件的定位差异与选型理由综合实习报告里软件选型通常是第一章就要交代的内容。常见组合有三种ENVI 主攻影像处理、ArcGIS 做矢量与制图、QGIS 作为免费兜底。很多同学一台电脑装了三个软件结果每个都只会一半操作不如按任务阶段分工。软件定位实习中最常干的活学习成本ENVI专业遥感影像处理辐射定标、大气校正、波段运算、监督分类、混淆矩阵菜单密集需熟悉波段与文件组织逻辑ArcGIS桌面 GIS 平台矢量边界整理、属性表关联、专题图整饰工具多但入口清晰制图模板好用QGIS开源桌面 GIS快速查看影像、shp 与栅格叠加、Python 批处理免费且开箱即用插件生态丰富我的建议是“一主一辅”影像处理全部在 ENVI 里做矢量边界用 ArcGIS 或 QGIS 整理最后出专题图看学校环境。若实习机没装 ArcGISQGIS 完全能顶替制图环节。选型理由写进报告时不要只写“用了 ENVI”要写“影像预处理与分类需要专业光谱处理能力ENVI 的辐射定标和 FLASH 大气校正模块最成熟矢量与制图选用 QGIS因为它支持与 ENVI 交换数据的格式且跨平台”。2.2 实习数据该怎么准备影像、矢量边界与地面验证点综合实习最常见的失败原因是数据没备齐就开软件。一份合格的实习数据包至少包含三样东西原始影像、研究区边界、地面验证点。影像优先选 Landsat 8 OLI 或 Sentinel-2 的光学多光谱数据空间分辨率 1030 米一个学期内实习刚好能用边界矢量是一个 shp 文件用来裁剪影像限定研究区验证点是野外调查或高分辨率影像上读取的坐标点用于分类后的精度验证数量每类不少于 30 个。拿到影像后不要急着解压打开先建一个干净的目录结构。我一般按“原始数据 / 中间结果 / 成果输出”三级组织raw放下载的压缩包和原始 tifprocess放定标、校正后的中间文件final放分类结果和专题图。文件名里带上传感器和日期比如LC08_20231015_level1避免实习后期出现“最终版最终改版”的混乱。这一步看似浪费时间实际能省掉后面 80% 的找文件纠葛。2.3 用 ENVI 完成数据打开与波段合成的三个操作细节打开数据不要用 File → Open 直接点 tif要用 Open As → Optical → Landsat这样 ENVI 会按传感器类型自动读取元数据、把辐射定标需要的中心波长和增益系数带进来。Landsat 8 的 Level-1 产品通常每个波段一个 tif 文件自动读取后会合成到一个虚拟文件里。接下来要做波段合成。综合实习里最常见的要求是把多光谱波合成一个多波段文件再进入后续流程。操作路径是 Basic Tools → Layer Stacking把蓝、绿、红、近红外、短波红外按顺序放进去。这里有三个容易出错的细节第一输出顺序必须和你后面自定义指数公式时一致一般记 B、G、R、NIR、SWIR-1、SWIR-2第二Layer Stacking 默认会按你选择的顺序排列表里拖拽顺序就是输出波段的顺序第三输出数据类型保持原始 uint16不要顺手转成 byte否则后面辐射定标时数值范围会被截断得很难看。# Layer Stacking 参数核对ENVI 界面操作对应项 输入文件: B2(Blue), B3(Green), B4(Red), B5(NIR), B6(SWIR1) 输出顺序: B2-B3-B4-B5-B6 输出格式: ENVI Standard, InterleaveBSQ 数据类型: Unsigned 16-bit这段操作对应的界面项看起来不复杂但 BSQ 和 BIL 的差别会直接影响后续 Band Math 是否能读对每个波段。ENVI 默认 BSQ 是按波段顺序存储FLASH 大气校正对文件组织方式不敏感但如果你换成 BIL 输出某些第三方脚本读数据时会按像素交叉方式解析导致波段错位。所以实习阶段统一用 BSQ别为了“尝试新选项”给自己埋雷。输出前勾选生成统计信息后面画灰度图或调拉伸时会快很多。3. 影像预处理流程辐射定标、大气校正与几何校正的实操顺序3.1 为什么预处理顺序不能乱三个校正的依赖关系预处理三件套——辐射定标、大气校正、几何校正顺序是定死的。辐射定标在前把传感器记录的 DN 值转换成表观辐亮度大气校正其次消除大气分子和水汽对辐射信号的吸收散射几何校正放在最后因为前面两步都是逐像元数值运算不涉及像素坐标的搬移几何校正一旦做了重采样后续再改辐射值就会造成双重误差。这里有个实习报告常被追问的坑如果下载的是 Landsat Level-2 地表反射率产品辐射定标和大气校正已经在官方流程里完成了你只需要打开后确认数据单位是反射率直接进几何校正和信息提取就行。很多同学不管三七二十一对 Level-2 又跑一遍 FLASH结果反射率数据被二次校正成了奇怪的负值后面指数计算全乱掉。动手前先看文件的 Scale Factor 和单位描述做预处理前先分清 Level-1 和 Level-2。3.2 辐射定标与大气校正的可复现操作参数辐射定标用 ENVI 的 Radiometric Calibration 工具。选好前面合成的多波段文件后关键参数有两处Calibration Type 选 Radiance输出单位是 W/(m²·sr·μm)Scale Factor 注意选默认的 1.0不要勾 0.1否则导出的辐亮度值会系统性偏小十倍FLASH 反演时容易报错或得到异常反射率。输出文件建议命名带_rad后缀方便后面区分。# ENVI Radiometric Calibration 参数设置参考 Input File: 多波段合成文件uint16 Calibration Type: Radiance Output Data Type: Float (32-bit) Scale Factor: 1.0 Output Filename: study_area_rad.dat大气校正常用 FLASH 模块。它的参数很多但真正影响结果的只有五个传感器类型选 Landsat-8 OLI影像中心经纬度会自动带出不要手改传感器高度和地面平均海拔按元数据填地面海拔可以在 Google Earth 或 DEM 里读一个平均值气溶胶模型选 Rural除非研究区明确在海边或工业区才换 Maritime/Urban初始能见度填 40 km内陆一般 3040 km不需要精确FLASH 会通过暗像元反演自动修正。参数填完点 Multiplier 那个按钮时注意FLASH 默认会对输出反射率乘一个 10000 的系数很多新手不知道这一步导致输出的地表反射率最大值是 10000 而不是 1。如果你的后续计算用反射率比值比如 NDVI 是反射率的差值除以和乘以 10000 不改变比值结果但如果你要提取具体反射率值写进报告就要记得除以 10000。我习惯在 FLASH 输出后顺手用 Band Math 做一次b1/10000让数据回到 01 区间后面所有指数公式都不需要再操心量纲。3.3 几何校正与影像裁剪把研究区从大影像里切出来几何校正分两种情况一种是你下载的影像本身自带 RPC 定位信息Landsat、Sentinel-2 都带直接用 RPC Orthorectification 就能消除大部分地形引起的几何偏移另一种是历史影像或无人机影像没有 RPC必须地面控制点。实习场景里前者覆盖大多数后者多出现在对比实验中。RPC 校正的操作路径是 Raster Management → RPC Orthorectification投影选你研究区所在的 UTM 分带。这一步输出的影像已经具备大致准确的坐标误差一般在 1 个像元以内。如果你发现影像和底图之间仍然有明显错位那就是控制点环节的问题用 Geometric Correction在影像和参考底图上挑选同名点GCP 数量至少 12 个且要覆盖影像四角和中心。多项式阶数不要一上来就选 Polynomial 3控制点少的时候高阶多项式会让边缘形变得很厉害先用 2 阶RMS 控制在 1 个像元以内就够实习用了。# 几何校正 GCP 分布检查要点 采集数量: 15~20 个同名点 分布要求: 四角 中心 道路交叉口等线状地物交点 RMS 控制: 1 pixel影像分辨率 30m 即 30m 多项式阶数: 2 阶控制点不足则降到 1 阶裁剪是预处理最后一步用 Basic Tools → Subset Data from ROIs。如果你有研究区 shp 边界先在 ENVI 里打开 shp 转成 ROI如果没有直接在影像上画矩形 ROI 也可以。裁剪时勾选“Mask pixels outside of ROI”这样输出文件的研究区外是无效值而不是黑色 0 值后续分类和统计时不会把黑色背景当成一个地类。这个勾选框是实习报告里区分“随便做做”和“认真做过”的隐形标准。4. 信息提取的核心操作从指数计算到监督分类的完整链条4.1 NDVI 与水体指数计算用 Band Math 做指数提取并避开整数陷阱预处理做完进入信息提取环节。综合实习最常用的两个指数是 NDVI归一化植被指数和 MNDWI改进型归一化水体指数分别对应植被覆盖度和水体提取。Band Math 是 ENVI 里做这事的主要工具表达式本身很简单但新手翻车率极高原因几乎都是数据类型。Landsat 8 的近红外是 B5红光是 B4NDVI 的表达式是(float(b5)-b4)/(float(b5)b4)。注意 float 转换——如果直接用整数波段相减近红外和红光的差值大部分是负数或小整数在整数除法下结果全是 0 或 1完全没有中间渐变的植被梯度出来的图像像一块黑白噪声。加上 float 后运算变成浮点除法NDVI 才会落在 -1 到 1 的连续区间。# NDVI 表达式Landsat 8 OLI ; ENVI Band Math 输入 b1 近红外波段 B5 b2 红光波段 B4 表达式: (float(b1)-b2)/(float(b1)b2) # MNDWI 表达式 b1 绿光波段 B3 b2 短波红外 B6 表达式: (float(b1)-b2)/(float(b1)b2)指数计算的参数除了波段选择还有输出范围。Band Math 默认输出整个影像范围如果你只想算研究区的 NDVI可以在输入文件里选已经裁剪好的研究区文件。计算完成后用 Quick Stats 看一下 NDVI 的直方图分布如果平均值在 0.20.5 之间、最小值在 -0.5 左右说明定标和校正环节没问题如果你看到 NDVI 几乎全是 1 或 -1回头检查前一步是否做了大气校正、以及波段顺序是不是 B5 和 B4 反了。4.2 监督分类的样本选择与分类器参数设置指数提取完成之后实习主线通常会走向土地覆盖分类。在 ENVI 里做监督分类前要先建立 ROI 样本集。每一类地物的训练样本不是随便画几个圈就算完每类样本数量不低于 50 个像元而且样本要分布均匀——比如水体的样本要覆盖不同浑浊度的水体、植被要包含密林和灌丛。一个类别只在影像一角画一个多边形分类结果里这一类在其他区域大概率会碎成噪点。样本画完后用 Options → Compute ROI Separability 计算可分离性输出一个 02 的数值大于 1.9 说明样本区分度高1.81.9 勉强可用小于 1.8 就要回去补样本。这个指标是实习报告里能直接提高技术含量的证据很多同学不知道写着写着就让两类地物的样本分不开后面分类精度上不去。# 监督分类器选择建议ENVI Classification → Supervised 最小距离: 速度最快适合样本正态性差的快速验证 最大似然: 假设样本正态分布适合光谱差异大的地类 SVM: 适合样本复杂、类别光谱重叠的实操场景实习首选SVM 参数面板里最常改动的是 Kernel Type 和 Penalty。Liner 核适合多数地表覆盖任务RBF 核在样本非线性可分时有优势但训练慢。Penalty惩罚参数默认 100如果分类结果出现大量细碎噪声可以降到 50 试试如果两类地物严重混淆提高 Penalty 到 200~500 往往能改善支持向量的拟合。注意每次改完参数重新分类观察结果而不是盲信默认值。4.3 分类后处理Majority/Minority 分析与类别合并分类刚结束的图通常惨不忍睹到处是椒盐噪声。这时不能直接拿去算精度先做后处理。ENVI 的 Classification → Post Classification 提供了几样工具实习阶段够用的是 Majority/Minority Analysis 和 Sieve Classes。Majority/Minority 相当于中值滤波设定一个核窗口比如 3×3 或 5×5窗口中心像元的类别会被替换为窗口内出现次数最多的类别。核大小不要一上来就选 7×7那样会把细小的河流和道路抹掉。3×3 适合保留细节5×5 适合去除噪声。Sieve Classes 是另一种思路把面积小于设定像元数的碎斑归并到邻近最大的类别里阈值一般设 1030 个像元具体看影像分辨率和你希望保留的最小图斑。# Majority/Minority 参数参考 Kernel Size: 3×3 或 5×5 Center Pixel: Replace 或 Preserve Output Class: 与原类别一致 # Sieve 参数参考 Minimum Size: 20 pixels Dilate: 在 Sieve 后勾选避免边缘锯齿后处理完成后的分类图先做一次类别合并。比如你把耕地又细分为水田和旱地如果最终报告只需要“耕地”一个类别就统一合并掉。合并的作用有两点一是精度统计时类少好算、混淆矩阵清晰二是图例简单专题图可读性大幅提升。这步很多人忽略觉得细分多代表工作量大实际上分类类目太多、某些类样本不足是精度验证时 Kappa 系数难看的主因。5. 遥感实习操作避坑六个最容易翻车的环节与排查思路5.1 波段顺序错位NDVI 算出来是“负的植被”现象NDVI 结果分布完全颠倒植被区域呈现负值水体区域却接近最高值。 原因Landsat 8 各波段以 B1~B7 命名但不同软件导入后文件内部的波段排列可能不一样。如果你在 ENVI 里用 File → Open 直接打开单波段 tif而不是用 Open As → Landsat 读取ENVI 无法识别 B5 就是近红外它在 Band Math 里选 b1 可能是短波红外而非 NIR。 解决每次打开数据后先检查 Layer Manager 里波段的中心波长描述确认 B4Red、B5NIR再写指数公式。别死记“b5 是近红外”要时刻确认实际导入顺序。血泪结论写完公式后顺手看一眼中间值分布比反复对公式更有用。5.2 FLASH 大气校正后影像整体变灰现象校正前的原图色彩正常FLASH 之后影像像蒙了一层灰动态范围被压到很低。 原因最常见是输入文件的 Scale Factor 与增益参数不匹配。有些 Landsat Level-1 产品需要乘一个固定的增益因子才能转成辐射量而 FLASH 输入面板里默认的 Scale Factor 是 1.0。另一个高发原因是初始能见度填了 10 km 以下或 50 km 以上极端值会让大气剖面反演失真。 解决先查输入产品的元数据文件找到RADIANCE_SCALE_FACTOR把它填进 FLASH 的 Scale Factor能见度按研究区气候特征填 3040 km输出后看反射率均值是否落在预期的 0.050.6 区间如果全图均值低于 0.01说明定标系数至少差了一个量级。5.3 样本分离度不足导致分类结果大面积混淆现象监督分类后林地和灌丛两类像打翻了的调色盘边界完全狗啃状精度验证的 Kappa 系数不到 0.6。 原因两类地物的光谱曲线本来就接近而你在画样本时又都画在植被茂密的区域光谱特征几乎没有区分度。 解决画完样本后强制跑一次 Compute ROI Separability任何两类的分离度低于 1.8 就必须处理。处理方式不是删掉一类而是去样本覆盖的更多区域补充采集比如林地样本加入阴影下的林地、稀疏林地灌丛样本加入干旱坡面的灌丛让各自的光谱分布范围铺开重叠面积减小后再分类。5.4 几何校正后影像与矢量边界偏差几个像素现象裁剪出来的研究区范围明明用 shp 做的 ROI但分类结果和 Google 底图叠加时道路对不上偏移了 13 个像元。 原因几何校正的 GCP 数量少或分布集中在一侧或者选的参考影像本身坐标精度不够。Landsat 的 RPC 正射虽然有精度保障但在地形起伏明显的区域直接做 RPC 校正而不加控制点边缘位置的偏差很容易达到 2 个像元。 解决RPC 校正后不要直接裁剪先叠加一个参考影像比如影像中心区域的高分底图做视觉检查有偏差就补 GCP 做二次多项式校正RMS 压到 1 个像元以内。另外ROI 裁剪前确认 shp 与影像投影一致如果 shp 是经纬度、影像是 UTMENVI 会自动投影转换但转换参数默认不提示如果你不确定就手动 Define Projection 把 shp 投到和影像同一坐标系。5.5 混淆矩阵里验证点和训练样本来自同一批 ROI现象分类精度报表显示 Overall Accuracy 98%Kappa 0.97结果好得不真实画出来的分类图却明显有错分。 原因你用来算精度的地面真实 ROI 就是训练分类器的同一批样本。分类器本来就拟合了这些样本的分布再用它们做验证精度一定虚高到离谱。 解决从项目一开始就把地面验证点单独存放在另一个 shp 文件里训练样本和验证点严格分离。验证点数量每类至少 30 个位置最好通过随机采样或野外调查获得而不是凭经验看着影像撒点。如果实在没有野外点可以用高分影像目视判读生成验证点但报告中要写明验证方式为“基于高分辨率影像目视判读”别写成“地面实测”换虚高精度。5.6 导出的分类图和矢量叠不在一起现象分类结果明明是 TIFF拖进 ArcGIS 或 QGIS 后和 shp 边界偏移到几十公里外。 原因ENVI 输出时把分类结果的投影信息写丢了或者你在 ENVI 里查看时没注意文件名后缀.dat的伴随.hdr文件被一起移动过。ENVI 标准格式的投影信息存在.hdr头文件里导出成 TIFF 时如果未勾选 GeoTIFF 标签坐标信息就没了。 解决最终成果导出统一用 Raster Management → Export to GeoTIFF并确认输出对话框里 Write Georeference Information 选项已勾选。导出后拖进 QGIS 看一眼图层属性能读到投影参数才算完成。这个习惯能避免实习答辩前一夜所有成果图“离奇”飞走的尴尬。6. 精度验证与批量出图把实习成果做成能交付的技术报告6.1 混淆矩阵与 Kappa 系数从“会算”到“会解释”分类完成后需要在 ENVI 里做混淆矩阵。先把验证点 shp 转成 ROI然后执行 Classification → Post Classification → Confusion Matrix Using Ground Truth ROIs选择分类结果文件和验证 ROI 文件得到总体精度、用户精度、生产者精度和 Kappa 系数。解释精度时不要只抄 Overall Accuracy 和 Kappa 两个数字。实习报告里更受认可的做法是把混淆矩阵表粘出来指出哪两类最容易相互错分并解释原因——比如“建筑与裸地混淆明显主要因为两者在可见光波段反射率接近且部分屋顶材料与裸土光谱曲线相似”。这个解释展示的是你对地物光谱特征的理解而不是自动化流程的操作熟练度。类别水体植被建筑裸地生产者精度水体5801196.7%植被0728584.7%建筑26611671.8%裸地1476384.0%用户精度95.1%87.8%78.2%74.1%总体 90.0%初学者看到“建筑与裸地”混淆第一反应是调整分类器参数。实际上更常用的做法是回到样本环节单独去看裸地和建筑的样本光谱曲线如果两者高度重合但纹理差异明显可以考虑在分类特征里加入纹理信息比如 GLCM 均值和方差而不是反复调 SVM。精度验证的意义就是逼你回到前一个环节找问题这也正是“综合”实习最想练的能力。6.2 批量出图的脚本化技巧QGIS Python 控制台一次导出全部专题图实习报告通常要求出多幅图研究区原图、NDVI 图、分类图、精度验证点分布图。手动一幅幅调整版式的工作量很大我习惯用 QGIS Python 控制台批量出图。下面是一个最小可用的脚本遍历指定目录下的 geotiff逐一生成为带图例和色带的 PNG。# QGIS Python 控制台示例批量导出专题图 import os from qgis.core import QgsProject, QgsRasterLayer from qgis.core import QgsLayoutItemMap, QgsLayoutItemLegend from qgis.gui import QgsLayout input_dir /path/to/your/tif_files output_dir /path/to/your/png_output for tif in os.listdir(input_dir): if not tif.endswith(.tif): continue # 加载栅格层 layer QgsRasterLayer(os.path.join(input_dir, tif), tif) if not layer.isValid(): print(加载失败:, tif) continue QgsProject.instance().addMapLayer(layer) # 新建布局A4 横向 project QgsProject.instance() layout QgsLayout(project) layout.initializeDefaults() map_item QgsLayoutItemMap(layout) map_item.setRect(20, 20, 260, 160) # 位置与尺寸单位 mm map_item.setLayers([layer]) layout.addLayoutItem(map_item) # 导出 layout_exporter QgsLayoutExporter(layout) layout_exporter.exportToImage( os.path.join(output_dir, tif.replace(.tif, .png)), QgsLayoutExporter.ImageExportSettings()) QgsProject.instance().removeMapLayer(layer.id())这段脚本有几个参数你需要按实际环境改input_dir和output_dir换成你机器上的路径setRect(20, 20, 260, 160)控制地图在版面纸上的位置和尺寸单位是毫米setLayers([layer])只加载当前图层如果你要同时显示分类图和边界线就需要往列表里追加矢量图层。运行前先拿一张图试跑确认输出的 PNG 尺寸和拉伸方式符合要求再铺开跑全部。批量出图这一年我用下来的最大感受是遥感软件操作综合实习的收尾质量不在处理过程用了多少高级功能而在成果能否被一个不熟悉遥感的人看懂。图例清晰、比例尺完整、分类颜色有语义水体用蓝色系、植被用绿色系比任何炫技都有说服力。我自己第一次带实习时帮学生批量导图前没检查色带结果 NDVI 图冷色代表高植被反过来整组报告返工重做。从那以后每次脚本出图后我必做一件事随机抽三张图打开肉眼检查一遍确认颜色映射方向正确再打包提交。希望这篇笔记能帮你在实习里少走一段我走过的弯路把你的成果从“能跑通”做到“能交付”祝你实习顺利。本文还有配套的精品资源点击获取