基于GEE与哨兵2号的土地覆盖分类方法及实现

发布于:2025-07-20 ⋅ 阅读:(18) ⋅ 点赞:(0)

利用遥感技术进行土地覆盖分类是地表变化监测的基础工作。Google Earth Engine(GEE)平台凭借其海量数据存储与并行计算能力,显著降低了长时间序列、大区域土地分类的技术门槛。本文基于哨兵2号遥感数据,介绍利用GEE实现土地覆盖分类的完整流程,包括数据预处理、特征构建、分类器训练及精度验证等关键环节。

技术优势与数据选择

本方法采用哨兵2号(Sentinel-2)地表反射率数据(COPERNICUS/S2_SR_HARMONIZED),具有以下优势:

  • 空间分辨率达10米,可满足中小尺度土地分类需求
  • 包含13个光谱波段,覆盖可见光至短波红外范围
  • 重访周期为5天,能有效规避云污染影响

结合GEE平台特性,可实现:

  • 免数据下载与预处理,直接调用标准化产品
  • 集成多种分类算法,支持交叉验证与精度对比
  • 自动化批量处理,快速生成多时相分类结果

技术流程与实现代码

1. 研究区定义

首先加载研究区矢量边界,确保后续分析范围精准:

// 替换为实际研究区资产路径
var roi = ee.FeatureCollection("your研究区资产路径");
Map.centerObject(roi, 9); // 设定地图显示中心与缩放级别

2. 影像合成与特征构建

通过年度合成消除云干扰,并构建光谱特征与指数特征:

function getComposite(year) {
  // 哨兵2号影像年度合成
  var s2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
    .filterDate(ee.Date.fromYMD(year, 1, 1), ee.Date.fromYMD(year, 12, 31))
    .filterBounds(roi)
    .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) // 云量控制
    .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B8', 'B11', 'B12'])
    .median() // 中值合成抑制噪声
    .clip(roi);
  
  // 特征指数计算
  var ndvi = s2.normalizedDifference(['B8', 'B4']).rename('NDVI'); // 植被指数
  var ndwi = s2.normalizedDifference(['B3', 'B8']).rename('NDWI'); // 水体指数
  var ndbi = s2.normalizedDifference(['B11', 'B8']).rename('NDBI'); // 建筑指数
  
  // 地形数据集成
  var dem = ee.Image('USGS/SRTMGL1_003').clip(roi).rename('DEM');
  
  // 整合所有特征波段
  return s2.addBands([ndvi, ndwi, ndbi, dem]);
}

特征集包含:

  • 8个原始光谱波段(B2-B12)
  • 3个地物指数(NDVI、NDWI、NDBI)
  • 1个地形因子(DEM)

3. 样本采集与数据集划分

样本质量直接决定分类精度,需按土地覆盖类型系统采集:

// 加载五类地物样本(替换为实际样本资产路径)
var waterSamples = ee.FeatureCollection("your水体样本路径");
var builtSamples = ee.FeatureCollection("your建筑样本路径");
var vegSamples = ee.FeatureCollection("your植被样本路径");
var cropSamples = ee.FeatureCollection("your耕地样本路径");
var unusedSamples = ee.FeatureCollection("your未利用地样本路径");

// 样本类别编码(0-4对应五类地物)
var labeledSamples = waterSamples.map(f => f.set('class', 0))
  .merge(builtSamples.map(f => f.set('class', 1)))
  .merge(vegSamples.map(f => f.set('class', 2)))
  .merge(cropSamples.map(f => f.set('class', 3)))
  .merge(unusedSamples.map(f => f.set('class', 4)));

// 数据集划分(70%训练,30%验证)
var sampleWithRandom = labeledSamples.randomColumn('random');
var trainingSet = sampleWithRandom.filter(ee.Filter.lt('random', 0.7));
var validationSet = sampleWithRandom.filter(ee.Filter.gte('random', 0.7));

样本采集规范

  • 每个类别样本数量不少于100个
  • 样本需均匀分布于研究区
  • 优先选择纯净像元(混合像元比例<10%)
  • 样本点空间距离应大于30米(避免空间自相关)

