基于GEE的非线性回归实现树木覆盖率预测
代码通过建立MODIS树木覆盖率数据(250m)与Landsat8影像之间的非线性回归生成了30m分辨率的树木覆盖率数据
(详细思路见注释)
// 定义研究区的矢量多边形
var wuyishan = ee.Geometry.Polygon( [ [ [118.55, 25.55], [118.55, 25.05],[119.05, 25.05],[119.05, 25.55]] ], null, false);// 将地图中心定位到研究区,缩放级别为9
Map.centerObject(wuyishan, 9); // 导入MODIS MOD44B图像集合
var mod44b = ee.ImageCollection('MODIS/006/MOD44B');// 通过过滤图像集合,仅获取2020年的图像,并选择树木覆盖百分比波段
var percentTree2020 = mod44b.filterDate('2020-01-01', '2021-01-01').first().clip(wuyishan).select('Percent_Tree_Cover'); // 在控制台打印2020年的图像信息以供检查
print('2020 Image', percentTree2020); // 将2020年的树木覆盖百分比图层添加到地图上
Map.addLayer(percentTree2020, { max: 100
}, 'Percent Tree Cover'); // 导入Landsat 8原始图像集合
var landsat8_raw = ee.ImageCollection('LANDSAT/LC08/C02/T1_RT');// 过滤Landsat 8图像集合,只获取位于研究区的图像,并在特定时间范围内
var landsat8filtered = landsat8_raw.filterBounds(wuyishan.centroid({ 'maxError': 1 })) .filterDate('2020-01-01', '2020-4-30').sort('CLOUD_COVER').first(); // 在控制台打印过滤后的Landsat 8图像以供检查
print('Landsat8 filtered', landsat8filtered); // 设置可视化参数以显示Landsat 8图像
var visParams = { bands: ['B4', 'B3', 'B2'], // 使用红、绿、蓝波段max: 16000
}; // 将Landsat 8图像图层添加到地图上
Map.addLayer(landsat8filtered, visParams, 'Landsat 8 Image'); // 组装自变量,即Landsat 8的波段
var predictionBands = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B10', 'B11']; // 开始非线性回归
// 创建训练数据堆栈
var trainingImageCART = ee.Image(landsat8filtered.select(predictionBands)).addBands(percentTree2020);
// 从选择的预测波段中创建一个图像,并将2020年的树木覆盖百分比作为一个新波段添加// 采样训练数据堆栈。
var trainingData = trainingImageCART.sample({ region: wuyishan, // 指定采样区域为Turinscale: 30, // 指定采样的空间分辨率为30米numPixels: 1500, // 从区域中随机抽取1500个像素用于训练seed: 5 // 设置随机种子以确保可重复性
}); // 查看CART训练数据,在控制台输出训练数据的信息,便于检查数据是否正确
print('CART training data', trainingData); // 运行CART回归
// .setOutputMode('REGRESSION'):设置输出模式为回归(而不是分类)。这表示模型将预测连续值(如树木覆盖率),而不是类别标签
var cartRegression = ee.Classifier.smileCart().setOutputMode('REGRESSION').train({ features: trainingData, // 使用前面采样得到的训练数据classProperty: 'Percent_Tree_Cover', // 指定目标属性为'Percent_Tree_Cover'inputProperties: predictionBands // 指定输入特征为预测波段
}); // 基于CART回归创建树木覆盖的预测
var cartRegressionImage =
landsat8filtered.select(predictionBands).classify(cartRegression, 'cartRegression');
// 使用训练好的CART回归模型对Landsat 8图像进行分类,以预测树木覆盖率,并将结果命名为'cartRegression'// 将预测结果添加到地图上进行可视化。
Map.addLayer(cartRegressionImage, { min: 0, // 设置可视化的最小值为0max: 100 // 设置可视化的最大值为100
}, 'CART regression'); // 图层名称为'CART regression'
参考书籍:《Cloud-Based Remote Sensing with Google Earth Engine》
(可私信获取电子书)