Tresholding
Thresholds
In de vorige sectie behandelden we hoe spectrale banden kunnen worden gecombineerd tot indices. Het resultaat is steeds een rasterbeeld met continue waarden. Door middel van thresholding kan deze informatie gecategoriseerd worden, zodat discrete rasters ontstaan (bijvoorbeeld landcoverdata).
Dergelijke thresholds kunnen worden geïmplementeerd met logische operatoren. Uit een NDVI kan bijvoorbeeld een eenvoudige landclassificatie worden berekend door een vegetatie/non-vegetatiekaart aan te maken.
1. Enkelvoudige Treshold
Laten we een eenvoudige NDVI aanmaken voor de stad Belém (start dus best een nieuw script; P2_thresholds). Hieronder vind je alvast de code om het beeld met de laagste wolkbedekking op te sporen en in te laden (we passen hier dus geen cloudmask toe):
var Belem = ee.Geometry.Point([-48.499 , -1.4505]);
var S2_Belem = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED")
                        .filterBounds(Belem)
                        .filterDate('2025-03-01','2025-10-30')
                        .sort('CLOUDY_PIXEL_PERCENTAGE')
                        .first()
Map.centerObject(S2_Belem)
// NDVI berekenen
var Belem_NDVI = S2_Belem.normalizedDifference(['B8', 'B4']);
// Karteren van de NDVI
var NDVIPalette = ['red', 'white', 'green']; 
Map.addLayer(Belem_NDVI, { min: -1, max: 1, palette: NDVIPalette }, 'NDVI Belem');
Bekijk opnieuw het bekomen beeld. Bekijk de waarden voor het stad, water, bos, bodem,.. met de inspector. 
Aan de hand van een ruwe inschatting zou je kunnen zeggen dat alle NDVI waarden groter dan 0.5 tropisch bos betreffen. Deze waarde kunnen we bijgevolg gebruiken als treshold. Via de Boolean operator .gt()('greater then'), kunnen we alle waarden groter dan 0.7 naar een binair raster brengen.
Andere operators zijn .lt() = less than, .lte() = 'less than or equal', .gte() = 'greater than or equal',  .eq() = 'equal', .neq() = 'not equal', ..
// Invoegen van de treshold waarde
var forest = Belem_NDVI.gt(0.7);
// Map de threshold. 
Map.addLayer(forest, { min: 0, max: 1, palette: ['white', 'green'] }, 'Non-forest vs. Forest');
Complexere categorieën met .where()
Indien er meerdere conditionals opgesteld dienen te worden, kan er gebruik gemaakt worden van de .where() methode. Hierbij wordt eerst een Image geïniteerd waarbij alle waarden = 1. Deze wordt daarna bijgewerkt via de .where()-functie (zoek deze op in de Docs!.
Zo wensen we bijvoorbeeld de NDVI in 3 klassen op te delen, zoals in onderstaande tabel beschrijven:
| Beschrijving | Klasse | NDVI range | 
|---|---|---|
| Water | 0 | =< -0.1 | 
| Non-forest | 1 | > -0.1 & =<0.7 | 
| Forest | 2 | > 0.7 | 
// Start met een Image, waar alle waarden gelijk zijn aan 1
var belemClass = ee.Image(1) 
// Maak gebruik van clip om bij te snijden tot onze bestaand beeld
belemClass = belemClass.clip(Belem_NDVI.geometry()); 
belemClass = belemClass.where(Belem_NDVI.lte(-0.1), 0); // Alle pixels waar NDVI < 0.1 => klasse 0 
belemClass = belemClass.where(Belem_NDVI.gt(-0.1).and(Belem_NDVI.lte(0.7)), 1)
belemClass = belemClass.where(Belem_NDVI.gt(0.7).and(Belem_NDVI.lte(1)), 2)
// Visualisatie van de NDVI
Map.addLayer(belemClass, { min: 0, max: 2, palette: ['blue', 'white', 'green'] }, 'Water, Non-forest, Forest');
Zoals in bovenstaand voorbeeld blijkt, kun je ook gebruik maken van de operatoren .and(),  .or() en not().
  
 NDVI tresholding kaart van Belèm