🌡️ 反演地表温度(LST)· 操作手册 [Landsat-8/9]

Version: 1.0.0(与当前 UI/代码实现一致) 面板位置:反演地表温度(LST)[Landsat] 核心实现:tab_landsat2lst.py(UI) + calculation_modules/LST_landsat_processor.py


[1] 功能概述

本模块用于从 Landsat 8/9 Level-2 产品快速反演地表温度(LST)并批量写出 GeoTIFF。支持一键导入 .tar/.tar.gz 原始下载包,自动解压、定位所需波段/掩膜,按需应用云掩膜基于 NDVI 的发射率 ε 推估,并输出 ℃(摄氏度)K(开尔文) 的栅格结果。处理过程具备异步执行、进度条与日志,可并行批处理多景影像。


[2] 面板与数据

USDA-GeoProdStudio

USDA-GeoProdStudio

②-1 选择 Landsat 源数据

  • 📁 选择文件夹:一次性导入目录内所有 .tar/.tar.gz
  • ➕ 添加文件:多选导入若干包。
  • ➖ 移除选中:删除列表中的条目。
  • 列表中每个条目会显示产品信息(平台/处理级别/是否支持)以便筛选。

支持性:当前实现仅对 Landsat-8/9(LC08/LC09)Level-2(L2SP) 做“✅ 支持反演”提示;其它平台/级别标注为“❌ 暂不支持”。L1TP 等不在本模块默认流程内。

②-2 保存目录

  • 指定所有输出的统一保存位置,缺省将写入该目录下的若干 LST 栅格。

②-3 参数区(可选)

  • 🌿 使用 NDVI 推导发射率 ε(默认:开) 若所述影像包内包含 NDVI 成品层(常见于 L2SP 附属产品),将按 NDVI 估算像元级发射率;若缺失 NDVI,则回退到常数发射率。
  • ☁️ 应用云掩膜(默认:开) 若包内包含 Fmask 掩膜层(值==0 视为“晴空/有效”),将以其过滤云/云影等无效像元。

②-4 输出单位

  • 摄氏度 (°C)开尔文 (K)。 说明:当前实现 K 输出不做 ×10 缩放,直接以 float32 写出;界面文案如提示 K×10,请以此处说明为准。

②-5 执行与监控

  • ▶ 开始反演:逐条目提交到线程池执行,进度条(0–100)与日志区域实时反馈状态;每个任务完成会打印输出路径。
  • 进度条:模块级百分比(若列表多条,进度会按条目轮流覆盖显示)。
  • 日志:打印“开始/统计/保存/完成/错误”等关键事件。

[3] 输入/输出与参数(一览)

字段/控件 类型 必填 默认 说明
Landsat 文件列表 .tar / .tar.gz 支持多选批量;仅 LC08/LC09 的 L2SP 建议用于反演
保存目录 目录 所有结果统一写入
🌿 使用 NDVI 推导 ε 复选 若包内有 NDVI,将像元级估算 ε;否则回退常数 ε
☁️ 应用云掩膜 复选 依赖 Fmask(值==0 为有效)
输出单位 下拉 摄氏度 (°C) 也可选 K(不缩放)
运行日志 只读 打印进度/统计/错误/输出路径

输出文件(每景一套)

  • …_LST_C.tif(℃;float32, nodata=NaN)或 …_LST_K.tif(K;同上)
  • 均保留原始空间参考/分辨率/范围,写出为单波段 GeoTIFF。

[4] 处理流程与内部机制

④-1 自动展开与路径推断

对每个 .tar/.tar.gz

  1. 解压到临时目录(位于保存目录下,以包名命名)。

  2. 自动搜索:

    • 热红外亮温*ST_B10.TIF(L2SP 的 Surface Temperature Band 10)
    • NDVI 成品层:文件名含 NDVI(可选)
    • Fmask 云掩膜:文件名含 Fmask(可选)
  3. 若未找到 ST_B10,该条目报错并跳过。

