GEE土地分类——基于Landsat 9 数据机器学习的土地分类案例
发布时间
阅读量:
阅读量
GEE土地分类——基于Landsat 9 数据及其学习的土地分类案例
代码解释
这段代码采用 JavaScript 编写,并专注于利用 Google Earth Engine 平台(GEE)对 Landsat 图像进行处理以及进行土地覆盖分类。下面将详细阐述各组成部分的功能与作用:
1. 应用缩放因子的函数
function applyScaleFactors(image) {
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true);
}
- 目标:对Landsat遥感图像进行光学与热带波段的比例尺调整。
- 光学波段:采用特定参数与校正项对近红外光谱区域进行处理。
- 热带波段:采用不同参数组合对短波热红外光谱区域实施调整。
- 输出结果:原始影像图及新增的缩放辅助通道数据集。
2. 数据集准备
var dataset = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2')
.filterDate('2023-01-01', '2023-04-30')
.filterBounds(sa_buf)
.filterMetadata('CLOUD_COVER', 'less_than', 1)
.map(applyScaleFactors);
- 目标:生成Landsat图像集合。
-
过滤标准:
- 时间范围:限定在2023年1月至4月30日之间。
- 空间范围:限定在预设的空间范围内(sa_buf)。
- 气候状况:要求云量不超过1%,以保证图像质量。
-
映射 :将
applyScaleFactors函数应用于集合中的每个图像。
-
3. 可视化设置
var tiatiarea = dataset.median();
var visualization = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0.0,
max: 0.3,
};
Map.centerObject(sa_buf);
Map.addLayer(tiatiarea.clip(sa_buf), visualization, 'True Color (432)');
- 目标在于生成并准备用于展示该数据集的中位数图像。
- 在视觉呈现方面,《可视化》步骤采用波段4、3及2的比例反射模式实现影像的真实色彩显示。
- 在地理信息叠加操作中,《地图图层》环节需将裁剪后获取的高精度中位数影像叠加至地理底图上完成。
4. 训练数据准备
var TiatiTS = Forest1.merge(Water1).merge(Water2).merge(Forest2).merge(Cropland1)
.merge(Cropland2).merge(Grassland1).merge(Dense_Shrubs).merge(Bareland1).merge(Clouds)
.merge(Shadow).merge(Openshrubs1).merge(TeaFarms).merge(Settlement1);
- 目的 :合并多个训练数据集,代表不同的土地覆盖类别。
5. 采样训练数据
var bands = ['SR_B1', 'SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7'];
var training = tiatiarea.select(bands).sampleRegions({
collection: TiatiTS, properties: ['LC'], scale: 30, tileScale: 16
});
- 目的 :从中位数图像中采样以创建训练数据集,使用合并的训练点。
6. 分类器训练
var classifier = ee.Classifier.smileGradientTreeBoost(100).train({
features: training,
classProperty: 'LC',
inputProperties: bands
});
- 目的 :使用训练数据训练梯度提升树分类器。
7. 分类
var Tiatilulc2023 = tiatiarea.select(bands).classify(classifier);
- 目的 :使用训练好的分类器对中位数图像进行分类。
8. 显示分类结果
Map.addLayer(Tiatilulc2023, {min: 1, max: 14, palette: [...]}, 'classification');
- 目的 :将分类图像添加到地图上,并指定不同土地覆盖类别的颜色调色板。
9. 准确性评估
var withRandom = training.randomColumn('random');
var split = 0.7; // 70% 训练,30% 测试
var trainingSet = withRandom.filter(ee.Filter.lt('random', split));
var validationSet = withRandom.filter(ee.Filter.gte('random', split));
var validated = validationSet.classify(classifier);
var testAccuracy = validated.errorMatrix('LC', 'classification').accuracy();
var confusionMatrix = validated.errorMatrix('LC', 'classification');
- 目的:目的是将训练数据分割为训练集和验证集,并用于准确度分析。
- 计算:计算混淆矩阵的结果及其对应的总体准确率。
10. 导出结果
Export.image.toDrive({
image: dataset,
description: 'Tiati2023',
maxPixels: 10000000000000,
scale: 30,
region: sa_buf,
});
- 目的 :将最终数据集导出到 Google Drive,以便后续使用。
总结
该代码旨在处理来自Landsat遥感图像的数据,并通过应用特定的缩放因子来优化图像的质量。在生成输出前对分类器的性能进行评估以确保结果的有效性
全部代码
// Applies scaling factors.
function applyScaleFactors(image) {
var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
return image.addBands(opticalBands, null, true)
.addBands(thermalBands, null, true);
}
var dataset = ee.ImageCollection('LANDSAT/LC09/C02/T1_L2')
.filterDate('2023-01-01', '2023-04-30')
.filterBounds(sa_buf)
.filterMetadata('CLOUD_COVER', 'less_than', 1)
.map(applyScaleFactors)
print('dataset',dataset)
dataset = dataset;
var tiatiarea = dataset.median();
var visualization = {
bands: ['SR_B4', 'SR_B3', 'SR_B2'],
min: 0.0,
max: 0.3,
};
Map.centerObject(sa_buf);
Map.addLayer(tiatiarea.clip(sa_buf), visualization, 'True Color (432)');
// Clip to the output image to Tiati_SubCounty.
// var tiati=dataset.first().clip(sa_buf)
// Map.addLayer(tiati,visualization, 'Tiati');
//Classification of Landsat imagery
//Tiati Training Site
var TiatiTS = Forest1.merge(Water1).merge(Water2).merge(Forest2).merge(Cropland1)
.merge(Cropland2).merge(Grassland1).merge(Dense_Shrubs).merge(Bareland1).merge(Clouds)
.merge(Shadow).merge(Openshrubs1).merge(TeaFarms).merge(Settlement1)
//Creating Training data by overlaying the training points on the image
//'SR_B4', 'SR_B3', 'SR_B2'
var bands = ['SR_B1', 'SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7'];
var training = tiatiarea.select(bands).sampleRegions
({collection: TiatiTS, properties: ['LC'], scale: 30, tileScale: 16});
Train the classifier test for:
//• SVM: ee.Classifier.libsvm()
//• Random Forest: ee.Classifier.smileRandomForest()
//• CART: ee.Classifier.smileCart()
//• Naive Bayes: ee.Classifier.gmoNaiveBayes()
//• Tree Boosting (GBT): ee.Classifier.smileGradientTreeBoost()
//Random Forest
// var classifier = ee.Classifier.smileRandomForest({
// numberOfTrees: 70,
// seed: 1
// }).train(training, "LC", tiatiarea.bandNames())
//Cart Classifier
// var classifier = ee.Classifier.smileCart().train
// ({features: training, classProperty: 'LC', inputProperties: bands});
//Naive Bayes
// var classifier = ee.Classifier.smileNaiveBayes().train({
// features: training,
// classProperty: 'LC',
// inputProperties: bands
// });
//Tree Boosting GBT
var classifier = ee.Classifier.smileGradientTreeBoost(100).train({
features: training,
classProperty: 'LC',
inputProperties: bands
});
//SVM Classifier
// var classifier = ee.Classifier.libsvm().train({
// features: training,
// classProperty: 'LC',
// inputProperties: bands
// });
// Running the clasification
var Tiatilulc2023 = tiatiarea.select(bands).classify(classifier);
Displaying the classification
Map.addLayer(Tiatilulc2023, {min: 1, max: 14, palette: [
'013101', //Dense Forest
'0000FF', //Water Body1
'0000FF', //Water Body2
'04F504', //Sparse Forest dryland forest
'f5c7f9', //Cropland
'f5c7f9', //Cropland
//'00FF00', //Planted Forest/Magroove
'FFFF00', //Open GRassland
'7C2800', //Denseshrubs
'FFFFBA', //Otherland
'fbf8f9', //Clouds
'0f0f0f', //Shadows
'CC6638', //Open Shrubland
// '00EEEE', //Wetland
//'0000FF', //Water Body
'FF00FF', //Teafarms
'F71009', //Settlement
// 'FFCA00', //Lava Flow
// 'FBF6F6', //Sand Dune
]}, 'classification');
//Add a random column to each feature
var withRandom = training.randomColumn('random');
var split = 0.7; //60% training, 30% testing
var trainingSet = withRandom.filter(ee.Filter.lt('random', split));
var validationSet = withRandom.filter(ee.Filter.gte('random', split));
//Perform Accuracy Assessment
var validated = validationSet.classify(classifier);
var testAccuracy =validated.errorMatrix('LC', 'classification').accuracy();
var confusionMatrix = validated.errorMatrix('LC', 'classification');
print('Validation error matrix:', confusionMatrix);
print('validation overal accuracy:', testAccuracy)
// Export final mosaic to assets
Export.image.toDrive({
image: dataset,
description: 'Tiati2023',
maxPixels: 10000000000000,
scale: 30,
region: sa_buf,
});
代码链接
https://code.earthengine.google.com/e6fe8cfcca0b9d2cdd66005a92e4bdaa
结果

全部评论 (0)
还没有任何评论哟~
