今日分享:
Google Earth Engine(GEE)支持向量机分类
上一篇文章简单实现了随机森林分类Google Earth Engine(GEE)随机森林分类,然后选的样本点有点问题,导致分类精度不高。
今天在上一次选样本点的基础上,又选了些样本点进行分类,发现分类精度还是可以的。

所以今天来换一种分类方法,支持向量机分类(SVM)
主要参考Google Earth Engine(GEE)的官方文档
01
—
GEE部分实现代码
选择研究区和数据集
var roi = ee.Geometry.Polygon(
[[[105.76168216373424, 38.90136066495491],
[105.76168216373424, 37.81375799864711],
[106.89327396060924, 37.81375799864711],
[106.89327396060924, 38.90136066495491]]], null, false);
Map.centerObject(roi,10)
// 定义一个对 Landsat 8 表面反射率图像进行缩放和遮罩的函数。
function prepSrL8(image) {
// Develop masks for unwanted pixels (fill, cloud, cloud shadow).
var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
var saturationMask = image.select('QA_RADSAT').eq(0);
// Apply the scaling factors to the appropriate bands.
var getFactorImg = function(factorNames) {
var factorList = image.toDictionary().select(factorNames).values();
return ee.Image.constant(factorList);
};
var scaleImg = getFactorImg([
'REFLECTANCE_MULT_BAND_.|TEMPERATURE_MULT_BAND_ST_B10']);
var offsetImg = getFactorImg([
'REFLECTANCE_ADD_BAND_.|TEMPERATURE_ADD_BAND_ST_B10']);
var scaled = image.select('SR_B.|ST_B10').multiply(scaleImg).add(offsetImg);
// Replace original bands with scaled bands and apply masks.
return image.addBands(scaled, null, true)
.updateMask(qaMask).updateMask(saturationMask);
}
var landsat8col = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2021-07-01', '2021-09-30')
.filterBounds(roi)
.filter(ee.Filter.lte('CLOUD_COVER',5))//云量设置
.map(prepSrL8)
.median();
var clip_L8_ = landsat8col.clip(roi)
还是与上一篇文章一样Google Earth Engine(GEE)随机森林分类
建立并选择样本点,样本点与之前随机分类选择的样本一致
var training = Crop.merge(grassland).merge(Forest).merge(Urban).merge(Water).merge(Bareland);
print(training);
var trainingData = training.randomColumn('random')
var sample_training = trainingData.filter(ee.Filter.lte("random", 0.8));
var sample_validate = trainingData.filter(ee.Filter.gt("random", 0.8));
Map.addLayer(sample_training,{color:'red'},'分类样本')
Map.addLayer(sample_validate,{color:'blue'},'验证样本')
然后就可以调用模型进行支持向量机分类(SVM)了
// Create an SVM classifier with custom parameters.
var classifier = ee.Classifier.libsvm({
kernelType: 'RBF',
gamma: 0.5,
cost: 10
});
// Train the classifier.
var trained = classifier.train(training, 'class', bands);
// Classify the image.
var classified_SVM = clip_L8_.classify(trained)
Map.addLayer(classified_SVM.clip(roi),{min: 0, max: 5,
palette: ['c0c220','26ff4a','7eff8d','ff4e28','319599',"989990"]}, 'classified_SVM');
然后就可以用混淆矩阵法去计算分类精度和kappa系数
// 总体分类精度
var accuracy = testAccuracy.accuracy();
// Kappa系数
var kappa = testAccuracy.kappa();
最后就是导出分类后的结果了
Export.image.toDrive({
image: classified_SVM,
description: 'SVM2021a',
crs: "EPSG:32649",
scale: 30,
region: roi,
maxPixels: 1e13,
folder: 'classified'
});
02
—
结果显示