GEE:基于支持向量机(SVM)进行土地利用分类

1、前言

        本文利用SVM对于山西的土地覆盖情况进行监督分类,主要步骤包括影像选取、选取训练样本、训练模型、影像分类、精度验证。

        整个区域分为了六类:水域、森林、农田、草地、未利用地、建筑用地以及矿区。

        在选取训练样本之前需要首先创建geometry,创建界面如下,“import as”选择“Feature Collection”,输入属性值即可。

2、 代码




//去云掩膜函数 

function maskL8sr(image) {

  var cloudShadowBitMask = (1 << 3);

  var cloudsBitMask = (1 << 5);

  var qa = image.select('pixel_qa');

  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)

                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));

  return image.updateMask(mask);

}

//选择栅格数据集 

var sx2019 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
                  .filterDate('2019-05-01', '2019-10-30')
                  .filterBounds(cc)
                  .filter(ee.Filter.lt('CLOUD_COVER', 40))
                  .sort('CLOUD_COVER')
                  .map(maskL8sr)
                  .median().clip(cc);
 Map.addLayer(sx2019, {bands: ['B4', 'B3', 'B2'], min:0, max: 3000}, 'True colour image');

//定义光谱指数                  

var mndwi = sx2019.normalizedDifference(['B3', 'B6']).rename('MNDWI');//计算MNDWI

var ndbi = sx2019.normalizedDifference(['B6', 'B5']).rename('NDBI');//计算NDBI

var ndvi = sx2019.normalizedDifference(['B5', 'B4']).rename('NDVI');//计算NDVI

sx2019=sx2019.addBands(ndvi).addBands(ndbi).addBands(mndwi)

// 使用下列波段作为特征

var classNames = building.merge(water).merge(forest).merge(crop).merge(grass).merge(unutilized).merge(mine).merge(building);

var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7','MNDWI','NDBI','NDVI'];

// 通过要素集在Landsat-8中选取样本,把landcover属性赋予样本

var training = sx2019.select(bands).sampleRegions({

  collection: classNames,

  properties: ['lc'],

  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: 'lc',

  inputProperties: bands

});

//对Landsat-8进行分类

var class_img = sx2019.select(bands).classify(classifier).clip(cc);

//运用测试样本分类,确定要进行函数运算的数据集以及函数

var test = testingPartition.classify(classifier);

//计算混淆矩阵

var confusionMatrix = test.errorMatrix('lc', 'classification');

print('confusionMatrix',confusionMatrix);//面板上显示混淆矩阵

print('overall accuracy', confusionMatrix.accuracy());//面板上显示总体精度

print('kappa accuracy', confusionMatrix.kappa());//面板上显示kappa值



Map.centerObject(cc)

Map.addLayer(cc);

Map.addLayer(class_img, {min: 1, max: 4, palette: ['orange', 'blue', 'green','yellow']});

Export.image.toDrive({

  image:class_img,

  description:"2019lc",

  fileNamePrefix: "2019lc",

  //scale:10意思是分辨率10米

  scale: 30,

  //投影坐标系为UTM_Zone_51N

  crs: "EPSG:4326",

  region: cc,

  maxPixels: 1e13

});

猜你喜欢

转载自blog.csdn.net/weixin_51775350/article/details/128411865
今日推荐