1. 程式人生 > 實用技巧 >【Google Earth Engine】GEE例項學習(3)--土地利用分類

【Google Earth Engine】GEE例項學習(3)--土地利用分類

在數字影象處理中最多的就是應該對影象進行土地利用分類,因此下面是監督分類的流程以及程式碼案例。

1.首先分類最開始應該建立樣本資料集,在這裡我分了四類,然後就開始自己的取樣吧。

設立好分類後,對目標進行分類。

然後對每個樣本進行顏色選擇和屬性定義

2.下面就開始進行程式設計啦

//選擇需要裁剪的向量資料 
var cc = ee.FeatureCollection("users/wangchengcong/CC_5ring");
//去雲函式 
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 cc2019 = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR') .filterDate('2019-05-01', '2019-9-30') .map(maskL8sr) .median();
//定義光譜指數 var mndwi = cc2019.normalizedDifference(['B3', 'B6']).rename('MNDWI');//計算MNDWI var ndbi = cc2019.normalizedDifference(['B6', 'B5']).rename('NDBI');//計算NDBI var ndvi = cc2019.normalizedDifference(['B5', 'B4']).rename('NDVI');//計算NDVI cc2019=cc2019.addBands(ndvi).addBands(ndbi).addBands(mndwi)
// 使用下列波段作為特徵 var classNames = building.merge(water).merge(tree).merge(crop); var bands = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7','MNDWI','NDBI','NDVI']; // 通過要素集在Landsat-8中選取樣本,把landcover屬性賦予樣本 var training = cc2019.select(bands).sampleRegions({ collection: classNames, properties: ['landcover'], 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: 'landcover', inputProperties: bands }); //對Landsat-8進行分類 var class_img = cc2019.select(bands).classify(classifier); //運用測試樣本分類,確定要進行函式運算的資料集以及函式 var test = testingPartition.classify(classifier); //計算混淆矩陣 var confusionMatrix = test.errorMatrix('landcover', '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.clip(cc), {min: 0, max: 4, palette: ['orange', 'blue', 'green','yellow']});

3.分類好啦