[数据生产]反演地表温度(LST)
🌡️ 反演地表温度(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] 面板与数据
②-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:
-
解压到临时目录(位于保存目录下,以包名命名)。
-
自动搜索:
- 热红外亮温:
*ST_B10.TIF(L2SP 的 Surface Temperature Band 10) - NDVI 成品层:文件名含
NDVI(可选) - Fmask 云掩膜:文件名含
Fmask(可选)
- 热红外亮温:
-
若未找到
ST_B10,该条目报错并跳过。
也支持直接把
ST_B10.TIF作为输入(非 tar),此时仍按相同逻辑继续。
④-2 有效像元与掩膜
- 基础有效像元:
brightness_temp > 0且数值有限(finite)。 - 云掩膜(若启用且存在 Fmask):仅保留
Fmask == 0的像元。 - NDVI 有效性:若启用“NDVI→ε”且存在 NDVI 栅格,将其有限像元并入有效掩膜。
④-3 发射率 ε
-
NDVI-PV 法(启用且 NDVI 存在时):
- 计算像元级植被分数
pv = ((ndvi - ndvi_min)/(ndvi_max - ndvi_min + 1e-6))^2(在影像内按有效像元取 min/max); - 估算 ε = 0.004 * pv + 0.986;
- 裁剪到 [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 写出与清理
- 以
float32、nodata=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] 使用建议(实践经验)
- 数据级别:优先选择 LC08/LC09 Level-2(L2SP)。其它级别或旧产品的字段命名/标度可能不同。
- 云掩膜:在城市/山地/季节性云多区域建议开启 Fmask;若你的数据没有 Fmask,可后续在“指数/合并”环节叠加
QA_PIXEL或自建云掩膜。 - NDVI→ε:对地表覆盖类型多样、背景起伏大的区域建议开启;若包内缺 NDVI,将自动退回常数 ε=0.97。
- 单位选择:多数制图/统计使用 ℃ 更直观;若要与能量平衡/物理模型对接,选 K。
- 批处理:可一次导入大量
.tar;如本机 IO 较慢,建议 50 景为一批(视硬盘/线程池而定)。 - 核验:输出后优先做一次温度统计与典型地物对比(水体最低、城区/裸地居中、裸岩/灰瓦屋面偏高、常绿林偏低),异常大多来自输入级别/标度不一致。
- 与 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] 最小工作流(建议操作顺序)
- 添加 .tar/.tar.gz(或直接添加
ST_B10.TIF)。 - 选择保存目录。
- 勾选 🌿 NDVI→ε 与 ☁️ 云掩膜(建议默认)。
- 选择输出单位(℃)。
- 点击 ▶ 开始反演,观察日志与进度。
- 完成后在 GIS 中快速检视统计与典型地物温度,确认结果合理。
- 若需与其它指数/地形/纹理合用,请到“合并索引 / NPZ→TIF”步骤统一网格导出。