# Computing NDVI in ArcMap from Landsat 8 “Analysis-Ready” Surface and TOA Reflectance Products

The internet is full of various contradictory advice on corrections one can make to get NDVI computed from Landsat 8 to fall between -1 and 1.

This is for instructional purposes, so I hope to use the Analysis-Ready Data products (surface and TOA reflectance), which have already been atmosphere- and sun-angle-corrected.

I assume the surface reflectance product would be the best for NDVI, but the values I get `(raster calculator: 1.0*("NIR"-"red")/("NIR"+"red"))` range from -1.14 to -0.6, which seems unrealistic. The TOA product gives slightly better numbers, -1.1 to 1.38, but I still don't know why we're exceeding the -1 to 1 range. Any ideas?

The values on the SR product range from -522 to 10133 (red) and -47 to 10558 (NIR) and on the TOA product they are more positive: 216 to 9775 (red)and 66 to 10600 (NIR).

• On further inspection of the TOA-produced output, there are only one or two pixels outside the range. I'd still like to learn what is wrong with the SR-derived one. – J Kelly Aug 15 '18 at 13:43
• Check this out gis.stackexchange.com/questions/242665/…. Pay attention to @Kazuhito 's comment. – Amadeus Jun 10 '19 at 22:09

In theory, the surface reflectance values are always positive (the reflectance is the proportion of the sun light that goes back to the sensor, therefore it is a value between 0 and 1 (rescaled between 0 and 10000 in this case). Radiometric calibration sometimes fails to yield a value in the expected range because of some simplified hypothesis ("ageing" of the calibration parameters, unknown optical depth of the atmosphere at the time of acquisition, simplification of the atmosphere as a single layer...). My advice in order to compute valid normalized indices is to convert negative values to zero, because negative reflectances are physically impossible. However, this is not because the atmospheric correction model is not perfect that it should be avoided, so I would continue to use the surface reflectance. Alternatively, you could work from top of atmosphere reflectances with an indx that is designed to be more robust to atmospheric conditions (e.g. ARVI), but those indices are also empirically tuned so there is no miracle.

that being said, when the reflectane values are positive, NDVI is by design always between -1 and 1. Values out of this range could be due to computation issues, such as exceeding 255 when adding two 8-bit integers. This risk can be mitigated by working on float values as input. Use the "identify" tool to test a few "out of range" values manually, because your results for SR-based NDVI are clearly inconsistent.

``````(float("NIR")-float("red"))/(float("NIR")+float("red"))
``````

As you said you need to do radiometric calibration and conversion to TOA first:

a) Convert the DN values to TOA reflectance

b) correct for sun angle

This is I think a trustworthy source which explains how to in detail: https://yceo.yale.edu/how-convert-landsat-dns-top-atmosphere-toa-reflectance

Here you'd also find ready to use (TOA corrected and also NDVI) Landsat 8 products) https://landsat.usgs.gov/landsat-surface-reflectance-data-products (The data Access is currently down due to Server maintance, but it cant take long till its active again..)

• I know this is true (and have done it often) for the lower-level products, but I am using ready-to-use reflectance corrected products. These are not DN radiance values. At least, that is how I interpret the descriptive materials accompanying the ARD data. I would like my students to learn to compute indices before I put them through the conversion and correction process. – J Kelly Aug 15 '18 at 18:03