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.5508 0.9233 0.2963 0.1161 0.4884 -0.3796 -0.0787 0.8546 0.8972 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.1194 0.8802 0.3094 0.0933 0.3727 -0.0594 -0.0209 0.7361 0.8293 1
#> SAVI -0.1091 0.8601 0.2939 0.0863 0.3518 -0.0430 -0.0148 0.6854 0.8019 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.1012 1.1634 0.373 0.089 0.457 -0.0821 -0.0267 0.8837 1.0352 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.7652 0.8373 0.2001 0.2426 0.5451 -0.6222 -0.4403 0.7482 0.7976 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.5508 0.9233 0.2963 0.1161 0.4884 -0.3796 -0.0787 0.8546 0.8972 1
#> SAVI -0.1194 0.8802 0.3094 0.0933 0.3727 -0.0594 -0.0209 0.7361 0.8293 1
#> EVI -0.1012 1.1634 0.3730 0.0890 0.4570 -0.0821 -0.0267 0.8837 1.0352 1
#> GNDVI -0.7652 0.8373 0.2001 0.2426 0.5451 -0.6222 -0.4403 0.7482 0.7976 1
#> total_cells
#> 100
#> 100
#> 100
#> 100