Source code for sentipy.agri_indices

"""
There are a wide range of agriculturally-relevant indices to be processed from (multi-spectral) optical satellite imagery in general.

This module provides implementations of a number of indices, largely inspired by the `Index Database <https://www.indexdatabase.de>`_ and the `SentinelHub custom scripts repository <https://custom-scripts.sentinel-hub.com/custom-scripts/>`_.
They are implemented principally with Sentinel-2 in mind, but can be applied to imagery from other constellations where equivalent bands are available (it is left to the user to decide where this is the case).

Available implementations:

- NDVI
- NDWI
- OSAVI



"""


[docs]def ndvi(img_arr, band_sequence: tuple = ("B04", "B08")): """Normalized Difference Vegetation Index NDVI = (NIR - RED)/(NIR + RED) = (B08 - B04)/ (B08 + B04) """ red_idx = band_sequence.index("B04") nir_idx = band_sequence.index("B08") red = img_arr[:,:,red_idx] nir = img_arr[:,:,nir_idx] return ((nir - red)/(nir + red))
[docs]def ndwi(img_arr, band_sequence: tuple = ("B03", "B08")): """Normalized Difference Water Index NDWI = -(GREEN - NIR)/(GREEN + NIR) = -(B03 - B08)/(B03 + B08) """ green_idx = band_sequence.index("B03") nir_idx = band_sequence.index("B08") green = img_arr[:,:,green_idx] nir = img_arr[:,:,nir_idx] return (-(green - nir)/(green + nir))
[docs]def ndmi(img_arr, band_sequence: tuple = ("B08", "B11")): """Normalized Difference Moisture Index NDMI = (NIR - SWIR)/(NIR + SWIR) = (B08 - B11)/(B08 + B11) """ nir_idx = band_sequence.index("B08") swir_idx = band_sequence.index("B11") nir = img_arr[:,:,nir_idx] swir = img_arr[:,:,swir_idx] return ((nir - swir)/(nir + swir))
[docs]def osavi(img_arr, band_sequence: tuple = ("B04", "B08")): """Optimized Soil-Adjusted Vegetation Index `Index DB link <https://www.indexdatabase.de/db/i-single.php?id=63>`_ OSAVI = (1+0.16)*(NIR - RED)/(NIR + RED + 0.16) = (1.16)*(B08 - B04)/(B08 + B04 + 0.16) """ red_idx = band_sequence.index("B04") nir_idx = band_sequence.index("B08") red = img_arr[:,:,red_idx] nir = img_arr[:,:,nir_idx] return (1.16*(nir - red)/(nir + red + 0.16))
# def seli(self): # pass