也支持直接把 ST_B10.TIF 作为输入(非 tar),此时仍按相同逻辑继续。

④-2 有效像元与掩膜

  • 基础有效像元brightness_temp > 0 且数值有限(finite)。
  • 云掩膜(若启用且存在 Fmask):仅保留 Fmask == 0 的像元。
  • NDVI 有效性:若启用“NDVI→ε”且存在 NDVI 栅格,将其有限像元并入有效掩膜。

④-3 发射率 ε

  • NDVI-PV 法(启用且 NDVI 存在时):

    1. 计算像元级植被分数 pv = ((ndvi - ndvi_min)/(ndvi_max - ndvi_min + 1e-6))^2(在影像内按有效像元取 min/max);
    2. 估算 ε = 0.004 * pv + 0.986
    3. 裁剪到 [0.95, 0.99]
  • 常数 ε(否则):0.97(全局)。

说明:当前实现中 ε 仅作为诊断/占位推估,主公式对 ε 的显式修正未展开(详见下节“公式说明”中的拓展式)。在多数 L2SP 项目中,ST_B10 已为亮温/表温的标称量,实践中该 ε 的像元级估计仍有助于质量检查或后续改进。

④-4 LST 计算与单位

  • ST_B10 读入亮温(内部作为 brightness_temp);
  • 当前实现采用 线性系数 近似换算到 K: [ \mathrm{LST}_{K} = 0.00341802 \times \mathrm{brightness_temp} + 149 ]
  • 若选择 : [ \mathrm{LST}{^\circ C} = \mathrm{LST}{K} - 273.15 ]
  • 无效像元写入 NaN

注:不同数据源/版本在 ST_B10 的量纲、缩放与偏置上可能差异。上述系数源于当前代码实现;如换用其它 L2 版本,建议核对产品元数据(MTL/QA 文档)并在后续版本中做参数化/自适配。

④-5 写出与清理

  • float32nodata=NaN 写出到保存目录;文件名: 原始名(或包名) + "_LST_C.tif" / "_LST_K.tif"
  • 任务完成后自动删除临时解压目录(带多次重试,避免文件句柄占用)。

[5] 公式与解释

⑤-1 NDVI-PV-ε(可选)

  • NDVI:来自包内 NDVI 栅格(若存在);剪裁到 [-1, 1]。
  • 植被分数: [ p_v = \left(\frac{\mathrm{NDVI}-\min(\mathrm{NDVI})}{\max(\mathrm{NDVI})-\min(\mathrm{NDVI})+10^{-6}}\right)^2 ]
  • 地表发射率: [ \varepsilon = 0.004,p_v + 0.986,\quad \varepsilon \in [0.95, 0.99] ]

若业务需要显式使用 ε 进行亮温→地表温度的大气/地表发射率改正(如单窗/单通道模型),可在后续版本将 ε 代入更完整的辐射传输近似式;当前实现保持简化稳定的线性换算,并把 ε 作为改进接口保留。

⑤-2 亮温到地表温度(当前实现近似)

  • ST_B10(亮温/标称表温)线性映射至 K: [ \mathrm{LST}_K = a \cdot \mathrm{BT} + b \quad (\text{现用 } a=0.00341802,, b=149) ]
  • : [ \mathrm{LST}{^\circ C} = \mathrm{LST}{K} - 273.15 ]

若在你的生产数据中 ST_B10 已为物理开尔文(常见于部分 L2 版本),可将 a=1, b=0;本模块未来会加入“从 MTL 自动读取缩放系数”的路径以适配更多版本。


[6] 日志与状态

典型日志片段(每景):

  • 🚀 开始处理:LC08_L2SP_...tar
  • 📊 地表温度统计(C/K): min=..., max=...
  • ✅ 保存完成:D:/.../LC08_..._LST_C.tif
  • --- 处理完成 ---(单景任务结束)

如发生错误(缺少 ST_B10.TIF、无法写盘等),会打印 ❌ 错误:... 并继续处理队列中的下一景。