4. 分类器选择与训练

采用四种经典机器学习算法进行对比实验:

// 分类器配置
var classifiers = {
  RF: ee.Classifier.smileRandomForest(100),  // 随机森林(100棵决策树)
  CART: ee.Classifier.smileCart(),           // 分类回归树
  SVM: ee.Classifier.libsvm({                // 支持向量机
    kernelType: 'LINEAR',
    cost: 10
  }),
  GBT: ee.Classifier.smileGradientTreeBoost({ // 梯度提升树
    numberOfTrees: 50,
    learningRate: 0.1
  })
};

分类器训练参数说明:

  • 随机森林:通过100棵树集成降低过拟合风险
  • SVM:采用线性核函数,正则化参数设为10
  • 梯度提升树:50棵树逐步迭代优化,学习率0.1

5. 分类执行与精度验证

分类完成后需通过混淆矩阵评估精度:

// 地物类别配色方案(RGB值)
var palette = ['#173bd6', '#ff1711', '#48dc4a', '#ffc82d', '#7979a1'];

// 分类与验证流程
var targetYear = 2024;
var inputImage = getComposite(targetYear);

Object.keys(classifiers).forEach(classifierName => {
  // 模型训练
  var trainedClassifier = classifiers[classifierName].train({
    features: trainingSet,
    classProperty: 'class',
    inputProperties: inputImage.bandNames()
  });
  
  // 执行分类
  var classificationResult = inputImage.classify(trainedClassifier);
  
  // 结果可视化
  Map.addLayer(classificationResult, {
    min: 0, 
    max: 4, 
    palette: palette
  }, `${targetYear}年-${classifierName}分类结果`);
  
  // 精度验证
  var validationResult = validationSet.classify(trainedClassifier);
  var confusionMatrix = validationResult.errorMatrix('class', 'classification');
  
  // 精度指标计算
  var overallAccuracy = confusionMatrix.accuracy();
  var kappaCoeff = confusionMatrix.kappa();
  var producersAccuracy = confusionMatrix.producersAccuracy();
  
  // 精度结果输出
  print(`${classifierName}总体精度`, overallAccuracy);
  print(`${classifierName}Kappa系数`, kappaCoeff);
});

主要精度指标:

  • 总体精度(Overall Accuracy):正确分类样本占总样本的比例
  • Kappa系数:考虑随机误差的一致性系数(0-1,越高越好)
  • 生产者精度:某类别被正确分类的比例

6. 结果导出

将分类结果与精度报告导出至云端存储:

// 分类影像导出
Export.image.toDrive({
  image: classificationResult,
  description: `LandClassification_${targetYear}`,
  folder: 'GEE_Export',
  region: roi,
  scale: 10,
  maxPixels: 1e13
});

// 精度报告导出
Export.table.toDrive({
  collection: ee.FeatureCollection(accuracyResults),
  description: 'ClassificationAccuracy_Report',
  fileFormat: 'CSV'
});

部分结果如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关键技术要点

  1. 特征优化

    • 新增红边波段(B5-B7)可提升植被细分精度
    • 季节性合成(如生长季/非生长季)适用于物候差异显著区域
  2. 精度提升策略

    • 采用分层抽样确保样本类别均衡
    • 加入空间自相关特征(如纹理指数)可改善边界分类效果
    • 对低精度类别进行样本增补与重训练
  3. 效率优化

    • 大区域分类可采用分块处理策略
    • 特征降维(如主成分分析)可减少计算量

应用场景

本方法可广泛应用于:

  • 国土空间规划中的用地结构分析
  • 生态保护中的植被覆盖动态监测
  • 农业生产中的耕地变化与作物估产
  • 城镇化进程中的建设用地扩张监测

通过替换研究区矢量与样本数据,该流程可快速迁移至不同区域。实际应用中应根据研究目标调整分类体系与特征组合,以获得最优结果。


网站公告

今日签到

点亮在社区的每一天
去签到