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.4909 0.9281 0.3072 0.1332 0.4884 -0.3232 -0.0894 0.8694 0.9125 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.0914 0.8841 0.3212 0.1033 0.3829 -0.0608 -0.0241 0.7643 0.8453 1
#> SAVI -0.0838 0.8648 0.3067 0.0950 0.3635 -0.0505 -0.0174 0.7226 0.8211 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.097 1.2165 0.3913 0.1344 0.4744 -0.0705 -0.0315 0.91 1.0884 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.7638 0.8609 0.2173 0.2821 0.5448 -0.6301 -0.3906 0.7573 0.8295 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.4909 0.9281 0.3072 0.1332 0.4884 -0.3232 -0.0894 0.8694 0.9125 1
#> SAVI -0.0914 0.8841 0.3212 0.1033 0.3829 -0.0608 -0.0241 0.7643 0.8453 1
#> EVI -0.0970 1.2165 0.3913 0.1344 0.4744 -0.0705 -0.0315 0.9100 1.0884 1
#> GNDVI -0.7638 0.8609 0.2173 0.2821 0.5448 -0.6301 -0.3906 0.7573 0.8295 1
#> total_cells
#> 100
#> 100
#> 100
#> 100