基于gee实现分类代码

基于gee实现分类的代码

var table = ee.FeatureCollection("users/gee_xuzhou_shp")
var train_shp = ee.FeatureCollection("users/xz23")

exports.GetTimeSeriesImages = function(startDate, endDate, interval,
                                       shpfile, bandsName, newBandsName,
                                       classBands, qualityMosaic, qmValue, 
                                       unmasked){
                                         
  var addVI = function(img){
        var time_start = img.get('system:time_start');
        
        // 1 ndvi
        var ndvi = img.normalizedDifference(['nir','red']).rename('ndvi');
        ndvi = ndvi.set('system:time_start', time_start); 
        
        // 2 evi 
        var evi = img.expression(
          '((NIR - RED)/(NIR + 6 * RED - 7.5 * BLUE + 1))',{
          'NIR': img.select('nir'),
          'RED': img.select('red'),
          'BLUE': img.select('blue'),
        });
        evi = evi.set('system:time_start', time_start);   
        
        // 3 rvi
        var rvi = img.expression(
          'NIR/RED',{
            'NIR':img.select('nir'),
            'RED':img.select('red'),
        });
        rvi = rvi.set('system:time_start', time_start);
        
        
        // 6 dvi
        var dvi = img.expression(
          'NIR-RED',{
            'NIR':img.select('nir'),
            'RED':img.select('red'),
        });
        dvi = dvi.set('system:time_start', time_start);
        
        // 7 savi 
        var savi = img.expression(
          '1.5*((NIR-RED)/(NIR+RED+0.5))',{
            'NIR':img.select('nir'),
            'RED':img.select('red'),
          });
          savi = savi.set('system:time_start', time_start);
          
        // 8 ndwi
        var ndwi = img.normalizedDifference(['green','nir']).rename('ndwi');
        ndwi = ndwi.set('system:time_start', time_start);
        

        // 11 lswi
        var lswi = img.expression(
          '(NIR - SWIR1) / (NIR + SWIR1)',{
          'NIR': img.select('nir'),
          'SWIR1': img.select('swir1'),
        });
        lswi = lswi.set('system:time_start', time_start);
        
        return img.addBands(ndvi.rename("ndvi"))
                  .addBands(evi.rename("evi"))
                  .addBands(rvi.rename("rvi"))
                  .addBands(dvi.rename("dvi"))
                  .addBands(savi.rename("savi"))
                  .addBands(ndwi.rename('ndwi'))
                  .addBands(lswi.rename('lswi'));
    };
    
  var start = ee.Date(startDate);
  var end = ee.Date(endDate);
  var step = end.difference(start,'day').divide(interval).ceil();
  var dateList = ee.List.sequence(0, step.multiply(interval), interval).map(function(date){
    return start.advance(date, 'day');
  });

  var images_list = dateList.map(function(date){
    var start_date = ee.Date(date);
    var end_date = start_date.advance({delta: interval, unit: 'day'});
    var sentinel = ee.ImageCollection('COPERNICUS/S2_SR')  //COPERNICUS/S2_SR,COPERNICUS/S2
                .filterDate(start_date, end_date)
                .filterBounds(shpfile)
                .select(bandsName, newBandsName)
                .map(exports.maskS2Clouds);
    var S_result = sentinel.map(addVI);
    
    var sentinel_result = ee.Algorithms.If(
      
        ee.Algorithms.IsEqual(ee.Number(qualityMosaic), 1),
        
        ee.Algorithms.If(
          ee.Algorithms.IsEqual(unmasked, 1),
          ee.ImageCollection(S_result).qualityMosaic(ee.String(qmValue)).unmask(ee.Number(0)).select(classBands),
          ee.ImageCollection(S_result).qualityMosaic(ee.String(qmValue)).select(classBands)
          ),
        
        ee.Algorithms.If(
          ee.Algorithms.IsEqual(unmasked, 1),
          ee.ImageCollection(S_result).max().unmask(ee.Number(0)).select(classBands),
          ee.ImageCollection(S_result).max().select(classBands)
          )
      );
  
    sentinel_result = ee.Image(sentinel_result).clip(shpfile.geometry());
    sentinel_result = sentinel_result.set('system:time_start', start_date);
    return sentinel_result;
  });
  return images_list;
};

exports.maskS2Clouds = function(image){
  var qa = image.select('QA60');
  var time_start = image.get('system:time_start');
  var cloudBitMask = ee.Number(2).pow(10).int();
  var cirrusBitMask = ee.Number(2).pow(11).int();
  var mask = qa.bitwiseAnd(cloudBitMask).eq(0).and(
    qa.bitwiseAnd(cirrusBitMask).eq(0));
  image = image.divide(10000);
  image = image.set('system:time_start', time_start);
  return image.updateMask(mask);
}

