GEE|使用Landsat8数据进行监督分类

利用GEE做监督分类

训练器我们选择随机森林;数据选择Landsat-8;训练样本是我们自己的样本,包括作物,不透水层等几类地物。

  • 选择训练样本

用要素集来标记训练样本,每个要素都有一个表示类别的属性。

  • 对影像进行分类

其中一部分进行分类器的训练,还有一部分留下来做精度验证。

  • 输出影像及混淆矩阵

导出分类后的图像以及分类的混淆矩阵

代码实现

//导入样本点与研究区矢量
var table = ee.FeatureCollection("projects/ee-tangjielin17/assets/tree"),
    table2 = ee.FeatureCollection("projects/ee-tangjielin17/assets/water"),
    sample = ee.FeatureCollection("projects/ee-tangjielin17/assets/sample_shayang"),
    table1 = ee.FeatureCollection("projects/ee-tangjielin17/assets/building"),
    aoi = ee.FeatureCollection("users/tangjielin17/ShaYang");

// 去云函数 
function maskL8sr(image) {
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  var qa = image.select('QA_PIXEL');
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}
// 选择栅格数据集 
var cc2019 = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
                  .filterDate('2019-05-01', '2019-9-30')
                  .filterBounds(aoi)
                  .map(maskL8sr)
                  .median();
// 定义光谱指数                  
var mndwi = cc2019.normalizedDifference(['SR_B3', 'SR_B6']).rename('MNDWI');//计算MNDWI
var ndbi = cc2019.normalizedDifference(['SR_B6', 'SR_B5']).rename('NDBI');//计算NDBI
var ndvi = cc2019.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI');//计算NDVI
cc2019 = cc2019.addBands(ndvi).addBands(ndbi).addBands(mndwi)
// 使用下列波段作为特征
var samples = sample.merge(table).merge(table2).merge(table1);
var bands = ['SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7','MNDWI','NDBI','NDVI'];
// 通过要素集在Landsat-8中选取样本,把landcover属性赋予样本
var training = cc2019.select(bands).sampleRegions({
  collection: samples,
  properties: ['type'],
  scale: 30
});
// 精度评价 
var withRandom = training.randomColumn('random');//样本点随机的排列
// 保留一些数据进行测试,以避免模型过度拟合。
var split = 0.7; 
var trainingPartition = withRandom.filter(ee.Filter.lt('random', split));//筛选70%的样本作为训练样本
var testingPartition = withRandom.filter(ee.Filter.gte('random', split));//筛选30%的样本作为测试样本
// 分类方法选择smileCart() randomForest() minimumDistance libsvm
var classifier = ee.Classifier.libsvm().train({
  features: trainingPartition,
  classProperty: 'type',
  inputProperties: bands
});
// 对Landsat-8进行分类
var class_img = cc2019.select(bands).classify(classifier);
// 运用测试样本分类,确定要进行函数运算的数据集以及函数
var test = testingPartition.classify(classifier);
// 计算混淆矩阵
var confusionMatrix = test.errorMatrix('type', 'classification');
print('confusionMatrix',confusionMatrix);//面板上显示混淆矩阵
print('overall accuracy', confusionMatrix.accuracy());//面板上显示总体精度
print('kappa accuracy', confusionMatrix.kappa());//面板上显示kappa值

Map.centerObject(aoi)
Map.addLayer(aoi);
Map.addLayer(class_img.clip(aoi), {min: 1, max: 7});

结果

分类结果图:

 

混淆矩阵:

posted @ 2022-09-17 21:38  Weltㅤ  阅读(1792)  评论(0编辑  收藏  举报