[7] 使用建议(实践经验)

  1. 数据级别:优先选择 LC08/LC09 Level-2(L2SP)。其它级别或旧产品的字段命名/标度可能不同。
  2. 云掩膜:在城市/山地/季节性云多区域建议开启 Fmask;若你的数据没有 Fmask,可后续在“指数/合并”环节叠加 QA_PIXEL 或自建云掩膜。
  3. NDVI→ε:对地表覆盖类型多样、背景起伏大的区域建议开启;若包内缺 NDVI,将自动退回常数 ε=0.97。
  4. 单位选择:多数制图/统计使用 更直观;若要与能量平衡/物理模型对接,选 K
  5. 批处理:可一次导入大量 .tar;如本机 IO 较慢,建议 50 景为一批(视硬盘/线程池而定)。
  6. 核验:输出后优先做一次温度统计与典型地物对比(水体最低、城区/裸地居中、裸岩/灰瓦屋面偏高、常绿林偏低),异常大多来自输入级别/标度不一致。
  7. 与 LC/指数联动:LST 常与 NDVI/BSI/NDBI 一起用于热环境/城市热岛/干旱诊断;可在“NPZ→TIF/合并索引”工具中统一到同一网格进行联合分析。

[8] 常见问题与排错

Q1. 日志提示“❌ 未找到 ST_B10.TIF 文件” A:说明该数据包不是 L2SP,或内部命名与预期不一致。请检查平台/级别,或手动将 ST_B10.TIF 作为输入(非 tar)。

Q2. 输出值明显偏高/偏低 A:不同数据源的 ST_B10 标度(缩放/偏置)可能不同。当前模块使用固定系数 (a,b) 近似换算;请核对产品文档(或 MTL)后按需在后续版本调整为“自动从 MTL 读取”。短期内你也可用外部工具将 ST_B10 先转换到物理 K,再让本模块以 a=1,b=0 处理。

Q3. 选择了“开尔文 (K×10)”但输出不是整型×10 A:当前实现输出 未做 ×10 缩放,以 float32 物理量表示。若需要 ×10 的整型产品,可在“NPZ→TIF”或外部流程中启用整型缩放(例如 ×100 或 ×10)。

Q4. 开启了 NDVI→ε 但日志没有相关提示 A:该包内可能没有 NDVI 栅格(或命名不含 “NDVI”),模块自动回退到常数 ε=0.97。可在上游流程计算 NDVI 后再合并入产品目录。

Q5. 输出范围有大片 NaN A:多由云掩膜/Fmask 导致。当 Fmask 很严格或本景云多时,有效像元会大幅减少。可暂时关闭云掩膜验证流程,或换用云量更低的时相。


[9] 参数与默认值(速查)

参数 默认 作用
apply_cloud_mask True 应用 Fmask(==0 为有效)
use_ndvi_emissivity True 启用 NDVI→ε(缺 NDVI 则回退 ε=0.97)
ε(常数模式) 0.97 无 NDVI 时的统一发射率
ε(NDVI) 0.004·pv + 0.986 pv 为 NDVI-min/max 归一后的平方
LST 映射系数 a,b a=0.00341802, b=149 LST_K = a·BT + b
输出 dtype float32 nodata=NaN

以上参数与实现保持一致。若你的工作流有明确的辐射传输/校正方案,可在后续版本中把 a,b 与 ε 修正替换为更完整的单窗/单通道模型。


[10] 最小工作流(建议操作顺序)

  1. 添加 .tar/.tar.gz(或直接添加 ST_B10.TIF)。
  2. 选择保存目录
  3. 勾选 🌿 NDVI→ε☁️ 云掩膜(建议默认)。
  4. 选择输出单位()。
  5. 点击 ▶ 开始反演,观察日志与进度。
  6. 完成后在 GIS 中快速检视统计与典型地物温度,确认结果合理。
  7. 若需与其它指数/地形/纹理合用,请到“合并索引 / NPZ→TIF”步骤统一网格导出。