I am trying to calculate the Enhanced Vegetation Index using Landsat surface reflectance data. The formula for EVI using standard constants is:

EVI = 2.5 * ((NIR – Red) / (NIR + 6 * Red – 7.5 * Blue + 1))

Landsat Collection 1, Level 2 surface reflectance data is scaled from 0-10,000 upon delivery, but it is often rescaled from 0-1 for analysis. A simple analysis reveals that EVI is sensitive to the scale factor of the input data, so it is important to scale the input data correctly when calculating EVI.

A simple comparison in R:

#Input data scaled from 0-10,000

landsat_20070621 <- brick("./landsat_20070621.tif")
evi_20070621 <- 2.5 * ((landsat_20070621[[4]] - landsat_20070621[[3]]) / (landsat_20070621[[4]] + 6 * landsat_20070621[[3]] - 7.5 * landsat_20070621[[1]] + 1))

     Min.   1st Qu.    Median      Mean   3rd Qu.      Max.      NA's 
-327.5000    0.5154    0.8160    0.8641    1.1570 1240.0000       385 

#Input data scaled from 0-1

landsat_rescale <- landsat_20070621/10000
evi_rescale <- 2.5 * ((landsat_rescale[[4]] - landsat_rescale[[3]]) / (landsat_rescale[[4]] + 6 * landsat_rescale[[3]] - 7.5 * landsat_rescale[[1]] + 1))

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-0.1074  0.1414  0.1926  0.2047  0.2526  0.9126     385 

Many sources suggest that EVI values are inherently constrained between 0-1, although this is not necessarily the case because it does not have the same normalization structure as a normalized difference index (e.g., NDVI). Nonetheless, Huete et al. (2002) report values in the 0-1 range.

Comparing the values reported in literature to the values above, it seems like maybe an input scale factor of 0-1 is correct, although I cannot find this in writing anywhere. Is there a definitive source indicating the appropriate input scale factor for calculating EVI?


In the case of DN's (Digital Numbers) "rescaling" is not a simple transformation but, represents converting DN's to reflectance, representing a 0-1 floating point. Take a look at the landsat handbook or here for the equations for converting DN to reflectance.

For reflectance that is stored in a 16 bit range, you apply a scaling factor to return the correct floating point (0-1) values. For collection-1 (signed 16-bit) sf=0.0001 and for collection-2 (unsigned 16-bit) sf=0.0000275 + -0.2 With collection-1 it really is just a row standardization x/10000 or x*0.0001 based on the maximum expected range but, collection-2 actually has a pixel offset that needs to be correct for.

As stated in most of the associated literature and the MODIS product description, the assumption of the EVI is that spectral input represents surface reflectance thus, the 0-1 data range. An DN input is not appropriate thus, invalidating the standard gain (G), soil adjustment (L) and, aerosol resistance (C1, C2) factors.

  • Thanks, the second half answers it. The Landsat Collection 1, Level 2 Surface Reflectance products have a valid range of 0-10,000 when downloaded from Earth Explorer and need to be rescaled by the user to get a 0-1 float. (Collection 2 data is coded differently.) May 5 at 20:35
  • 1
    The USGS is making it more and more confusing with how the same products are distributed in different collections so, thanks for point this out. I normally access unprocessed data and apply my own workflow programmatically. I would recommend checking out the availability of ARD which is a completely processed, temporal harmonized landsat collection. It is pretty amazing if you are performing any type of analysis through time. May 5 at 20:49
  • @Christopher I edited my answer to correct my erroneous statement regarding the bit depth of reflectance data and to point out the scaling factors, which you applied correctly. May 5 at 21:56
  • Thanks for the thorough answer. I edited the question to specify Collection 1 data. May 6 at 0:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.