目录
[1. Landsat LST 提取](#1. Landsat LST 提取)
[2. Sentinel-2 云掩膜与插值填补](#2. Sentinel-2 云掩膜与插值填补)

若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!
地表温度(Land Surface Temperature, LST)是城市热岛效应、干旱监测、气候变化等研究的核心参数。然而,当前主流热红外遥感数据面临一个长期存在的矛盾:高空间分辨率与热红外通道不可兼得。Landsat 系列提供 30--100 米的热红外数据,但重访周期长且空间分辨率有限;Sentinel-2 拥有 10 米的多光谱高分辨率,却缺少热红外波段。
本文介绍一套基于 Google Earth Engine(GEE)的完整技术方案,通过随机森林回归模型融合 Sentinel-2 多光谱数据、SRTM 地形数据与 Landsat 热红外数据,实现 10 米分辨率 LST 的高精度预测。方案的核心技术亮点包括:
-
多源数据协同:以 Landsat Collection 2 的 ST_B10 官方温度产品为标签,以 Sentinel-2 光谱波段及衍生指数、地形因子为预测变量;
-
分层采样策略:基于高程分层的 stratifiedSample 保证样本代表性;
-
特征工程与筛选:通过相关性分析自动筛选最优预测变量组合;
-
后处理优化:focalMedian 中值滤波消除预测结果的斑块噪声;
-
内存溢出规避:tileScale 参数调优解决 GEE 大区域计算的内存瓶颈。
当前卫星地表温度产品与精细化热分析需求之间的信息差距
一、技术背景与问题分析
为什么需要"降尺度"LST:
Landsat 的热红外波段(Band 10)原始空间分辨率为 100 米,重采样后通常以 30 米产品形式发布。对于城市热岛精细分析、农田蒸散发估算等需要刻画空间异质性的场景,30 米分辨率仍显不足。Sentinel-2 的 10 米多光谱数据提供了丰富的地表反射率信息,但缺乏热红外通道------两者的优势恰好互补。
核心思路------统计降尺度: 统计降尺度的基本假设是:地表温度与多光谱反射率、植被指数、地形因子等之间存在可建模的统计关系。通过在粗分辨率(Landsat 30 米)尺度上建立 LST 与预测变量之间的回归模型,然后将该模型应用于细分辨率(Sentinel-2 10 米)的预测变量上,即可获得 10 米分辨率的 LST 预测结果。
其中为随机森林回归模型。
多源地表温度产品空间格局对比:粗分辨率产品至 10 m 高分辨率 LST
地表温度(LST)降尺度技术虽已有较长发展历史,早期广泛采用的算法如DisTrad、TsHARP等,均以LST与植被指数(如NDVI)之间存在简单线性关系为前提。然而,实际地表热环境受多源因素协同调控,包括植被覆盖、高程与坡度、地表水体比例、不透水面密度、大气湿度等数十个变量,且各因子与LST之间普遍呈现非线性、交互性耦合特征。因此,传统线性回归模型在刻画该复杂响应关系时存在结构性缺陷,导致降尺度结果的空间保真度受限。
针对上述问题,本研究采用随机森林(Random Forest)算法构建LST降尺度模型,其核心策略与实施流程如下:
-
多源预测因子集成:模型输入变量涵盖Sentinel-2多光谱波段、多种衍生光谱指数(植被指数、水体指数等),以及基于SRTM提取的地形参数(高程、坡度、地形位置指数TPI),充分覆盖影响LST的主要环境维度。
-
非线性关系学习:在30 m空间分辨率下,以Landsat LST为目标变量,以所述多源特征为预测变量,训练随机森林回归模型,自动捕获特征空间与热环境之间的复杂非线性映射关系,无需预设函数形式。
-
尺度迁移与高分辨率推算:将训练完成的映射函数应用于10 m分辨率的Sentinel-2光谱特征数据,从而在更高空间尺度上"反演"出对应的LST数值。
-
技术逻辑总结:整体思路可概括为------在30 m尺度建立LST与多源因子的非线性统计关联,并将该关联迁移至10 m特征空间,最终生成精细化的LST分布产品。该方法有效规避了线性假设的局限性,显著提升了降尺度结果的可靠性与空间细节表达能力。
基于随机森林回归的地表温度降尺度及 10 m LST 数据集生成技术路线
二、数据源与预处理
(一)数据源配置
代码使用以下 GEE 公开数据集:
| 数据集 | 集合名称 | 用途 |
|---|---|---|
| Sentinel-2 SR | COPERNICUS/S2_SR_HARMONIZED |
10m 多光谱预测变量 |
| Landsat 8/9 L2 | LANDSAT/LC08/C02/T1_L2 / LC09/C02/T1_L2 |
LST 标签(ST_B10) |
| SRTM DEM | USGS/SRTMGL1_003 |
地形因子 |
| 研究区矢量 | table(用户导入) |
ROI 边界 |
| [数据源配置] |
(二)关键预处理操作
1. Landsat LST 提取
Landsat Collection 2 Level-2 数据已包含官方处理的地表温度波段 ST_B10,无需自行实现单窗算法。转换为摄氏度的计算公式为:
javascript
function cloudMaskLandsat(image) {
var qa = image.select('QA_PIXEL');
var mask = ee.Image([1, 2, 3, 4].map(function(num) {
return qa.bitwiseAnd(1 << num).eq(0);
})).reduce(ee.Reducer.allNonZero());
return image.select(['ST_B10'], ['LST'])
.updateMask(mask)
.multiply(0.00341802)
.add(149)
.add(-273.15);
}
ST_B10 存储为量化后的亮温值,需先乘以缩放因子 0.00341802 并加上偏移量 149 得到开尔文温度,再减去 273.15 转换为摄氏度。QA_PIXEL 波段用于掩膜云、阴影等无效像元。
2. Sentinel-2 云掩膜与插值填补
云掩膜直接利用 Sentinel-2 自带的 QA60 波段:
javascript
function cloudMaskS2(image) {
var qa = image.select('QA60');
var cloudBitMask = 1 << 10;
var cirrusBitMask = 1 << 11;
var mask = qa.bitwiseAnd(cloudBitMask).eq(0)
.and(qa.bitwiseAnd(cirrusBitMask).eq(0));
return image.select(['B.*']).updateMask(mask).multiply(1e-4);
}
注意事项 :去云后影像常出现数据空洞。代码采用 focalMean 邻域均值插值填补:
javascript
var s2Filled = s2Image.focalMean(4, 'square', 'pixels', 4);
s2Image = s2Image.unmask(s2Filled);
focalMean(4) 表示以 4 像素为半径的方形窗口计算均值,unmask 将空值替换为插值结果。
三、特征工程:构建预测变量集
(一)光谱指数
代码计算了 6 种对地表温度敏感的光谱指数:
其中 NIR、SWIR1、SWIR2、GREEN 分别对应 Sentinel-2 的 B8、B11、B12、B3 波段。
代码实现采用 expression 方法批量计算:
javascript
var indices = [
{ name: 'NDMI', formula: 'NDMI = (NIR - SWIR1) / (NIR + SWIR1)' },
// ...
];
var indicesImage = ee.Image(indices.map(function(dict) {
var indice = s2Image.expression(dict.formula, {
NIR: s2Image.select('B8'),
SWIR1: s2Image.select('B11'),
SWIR2: s2Image.select('B12'),
GREEN: s2Image.select('B3')
}).rename(dict.name);
return indice;
}));
(二)地形因子
-
高程:直接使用 SRTM DEM
-
坡度(Slope) :
ee.Terrain.slope(srtm) -
地形位置指数(TPI):高程与邻域平均高程之差
javascript
var topoAverage = srtm.focalMean(5, 'square', 'pixels');
var tpi = srtm.subtract(topoAverage).rename('TPI');
(三)土地覆盖派生特征
通过指数阈值生成湿度、绿度、干度的连续表面:
javascript
var wet = indicesImage.select('MNDWI2').gt(0);
var green = indicesImage.select('NDMI').gt(0.1).and(wet.eq(0));
var dry = wet.eq(0).and(green.eq(0));
var wetness = wet.focalMean(1, 'square', 'pixels', 10).rename('wetness');
var greeness = green.focalMean(1, 'square', 'pixels', 10).rename('greeness');
var dryness = dry.focalMean(1, 'square', 'pixels', 10).rename('dryness');
四、分层采样与特征选择
(一)高程分层采样
LST 与高程存在强相关性。代码将高程分为 7 类,确保样本在各高程区间均匀分布:
javascript
var strat = ee.Image(0)
.where(srtm.lt(0), 1)
.where(srtm.gte(0).and(srtm.lt(10)), 2)
// ... 中间分类省略
.where(srtm.gte(1000), 7)
.selfMask()
.rename('elevation_class');
采样时指定 classBand: 'elevation_class':
javascript
var sample = features.addBands(lstLandsat).stratifiedSample({
scale: 30,
numPoints: 1e3,
region: roi,
classBand: 'elevation_class',
tileScale: 16 // 关键:规避内存溢出
});
tileScale: 16 是本文的一个关键优化点 。GEE 在处理大范围 stratifiedSample 时容易触发 User memory limit exceeded 错误,调大 tileScale 可将计算任务切分为更小的瓦片,降低单次内存占用。
(二)相关性分析与特征筛选
计算每个预测变量与 LST 的 Pearson 相关系数,以
排序筛选 top 特征:
javascript
var correlationReduce = sample.reduceColumns({
reducer: ee.Reducer.pearsonsCorrelation().repeat(predictors.length),
selectors: predictorsLst
});
同时构建特征间相关性矩阵,选择特征间平均相关性最低的一组变量作为最终预测变量------这一策略可有效缓解多重共线性问题,提升模型泛化能力。
五、随机森林建模与评估
(一)模型训练
javascript
var model = ee.Classifier.smileRandomForest(50)
.setOutputMode('REGRESSION')
.train(train, 'LST', lowestCorrelationMatrix);
-
smileRandomForest(50):构建 50 棵决策树 -
setOutputMode('REGRESSION'):指定回归模式(而非分类) -
训练集与测试集按 7:3 随机划分
(二)特征重要性
随机森林内置的特征重要性评估以 explain() 方法输出:
javascript
var importance = ee.Dictionary(model.explain().get('importance'));
var relative = values.map(function(value) {
return ee.Number(value).divide(sum).multiply(100);
});
(三)精度评估指标
决定系数:
平均绝对误差 MAE:
六、总结
本文系统介绍了基于 GEE 平台、融合多源遥感数据与随机森林回归的 10 米分辨率 LST 预测技术方案。核心可复用经验包括:
-
数据协同策略:以 Landsat Collection 2 的官方 ST_B10 为标签,Sentinel-2 多光谱与 SRTM 地形为预测变量,绕过热红外与高分辨率不可兼得的瓶颈;
-
分层采样保证代表性 :基于高程分层的
stratifiedSample确保样本覆盖各类地形条件; -
特征工程自动化:光谱指数批量计算 + 相关性分析自动筛选最优特征组合;
-
内存优化技巧 :
tileScale参数调优是 GEE 大区域计算的关键; -
后处理提升质量 :
focalMedian中值滤波有效平滑预测噪声。
该方案适用于城市热岛精细制图、农业干旱监测、生态环境评估等需要高分辨率 LST 数据的场景。整套流程在 GEE 云端完成,无需本地计算资源,具备良好的可迁移性与可复现性。
七、运行结果
Sentinel-2 假彩色合成影像
归一化差异湿度指数
归一化燃烧指数
归一化燃烧指数 2
归一化差异水体指数
改进型归一化差异水体指数
改进型归一化差异水体指数 2
高程分层类别
湿度概率表面
绿度概率表面
干燥概率表面
地形位置指数
地表温度参考值(30米)
高空间分辨率地表温度预测值(10米)
控制台输出的结果信息(1)
控制台输出的结果信息(2)
代码运行结果相关统计图(1)
代码运行结果相关统计图(2)
代码运行结果相关统计图(3)
| main_variable | dryness | wetness | greeness | NBR2 | NBR | MNDWI2 |
|---|---|---|---|---|---|---|
| dryness | 1 | -0.456 | -0.851 | -0.649 | -0.649 | -0.308 |
| wetness | -0.456 | 1 | -0.079 | 0.152 | 0.163 | 0.695 |
| greeness | -0.851 | -0.079 | 1 | 0.637 | 0.631 | -0.064 |
| NBR2 | -0.649 | 0.152 | 0.637 | 1 | 0.927 | 0.072 |
| NBR | -0.649 | 0.163 | 0.631 | 0.927 | 1 | 0.098 |
| MNDWI2 | -0.308 | 0.695 | -0.064 | 0.072 | 0.098 | 1 |
| [皮尔逊相关系数矩阵] |
点击RUN即可下载计算结果数据
若觉得代码对您的研究 / 项目有帮助,欢迎点击打赏支持!需要完整代码的朋友,打赏后可在后台私信(复制文章标题发给我),我会尽快发您完整可运行代码,感谢支持!