赞
踩
基于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 });
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。