高分一号水体反演全流程:ENVI预处理与黑臭水华识别
简介这份资源面向遥感与GIS方向的初学者及环境监测从业者围绕高分一号影像在重庆部分区域的水体监测需求完整演示从数据获取到成果出图的黑臭水体与水华反演流程涉及ArcGIS与ENVI两款专业软件的实际操作。压缩包内为1个docx文档约13.95MB以图文步骤形式组织内容便于对照软件界面逐步练习。文档依次覆盖陆地观测卫星数据服务网站的数据检索与下载、ENVI中的辐射定标、FLAASH大气校正、基于RPC模型的正射校正与黑背景去除、水域掩模裁剪以及利用Band Math计算NDWI、MNDWI等水体指数完成反演最后在ArcGIS中符号化区分正常水体、黑臭水体与水华区并导出地图。已有559人学习适合作为遥感水体监测项目的流程参考与操作范本。1. 高分一号水体反演从原始影像到黑臭水华分布图的完整链路手里有一景高分一号 WFV 影像想判断某段河涌是不是黑臭、某片湖库有没有水华最省事的路径不是自己写代码而是把 ENVI 的辐射定标、FLAASH 大气校正、RPC 正射校正、掩膜裁剪串成一条流水线再用 Band Math 把 NDWI、MNDWI 和黑臭/水华判别指数算出来最后丢进 ArcGIS 出图。这套流程我在几个水环境监测项目里反复跑过参数一旦固定下来换一景影像基本就是“打开—点按钮—等结果”。这篇笔记把数据下载、预处理、反演、制图四段拆开讲重点放在每个工具里到底填什么、为什么这么填、哪一步最容易翻车。适合做遥感环境监测的从业者也适合刚接触 ENVI 的学生照着复现。2. 数据获取与预处理把 DN 值变成有物理意义的反射率高分一号 WFV 传感器幅宽大、重访周期短做流域尺度的水体监测比 Landsat 更灵活但它的原始产品是 DN 值直接算指数会受传感器响应差异和大气影响所以预处理这四步一步都不能省。下面按实际操作顺序走每一步都给出工具入口、关键参数和判断标准。2.1 数据下载检索条件怎么设才不白跑数据从陆地观测卫星数据服务平台的通用卫星载荷检索入口进。检索时四个条件必须同时卡住时间范围、空间范围用重庆目标区域的矢量或矩形框、云覆盖量、传感器类型选 GF1 的 WFV。云覆盖量我一般先设 10% 以内如果目标时段一景都没有再放宽到 20%但水体反演对薄云很敏感超过 20% 的影像基本不建议用。下载前看一眼快视图重点确认两件事目标水体是否完整落在幅宽内、水体上方有没有明显云带。曾经有一景影像快视图看着干净结果目标河段正好压在一条薄云边缘大气校正后水体反射率整体偏高黑臭判别直接失效。下载下来的是压缩包解压后通常包含多光谱 tif、全色 tif、RPC 文件和 XML 元数据ENVI 打开时选多光谱那个文件元数据会自动带进来。提示下载时把 RPC 文件和 XML 一起保留后面正射校正要用 RPC 信息缺了就得手动填很麻烦。2.2 辐射定标Radiometric Calibration 的参数逻辑在 ENVI 工具栏搜索rad打开 Radiometric Calibration。输入选刚打开的多光谱影像输出路径自己定。关键参数有三个Calibration Type选 Radiance 或 Reflectance。做水体指数反演建议直接选 ReflectanceENVI 会调用定标系数把 DN 转成表观反射率省掉后面再除太阳高度角。Output Interleave选 BIL 或 BSQ 都行FLAASH 对 BIL 更友好我一般选 BIL。Scale Factor保持默认除非你明确知道数据产品做过缩放。# ENVI 中无命令行此处为操作路径记录 # Toolbar - 搜索 rad - Radiometric Calibration # Input File: GF1_WFV_multispectral.tif # Calibration Type: Reflectance # Output Interleave: BIL # Output Filename: gf1_rad_reflectance.dat定标完成后双击结果看统计值反射率正常范围大致在 0 到 1 之间如果出现大量负值或超过 1 的值多半是定标类型选错或元数据没读进来。这一步的输出是后面大气校正的输入文件名建议带rad标识避免和原始数据混在一起。2.3 FLAASH 大气校正光谱曲线文件是成败关键工具栏搜索fla打开 FLAASH Atmospheric Correction。输入选上一步的定标结果输出文件名和路径设好。参数面板里需要重点确认的项参数设置值说明Sensor TypeUNKNOWN 或 GF1 对应选项没有 GF1 预设时选 UNKNOWN手动填光谱响应Ground Elevation目标区平均高程km重庆丘陵区一般 0.20.5Atmospheric ModelMid-Latitude Summer 或 Tropical按成像月份选Aerosol ModelRural 或 Urban城市周边选 UrbanInitial Visibility2040 km晴天取高值有霾取低值然后打开 Multispectral Settings点 Filter Function File 的 Open选 Spectral Library加载gf1-wfv3光谱曲线文件。这一步是很多新手漏掉的不加载传感器光谱响应FLAASH 会按通用曲线算波段间串扰会让水体指数偏移。高级设置保持默认点 Apply 开始跑。一景 WFV 数据在普通工作站上大概几分钟到十几分钟跑完后检查水体像元的反射率曲线正常水体在蓝绿波段反射率高于红波段如果曲线形状反了回去查光谱文件和大气模型。2.4 RPC 正射校正与黑边去除Data Ignore Value 设为 0工具栏搜索RPC打开 RPC Orthorectification Using Reference Image。输入大气校正结果参考影像可以用同区域已正射的底图高程数据用 SRTM 或 ASTER GDEM 都行。重采样方法选 Cubic Convolution输出像元大小按参考影像或原始分辨率填。跑完后影像四周会出现黑色背景值双击图层打开 Edit Metadata点 Add Metadata items 找到Data Ignore Value设为 0。这一步不做后面掩膜裁剪时黑边会被当成有效像元参与统计水体面积直接虚高。2.5 水域掩膜裁剪Build Mask 加 Apply Mask 两步走工具栏搜索mask先 Build Mask。输入正射校正结果载入重庆水域 shp 数据输出 mask 文件。再搜索mask打开 Apply Mask输入文件选正射影像掩膜文件选刚生成的 mask输出参数里把掩膜外像元设为 0 或 NaN。裁剪完的water.dat就是反演的工作底图后续所有波段运算都在这上面做范围外的地物不会干扰指数统计。3. 黑臭水体与水华反演Band Math 公式怎么写、阈值怎么定预处理做完影像已经是地表反射率接下来用波段运算把水体信息提取出来。高分一号 WFV 的波段顺序要记牢Band1 蓝、Band2 绿、Band3 红、Band4 近红外。所有指数公式都基于这个顺序写错一个波段号结果就完全对不上。3.1 NDWI 与 MNDWI先圈出水体范围工具栏搜索band打开 Band Math输入公式(float(b2) - float(b4)) / (float(b2) float(b4))这是 NDWI用绿波段和近红外波段。点 Map Variable to Input File把 b2 映射到 Band2、b4 映射到 Band4输入文件选water.dat。输出后水体在 NDWI 上呈正值植被和建筑呈负值一般以 0 为界先粗分。城市区域建筑阴影容易和黑臭水体混淆这时换 MNDWI(float(b2) - float(b5)) / (float(b2) float(b5))高分一号 WFV 没有短波红外波段严格意义的 MNDWI 用不了常见做法是用 Band4 近红外替代或者直接用 NDWI 配合纹理和亮度做二次筛选。这一点在写报告时要说明不能照搬 Landsat 的公式。3.2 黑臭水体判别用反射率组合做经验指数黑臭水体的光谱特征是可见光波段反射率整体偏低、绿波段相对抬升、红波段与近红外差异缩小。实操中常用一个归一化黑臭指数做初筛(float(b3) - float(b2)) / (float(b3) float(b2) 0.0001)分母加 0.0001 是防止除零。这个指数在清洁水体上接近 0 或负值在黑臭水体上偏正。阈值不能拍脑袋定我一般先在影像上选几个已知清洁点和黑臭点做感兴趣区统计指数分布取两类均值的中点作为初始阈值再结合现场采样数据微调。没有现场数据时阈值只作为相对分级依据报告里要写清楚是“疑似黑臭”而不是定性结论。3.3 水华识别利用近红外抬升特征水华藻类聚集在近红外波段反射率明显高于清洁水体这是它和黑臭水体最大的光谱差异。常用归一化植被指数 NDVI 做辅助判断(float(b4) - float(b3)) / (float(b4) float(b3) 0.0001)清洁水体 NDVI 接近负值或零水华区域 NDVI 明显抬升。实际操作中把 NDWI 和水华指数叠加NDWI 大于 0 的区域里再按 NDVI 分级低值归为一般水体高值归为水华疑似区。分级阈值同样建议用感兴趣区统计加现场验证确定不同季节、不同营养状态下阈值会漂移一套阈值跑全年是不靠谱的。3.4 结果导出与 ArcGIS 制图符号化和面积统计Band Math 输出的是单波段灰度图直接看没有意义。在 ENVI 里用 Density Slice 或 Classification 把指数分成几级导出为 tif 或 shp。进 ArcGIS 后做三件事按分级设色清洁水体蓝、黑臭水体灰褐、水华区绿、叠加水域边界和行政区划、用栅格计算器统计各级面积。出图时注意坐标系统一ENVI 输出默认可能是 WGS84 地理坐标ArcGIS 里做面积统计前要投影到适合重庆的投影坐标系否则面积会有偏差。4. 避坑与排查这几处翻车我见过太多次4.1 大气校正后反射率出现大面积负值现象FLAASH 输出影像上大片像元反射率为负水体区域尤其明显。原因最常见的是辐射定标时 Calibration Type 选了 Radiance 但没做后续转换或者 FLAASH 里 Initial Visibility 设得过高大气校正过度扣除。另一个隐蔽原因是光谱曲线文件加载错用了其他传感器的响应曲线。解决回查定标输出统计值确认反射率量级把 Initial Visibility 降到 20 km 左右重跑重新加载gf1-wfv3光谱文件并确认路径没有中文。4.2 正射校正后影像和矢量对不上现象水域 shp 叠上去偏移几百米掩膜裁出来的范围明显错位。原因RPC 文件没被正确读取或者参考影像本身坐标系不对。也有情况是高程数据覆盖不全边缘区域校正模型外推失真。解决在 ENVI 里打开 RPC 信息确认参数存在参考影像统一到同一坐标系高程数据范围要覆盖整景影像不够就换更大范围的 DEM。4.3 掩膜裁剪后水体面积明显偏大现象统计出来的水体面积比实际大一圈边缘还有规则黑边。原因正射校正后的 Data Ignore Value 没设成 0黑边被当作有效像元参与掩膜和指数计算。解决回到正射结果Edit Metadata 里把 Data Ignore Value 设为 0重新生成 mask 和裁剪结果。这个坑几乎每批新数据都会遇到一次。4.4 Band Math 公式报错或输出全零现象点 OK 后提示波段不匹配或者输出影像全是 0。原因公式里波段变量没映射到输入文件或者输入文件波段数不够比如裁剪后只剩几个波段。另一个常见原因是整数除法两个整型波段相除结果被截断。解决公式里所有波段变量用float()包一层Map Variable to Input File 里逐个确认 b2、b3、b4 对应正确波段检查输入文件的波段数和元数据。4.5 水华和黑臭区域混在一起分不开现象同一片水域既被判为黑臭又被判为水华分级图颜色重叠。原因两个指数阈值独立设定没有做逻辑互斥。黑臭水体在绿波段抬升时 NDVI 也可能偏高单靠一个指数分不开。解决先用水体指数圈定水体范围再在水体范围内按 NDVI 和黑臭指数做二维分级或者加一个亮度条件黑臭水体可见光反射率整体偏低。分级规则写进报告别只给一张图。5. 把流程固化成模板参数复用与结果验证的两个习惯这套流程跑顺之后真正耗时的不是点按钮而是每次换数据都要重新确认参数。我的做法是建一个 ENVI 处理模板把辐射定标、FLAASH、RPC 三步的参数存成工程文件新数据进来只改输入路径和成像时间对应的 Atmospheric Model其余不动。FLAASH 里唯一随季节变的是大气模型重庆夏季用 Tropical、春秋用 Mid-Latitude Summer这个对应关系固定下来后单景处理时间能压到半小时以内。验证环节我强制做两件事。第一每景影像处理后抽三个点核对反射率曲线形状水体点蓝绿波段高于红波段、近红外接近零曲线不对就回查定标和大气校正。第二反演结果和上一期同区域结果做差值如果黑臭面积突变超过 30%先怀疑云污染或阈值漂移而不是直接写进报告。下面这个检查表是我每次出图前必过的检查项通过标准不通过时回查定标反射率范围主体在 01 之间定标类型、元数据水体光谱曲线蓝绿红近红外低光谱响应文件、大气模型正射套合矢量与影像偏差小于 2 个像元RPC、参考影像、DEM黑边处理Data Ignore Value 0元数据编辑指数分级与现场或历史数据趋势一致阈值、感兴趣区统计还有一个小技巧Band Math 输出的指数影像先别急着分级用 ENVI 的 Quick Stats 看直方图如果直方图是双峰说明水体和背景分离度好阈值取谷底如果单峰拖尾说明目标区域水体占比太低或云干扰严重这景数据就要谨慎使用。这个习惯帮我挡掉过好几景“看着能用、算出来全是噪声”的影像。从那以后我每次跑完反演都会先把指数直方图和光谱曲线过一遍再出图宁可多花十分钟也不把一张自己都不敢信的分级图交出去。希望帮到你。本文还有配套的精品资源点击获取