Vegetation indices exploit the distinct spectral reflectance curve of healthy green canopies: strong absorption in the red chlorophyll band (0.64 - 0.67 um) and high scattering/reflectance in the near-infrared (NIR) plateau (0.85 - 0.88 um).
GeoIndexR provides four primary vegetation indices, each
tailored to different canopy densities and atmospheric or soil
conditions:
Rouse et al. (1974) formulated the normalized ratio:
\[\text{NDVI} = \frac{\text{NIR} - \text{RED}}{\text{NIR} + \text{RED}}\]
library(GeoIndexR)
img <- get_example_data()
ndvi <- geo_index(img, "NDVI")
index_summary(ndvi)
#>
#> === GeoIndexR Spectral Summary ===
#>
#> index min max mean median sd q05 q25 q75 q95 na_pct
#> NDVI -0.5209 0.9187 0.3202 0.1316 0.469 -0.3344 -0.0603 0.8614 0.9016 1
#> total_cells
#> 100In areas with sparse or intermediate canopy cover (\(< 40\%\)), exposed background soil alters the red and near-infrared reflectance. Huete (1988) introduced the soil adjustment factor \(L\):
\[\text{SAVI} = \frac{\text{NIR} - \text{RED}}{\text{NIR} + \text{RED} + L} \times (1 + L)\]
In GeoIndexR, \(L\) is
configurable directly through geo_index() or
calc_savi():
savi_standard <- geo_index(img, "SAVI", L = 0.5)
savi_sparse <- geo_index(img, "SAVI", L = 1.0)
index_summary(c(savi_standard, savi_sparse))
#>
#> === GeoIndexR Spectral Summary ===
#>
#> index min max mean median sd q05 q25 q75 q95 na_pct
#> SAVI -0.1091 0.8736 0.3170 0.0809 0.3754 -0.0558 -0.0110 0.7527 0.8439 1
#> SAVI -0.1005 0.8547 0.3013 0.0731 0.3562 -0.0410 -0.0088 0.7089 0.8169 1
#> total_cells
#> 100
#> 100Liu & Huete (1995) designed EVI to decouple the canopy background signal and reduce atmospheric influences through blue band feedback:
\[\text{EVI} = G \times \frac{\text{NIR} - \text{RED}}{\text{NIR} + C_1 \times \text{RED} - C_2 \times \text{BLUE} + L}\]
Default coefficients (standard MODIS/Sentinel-2/Landsat): - \(G = 2.5\) (Gain factor) - \(C_1 = 6.0\) (Aerosol coefficient for red) - \(C_2 = 7.5\) (Aerosol coefficient for blue) - \(L = 1.0\) (Canopy background adjustment)
evi <- geo_index(img, "EVI")
index_summary(evi)
#>
#> === GeoIndexR Spectral Summary ===
#>
#> index min max mean median sd q05 q25 q75 q95 na_pct
#> EVI -0.1018 1.1667 0.3826 0.0942 0.459 -0.0597 -0.0148 0.9091 1.0591 1
#> total_cells
#> 100Gitelson et al. (1996) substituted the red band with the green band to enhance sensitivity to chlorophyll concentrations in dense canopies where red reflectance becomes saturated:
\[\text{GNDVI} = \frac{\text{NIR} - \text{GREEN}}{\text{NIR} + \text{GREEN}}\]
gndvi <- geo_index(img, "GNDVI")
index_summary(gndvi)
#>
#> === GeoIndexR Spectral Summary ===
#>
#> index min max mean median sd q05 q25 q75 q95 na_pct
#> GNDVI -0.7031 0.8545 0.2293 0.2542 0.521 -0.5835 -0.3262 0.757 0.8353 1
#> total_cells
#> 100You can stack all four indices together:
veg_stack <- geo_indices(img, c("NDVI", "SAVI", "EVI", "GNDVI"))
index_summary(veg_stack)
#>
#> === GeoIndexR Spectral Summary ===
#>
#> index min max mean median sd q05 q25 q75 q95 na_pct
#> NDVI -0.5209 0.9187 0.3202 0.1316 0.4690 -0.3344 -0.0603 0.8614 0.9016 1
#> SAVI -0.1091 0.8736 0.3170 0.0809 0.3754 -0.0558 -0.0110 0.7527 0.8439 1
#> EVI -0.1018 1.1667 0.3826 0.0942 0.4590 -0.0597 -0.0148 0.9091 1.0591 1
#> GNDVI -0.7031 0.8545 0.2293 0.2542 0.5210 -0.5835 -0.3262 0.7570 0.8353 1
#> total_cells
#> 100
#> 100
#> 100
#> 100