Infrarood luchtfoto 25 cm (GEOTIFF) - NDVI berekenen

Beste,

Via Beeldmateriaal heb ik de 25 cm infrarood luchtfoto gedownload als Geotiff. Deze bevat 8-bit waardes, 0-255 (=digital numbers). Graag wil ik de NDVI berekenen met deze luchtfoto. Als ik literatuur erover lees is het nodig om eerst digital numbers te converteren naar reflectiewaardes. Heeft iemand ervaring met deze berekening, specifiek met deze infrarood luchtfoto?

Bron luchtfoto:
De opendata zomerfoto’s van 2020 van het Nederlands grondgebied zijn te downloaden van onze FTP-site. Zowel de RGB als de CIR zijn terug te vinden in het mapje: /Beeldmateriaal/25CM/2020. Voor eerdere jaargangen even een ander mapje kiezen.
ftp-site: 104.47.162.174. Inlogtype: anoniem.

Het volgende gaat terug op kennis ie ik zo’n 25 jaar geleden heb opgedaan. Ik kan er hier en daar dus naast zitten ;-).

NDVI gaat over de verhouding tussen nabij infrarood en het zichtbare licht (rgb). Zolang je de NDVI niet wilt vergelijken met NDVI’s van anderen, maar alleen geïnteresseerd bent in de relatieve waarden in je beeld, dan maakt het niet veel uit hoe de 8 bit waarden zich precies verhouden tot de reflectiewaarden.

Ik zou denk ik het gemiddelde nemen van de 8 bit waarden van het RGB beeld, en dan die in de ndvi formule combineren met de 8 bit waarde van het infrarood beeld.

Met vriendelijke groet, MArco

Ik heb dat recentelijk gedaan met Octave (open source variant van Matlab). Rekenen met uint8 is echter verradelijk, dus misschien handig om het naar float32 te converteren voor de berekening.

Dank voor je reactie. Waarom is rekenen met uint8 precies verraderlijk? Gebruikte je als bron ook de 25 cm infrarood luchtfoto?

Hoi Marco,

Dank voor je reactie. De formule voor de NDVI = NIR - RED/ NIR + RED.
In principe heb je dus genoeg aan de infrarood band en de rode band vanuit de infrarood luchtfoto. Deze bevat de groene, rode en infrarood band.

8-bit unsigned integers (uint8) hebben een waarde tussen 0 en 255. De NDVI heeft een waarde tussen -1 en 1. Omdat in uint8 alleen gehele positieve getallen mogelijk zijn, krijgt met de formule in uint8 ieder pixel de waarde 0 of 1.

NDVI = (NIR - RED) / (NIR + RED)   Let op de haakjes in de formule.

Om een waarde tussen 0 en 255 te krijgen zodat je de NDVI in een gewoon plaatje weer kan geven, moet je de formule dus aanpassen:

NDVI = ((NIR - RED) / (NIR + RED) + 1) * 127.5

In sommige programmeertalen en beeldverwerkingssoftware worden bij berekeningen in uint8 echter ook alle tussenresultaten afgerond op gehele getallen tussen 0 en 255. Dan gaat de berekening alsnog fout. Het is dus verstandig eerst naar float32 te converteren. En pas het eindresultaat weer als uint8 op te slaan.

NIR = float32(NIR)
RED = float32(RED)
NDVI = ((NIR - RED) / (NIR + RED) + 1) * 127.5
NDVI = uint8(NDVI)
1 like