exports.RF2 = function(composition, training, label, trees){
  var bands = composition.bandNames();
  var classifier = ee.Classifier.smileRandomForest({numberOfTrees: trees}).train({
    features: training,
    classProperty: label,
    inputProperties: bands
  });
  var classified = composition.select(bands).classify(classifier);
  return classified;
};

var crop_0 = train_shp.filterMetadata('Name','equals',ee.String('forest'))
                           .map(function(fer){return fer.set('class',0);}).randomColumn('random');
var crop_1 = train_shp.filterMetadata('Name','equals',ee.String('gd'))
                           .map(function(fer){return fer.set('class',1);}).randomColumn('random');
var crop_2 = train_shp.filterMetadata('Name','equals',ee.String('jz'))
                           .map(function(fer){return fer.set('class',2);}).randomColumn('random');
var crop_3 = train_shp.filterMetadata('Name','equals',ee.String('st'))
                           .map(function(fer){return fer.set('class',3);}).randomColumn('random');
var crop_4 = train_shp.filterMetadata('Name','equals',ee.String('sd'))
                           .map(function(fer){return fer.set('class',4);}).randomColumn('random');
                           

var split = 0.7

var train_0 = crop_0.filter(ee.Filter.lt('random',split));
var test_0 = crop_0.filter(ee.Filter.gte('random',split));

var train_1 = crop_1.filter(ee.Filter.lt('random',split));
var test_1 = crop_1.filter(ee.Filter.gte('random',split));

var train_2 = crop_2.filter(ee.Filter.lt('random',split));
var test_2 = crop_2.filter(ee.Filter.gte('random',split));

var train_3 = crop_3.filter(ee.Filter.lt('random',split));
var test_3 = crop_3.filter(ee.Filter.gte('random',split));

var train_4 = crop_4.filter(ee.Filter.lt('random',split));
var test_4 = crop_4.filter(ee.Filter.gte('random',split));

var trainData_c = train_0.merge(train_1).merge(train_2).merge(train_3).merge(train_4);
var testData_c = test_0.merge(test_1).merge(test_2).merge(test_3).merge(test_4);

var shpfile = table;

var start_date_1 = '2021-01-01';
var end_date_1 = '2021-12-30';
var interval_1 = 30;
var bandsName_1 = ['B2','B3', 'B4','B5','B6','B7', 'B8', 'B11', 'QA60'];
var newBandsName_1 = ['blue','green', 'red', 'edge1','edge2','edge3', 'nir', 'swir1', 'QA60'];
var classBands_1 = ['blue','green','ndvi','evi','rvi','savi','ndwi','lswi',];

var timeSeries_1 = exports.GetTimeSeriesImages(start_date_1, end_date_1, interval_1, shpfile, 
                                            bandsName_1, newBandsName_1, classBands_1, 1, 'ndvi', 1);

var composition = ee.ImageCollection.fromImages(timeSeries_1).toBands();

var trainData = composition.sampleRegions({
  collection : trainData_c,
  properties : ['class'],
  scale : 10,
  tileScale: 16
});

var testData = composition.sampleRegions({
  collection : testData_c,
  properties : ['class'],
  scale : 10,
  tileScale: 16
});     

var bands = composition.bandNames();
var classifier = ee.Classifier.smileRandomForest(100).train({
  features: trainData,
  classProperty: 'class',
  inputProperties:bands
});


var classified = composition.select(bands).classify(classifier);
var mytest = testData.classify(classifier);
var testAccuracy = mytest.errorMatrix('class','classification')


var TestAccuracy = mytest.errorMatrix('class','classification');
var OverallAccuracy = ee.Feature(null, {OverallAccuracy:TestAccuracy.accuracy()});
var Kappa = ee.Feature(null, {kappa: TestAccuracy.kappa()});
var ConsumersAccuracy = ee.Feature(null, {consumersAccuracy: TestAccuracy.consumersAccuracy()});
var ProducersAccuracy = ee.Feature(null, {producersAccuracy: TestAccuracy.producersAccuracy()});
var confusionmatrixArray = ee.Feature(null, {matrix: TestAccuracy.array()});


print('TestAccuracy:',TestAccuracy);
print('OverallAccuracy:',OverallAccuracy);
print('Kappa:',Kappa);
print('ConsumersAccuracy:',ConsumersAccuracy);
print('ProducersAccuracy:',ProducersAccuracy);
print('confusionmatrixArray:',confusionmatrixArray);

Export.image.toDrive({
  image: classified,
  description: 'xz',
  folder: 'xz',
  fileNamePrefix: 'xz',
  region: shpfile,
  scale: 10,
  maxPixels: 1e13
});





  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值