Ga naar inhoud

Spectrale responsiecurves

Als laatste onderdeel van dit practicum, kijken we even naar de spectrale signaturen van onze klassen. Uit deze curves kunnen we volgende zaken afleiden (zie ook Practicum 1):

  • Welke banden/indices zorgen voor onderscheid tussen klassen?

  • Welk spectrale curves heeft elk van onze klassen? Kunnen we deze curves ook verklaren?

Aanmaken voorbeeldFeatures

Om spectrale curves te maken, hebben we eveneens voorbeeld-samples nodig van elk van de klassen. Dit kan door opnieuw nieuwe features in te tekenen (bv één punt voor 1 klasse). We doen dit bijvoorbeeld voor de klassen Mangrove, OtherForest, Water en Urban. Zoek één representatief punt voor elk van de klassen. Maak deze aan als het type Feature en geef het een property 'label', met een bijpassende naam



Eenmaal de VoorbeeldFeatures zijn aangemaakt kun je ze samenvoegen in het script:

var vbPol = ee.FeatureCollection([Mangrove,OtherForest,Water,Urban]);

S2-beeld aanmaken

Maak ook opnieuw een Sentinel-2 beeld uit vorige oefening aan:

var Paramaribo  =  ee.Geometry.Polygon(
    [[[-55.31615692285674, 5.999656479357525],
      [-55.31615692285674, 5.8043169248564865],
      [-55.02364593652862, 5.8043169248564865],
      [-55.02364593652862, 5.999656479357525]]], null, false)


// Aanmaken van threshold + maskfunctie + Herschalingsfunctie
var CLEAR_THRESHOLD = 0.6
var applyCloudMask = function(img){
   return img.updateMask(img.select('cs').gte(CLEAR_THRESHOLD))
               .multiply(0.0001) // 
               .copyProperties(img, ["system:time_start"]);
}

//Aanmaken van een Sentinel-2 ImageCollection ter hoogte van de kustlijn met mangroves en de hoofdstad Paramaribo, Suriname
var S2 = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED');
var csPlus = ee.ImageCollection('GOOGLE/CLOUD_SCORE_PLUS/V1/S2_HARMONIZED');

var S2_coll = S2
       .linkCollection(csPlus, ['cs'])
       .filterDate('2025-08-01','2025-10-30')// Filteren voor het jaar 2025, droge tijd
       .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',50)) //Voorselectie obv wolken
       .map(applyCloudMask) //toepassen van de cloudmaskfunctie
       .filterBounds(Paramaribo); //collectie filteren obv de Kustzonegeometrie

//Omzetten collectie naar een Image, door de .median()-reducer toe te passen. Hierna clippen obv de ROI (Paramaribo)
var S2_im = S2_coll.median()
                     .clip(Paramaribo)        

//Toepassen indices + medianreducer + clippen      
var S2_im = S2_coll.map(addIndices).median().clip(Paramaribo);

Spectrale responsiecurve aanmaken

Vervolgens kunnen we de Chart aanmaken. Tevens linken we de overeenkomstige golflengtes aan de banden, om zo een spectrum te krijgen met de golflengte in de X-as.

// Banden S2 aangeven (hier: volledig, inclusief B1 en B9 (worden weggelaten in classificatie wegens onbruikbaar)
var bands =['B1','B2','B3','B4','B5','B6','B7','B8','B8A','B9','B11','B12']

//De overeenkomstige golflengte per band aangeven (zie bandenverdeling Sentinel-2).
var wavelengths =[443.9,496.6,559,664.5,703.9,740.2,782.5,835.1,864.8,945,1613.7,2202.4]


//Aanmaken Chart
var Chart = ui.Chart.image.regions({
  image: S2_im.select(bands),
  regions: vbPol,
  reducer: ee.Reducer.mean(),
  scale: 10,
  seriesProperty: 'label',
  xLabels: wavelengths
})

var plotOptions = {
  title: 'Sentinel-2 surface reflectance spectra',
  hAxis: {title: 'Wavelength (nanometers)'},
  vAxis: {title: 'Reflectance'},
  lineWidth: 1,
  pointSize: 4,
  series: {
    0: {color: 'red'}, // Mangrove
    1: {color: 'green'}, // Forest
    2: {color: 'blue'}, // water
    3: {color: 'black'}, //crops/grass
  }};

print(Chart.setOptions(plotOptions));