-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathClassification Of Sentinel 2 Imagery
91 lines (76 loc) · 2.97 KB
/
Classification Of Sentinel 2 Imagery
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
///////////////////////////////////////
/*--------SENTINEL2 LEVEL2A----------*/
///////////////////////////////////////
/*----------Study Area------------*/
var Lagos = Lagos.geometry();
Map.centerObject(Lagos,10);
Map.addLayer(Lagos,{},"Lagos")
/*-------------Raw sentinel_2A---------*/
var Raw_sentinel_2A=ee.ImageCollection("COPERNICUS/S2_SR")
.filterBounds(Lagos)
.first()
.clip(Lagos);
var visparg= { min:0, max:2500};//visualization parameter
print(Raw_sentinel_2A,"Raw_sentinel_2A")
Map.addLayer(Raw_sentinel_2A.select("B1","B2","B3","B4","B5","B6","B7","B8","B9","B11","B12","AOT"),visparg,'Raw_sentinel_2A',false)
/*-------Filtering data-------*/
var sentinel_2A=ee.ImageCollection("COPERNICUS/S2_SR")
.filterBounds(Lagos)
.filterDate('2018-01-01','2018-12-31')
.filterMetadata("CLOUDY_PIXEL_PERCENTAGE","less_than",10)
.sort('CLOUDY_PIXEL_PERCENTAGE')
.median()
.clip(Lagos)
print(sentinel_2A,"FILTERED IMAGE")
var visualization ={gain:'0.1 ,0.1 ,0.1',scale:7}
Map.addLayer(sentinel_2A.select("B4","B3","B2"),visualization,'True_colour_sentinel_2A')
/*----------TRAINING THE CLASSIFER---------*/
var training_points = water.merge(forest).merge(buildings).merge(wetland)
print(training_points, 'training_points')
var Bands_selection=["B4","B3","B2"];
//overlay
var training =sentinel_2A.select(Bands_selection).sampleRegions({
collection:training_points,
properties:['landcover'],
scale:30
})
print(training,"training")
Export.table.toAsset({
collection: training,
description: 'trainingasset',
assetId: 'trainingasset'
});
///SPLITS:Training(75%) & Testing samples(25%).
var Total_samples=training.randomColumn('random')
var training_samples=Total_samples.filter(ee.Filter.lessThan('random',0.75))
print(training_samples,"Training Samples")
var validation_samples=Total_samples.filter(ee.Filter.greaterThanOrEquals('random',0.75))
print(validation_samples,"Validation_Samples")
/*---------------RANDOM FOREST CLASSIFER-------------------*/
// var classifier = ee.Classifier.smileRandomForest(numberOfTrees, variablesPerSplit, minLeafPopulation, bagFraction, maxNodes, seed)
var classifier=ee.Classifier.smileRandomForest(10).train({
features:training_samples,
classProperty:'landcover',
inputProperties:Bands_selection
})
var classified=sentinel_2A.select(Bands_selection).classify(classifier);
var palette = [
'blue', //water(0)
'green', //forest(1)
'black',//buildings(2)
'90ee90'//wetland(3)
];
Map.addLayer(classified,{min: 0, max: 3,palette: palette},"classification");
//validation_classifer.
var Validation_classifier=ee.Classifier.smileRandomForest(10).train({
features:validation_samples,
classProperty:'landcover',
inputProperties:Bands_selection
})
var confusionMatrix=ee.ConfusionMatrix(validation_samples.classify(Validation_classifier)
.errorMatrix({
actual:'landcover',
predicted:'classification'
}))
print(confusionMatrix,"confusionMatrix")
print(confusionMatrix.accuracy(),"overall_Accuracy")