Ga naar inhoud

ImageCollections filteren

Beeldcollecties zoeken en filteren

Tot nu visualiseerden we een Sentinel-2 beeld die we reeds hadden opgezocht waarvan wisten dat de kwaliteit goed zat én waarvan we de exacte bestandsnaam reeds kenden. In de praktijk is het echter niet handig om steeds de volledige filenaam te moeten weten om een beeld te openen. Bovendien zouden we zo de grootste troef van Google Earth Engine - het efficiënt doorzoeken van petabytes aan aardobservatiegegevens - onbenut laten.

In wat volgt gaan we leren hoe je zelf geschikte satellietbeelden kunt opzoeken op basis van een locatie en datum door middel van het filteren van beeldcollecties, in Earth Engine gekend als ImageCollections.

Region of Interest (ROI) intekenen

Maak een nieuw script aan. Sla het op als P1_Oostende.

Starten doen we met het intekenen van een gewenste Region Of Interest (ROI) in de Map View. Een ROI is simpelweg de afbakening van je studiegebied, waarbinnen je data wilt selecteren. Hiermee kun je dus beeldcollecties filteren op locatie.

Er kan rechtstreeks naar een locatie gezoomd worden via de zoekbalk bovenaan of door in te zoomen met de muis. Teken vervolgens het gewenste gebied in met de tekenknoppen in de Map View: .

In dit voorbeeld kiezen we voor de Konigin der badsteden, Oostende, als ons studiegebied:


Automatisch wordt een nieuwe variabele aangemaakt onder de naam 'geometry', die je eenvoudig kunt hernoemen naar een duidelijkere naam,bijvoorbeeld 'Oostende':


Bekijk de eigenschappen van de polygoon door het naar de console te printen:

//Polygoon-informatie naar de console schrijven:
print(Oostende)

Inlezen en filteren van een ImageCollection

Voor deze oefening maken we als afwisseling gebruik van Landsat 9 beelden (zie ook het stukje omtrent de Earth Engine data catalog). De code om de Landsat 9-collectie te importeren kan rechtstreeks worden gekopieerd uit de catalogus:

var L9 = ee.ImageCollection("LANDSAT/LC09/C02/T1_L2")
print('Grootte van de L9-collectie :', L9.size())

De variabele L9 verwijst nu naar de volledige Landsat-9 collectie (surface reflectance). De .size()-functie toont het aantal beelden in de collectie - een gigantische hoeveelheid, want deze bevat alle L9-beelden wereldwijd.

Om met deze collectie te werken, filteren we ze op datum en locatie.

//Filteren o.b.v. datum, locatie:
var L9 = L9.filterDate('2024-01-01', '2024-10-08') //Op basis van datum
           .filterBounds(Oostende) //op basis van locatie (de AOI);

//Printen van de nieuwe grootte
print('L9 size na filtering',L9.size())

// Printen van de collectie voor inspectie
print('Filtered collection: ', L9)

Herschaling van Landsat- 8/9 data

Net zoals bij Sentinel-2 zijn de Landsat Surface Reflectance-datasets van Landsat al atmosferisch gecorrigeerd, maar de pixelwaarden zijn nog niet herschaald naar het bereik 0–1. Om deze om te zetten naar reflectiewaarden tussen 0 en 1 (0–100% reflectie), moeten we eerst een herschalingsfunctie definiëren. In tegenstelling to Sentinel-2 is dit voor Landsat iets omslachtiger:

// Toepassen van schalingswaarden
function applyScaleFactors(image) {
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  return image.addBands(opticalBands, null, true)
              .addBands(thermalBands, null, true);
}

var L9 = L9.map(applyScaleFactors)

Deze functie applyScaleFactors selecteert de optische en thermische banden en past een schaalverhouding toe:

  • Optische banden → × 0.0000275 − 0.2
  • Thermische banden → × 0.00341802 + 149.0

De herschaalde banden worden vervolgens terug toegevoegd aan elk beeld in de collectie.

Sorteren van een ImageCollection

De beelden in de collectie zijn standaard gesorteerd op datum. Als we dus het eerste beeld uit de collectie halen, is dit het eerste Landsat-9 beeld uit 2024 van Oostende. Met de functie .first() halen we het oudste beeld uit de collectie. Print dit beeld naar de console en bekijk het verschil met de volledige ImageCollection.

// Krijg het eerste (standaard oudste) beeld uit de collectie:
var L9_first = L9.first()
print('Eerste Beeld:', L9_first)

Met javascript Map.addLayer() kunnen we dit beeld opnieuw als een kleurencomposiet visualiseren. Visualiseer als een ware kleurencomposiet (voor Landsat 9 betekent dit dus B2 (blauw), B3 (groen) en B4 (rood)). De bandnamen voor Landsat 9 Surface Reflectance (SR) beelden in google earth engine worden genoemd als SR_B*.

// Landsat 9 visualisatieparameters instellen (als dictionary) en Beeld visualiseren.
var trueColor = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],  // Band4, Band 3 en Band2 selecteren
  min: 0,               // minimale reflectie
  max: 0.3,             // maximale visualisatiereflectie
};
Map.addLayer(L9_first, trueColor, 'L9_TrueColorComposite')


Eerste Landsat 9 beeld binnen de gefilterde collectie

Mogelijk is dit eerste beeld niet het meest ideale wat betreft de wolkbedekking, waardoor er weinig te zien valt. Laten we nu op zoek gaan naar het beeld met de laagste wolkenbedekking binnen de collectie. Dit doen we in eerste instantie door de collectie te sorteren volgens het percentage wolkbedekking,wat standaard is opgenomen in de metadata van elk Landsatbeeld.

//Sorteren van de collectie obv cloud cover
var L9_sortedCC = L9.sort('CLOUD_COVER',true);
Map.addLayer(L9_sortedCC.first(), trueColor, 'Least Cloud cover 2024')


Landsat 9 satellietbeeld met laagste wolkbedekking binnen de gefilterde collectie

Bekijk op welke dag de sensor dit beeld heeft genomen. Gebruik hiervoor de ‘inspector’ om de beeldeigenschappen verder te bekijken.


De inspector

Opdracht 2.1 - Valse kleurencomposiet voor Gent

Visualiseer in een nieuw script een valse kleurencomposiet (RGB = NIR - Rood - Groen) van een Sentinel-2 beeld (Tier 1, Harmonized Level-2A, Surface Reflectance). Gebruik Gent als ROI, en selecteer een beeld uit 2024 met de laagste wolkbedekking.

Voor het sorteren op wolkbedekking, zoek je de geschikte eigenschap op om te sorteren. Deze kun je hier vinden.

Bewaar je script.

Oplossing

GEE script: https://code.earthengine.google.com/3854f31a76d15f284f61b5aba7df54bb