4

I am working with images from landsat8. I need to know If I can calculate correctly NDVI using digital numbers instead Surface Reflectance values or TOA reflectance

equation

enter image description here

result

enter image description here

2
  • 1
    Please define "...digital numbers..."
    – Stu Smith
    Commented Dec 29, 2021 at 20:47
  • 1
    You need to use surface reflectance when performing analyses across time periods or when using multiple images.
    – Aaron
    Commented Dec 29, 2021 at 21:08

3 Answers 3

2

Use Surface Reflectance whenever you can.

Regarding the Top Of Atmosphere reflectance, in my opinion it is a mathematical error to believe that a equally displacement and scaling of both bands Digital Numbers will not reflect a displacement in the proportion between the subtraction and addition of them.

Therefore, the index value will not be the same calculated from Level 1 Digital Numbers as from TOA reflectances. In any case, it can be argued that it will only have a displacement in absolute terms. But we usually use NDVI values to classify certain conditions. If you shift the classification values in the same way that the index value shifts due to conversion to TOA reflectances, there would be no problem.

Regarding the Surface Reflectance, it is considered important only to compare different images. However, the algorithm from which the SR is derived takes into account the water vapor present in the atmosphere, and the water vapor does not have the same effect on both bands.

Since access to Level 2 Surface Reflectance products is open, I don't see a reason not to use them.

2

As well pointed out @Aaron, you need to use surface reflectance when performing analyses across time periods or when using multiple images. This is necessary because TOA reflectances are calculated with a correction for the sun angle as is referred by USGS document here. Values of REFLECTANCE_MULT_BAND_x and REFLECTANCE_ADD_BAND_x remain constant for individual bands (B4 and B5 bands for NDVI calculations) but, SUN_ELEVATION is clearly affected by time acquisition and, obviously, by location.

For corroboration purpose, it can be used following GEE script for easily retrieving these metadata values for B4 and B5 bands.

var pt1 = ee.Geometry.Point(6.746, 46.529);
var pt2 = ee.Geometry.Point(20.105, 44.409);

var dataset1 = ee.ImageCollection('LANDSAT/LC08/C01/T1')
                  .filterDate('2017-01-01', '2017-12-31')
                  .filterMetadata('WRS_PATH', 'equals', 195)
                  .filterBounds(pt1);

print(dataset1.first());

var dataset1_lst = dataset1.toList(dataset1.size());

print("size", dataset1.size());

var dataset2 = ee.ImageCollection('LANDSAT/LC08/C01/T1')
                  .filterDate('2017-01-01', '2017-12-31')
                  .filterMetadata('WRS_PATH', 'equals', 186)
                  .filterBounds(pt2);

var dataset2_lst = dataset2.toList(dataset2.size());

print(dataset2.first());

print("size", dataset2.size());

//RED: B4, NIR: B5

function properties (ele) {
  
  return [ee.Image(ele).get('REFLECTANCE_MULT_BAND_4'), 
          ee.Image(ele).get('REFLECTANCE_MULT_BAND_5'),
          ee.Image(ele).get('REFLECTANCE_ADD_BAND_4'),
          ee.Image(ele).get('REFLECTANCE_ADD_BAND_5'),
          ee.Image(ele).get('SUN_ELEVATION')];
  
}

var properties1 = dataset1_lst.map(properties);

print(properties1);

var properties2 = dataset2_lst.map(properties);

print(properties2);

Map.setCenter(14.305, 45.413, 6);

var images1 = dataset1.select(['B4', 'B3', 'B2']);

Map.addLayer(images1, {}, 'images1');

var images2 = dataset2.select(['B4', 'B3', 'B2']);

Map.addLayer(images2, {}, 'images1');

Results for same location can be observed in following image. 'SUN_ELEVATION' values (red rectangles) depend of time acquisition.

enter image description here

Results for different locations can be observed as follows. 'SUN_ELEVATION' values (red rectangles) also depend of path, row images.

enter image description here

2

Both of the answers (@xunilk and @GabrielDeLuca) make valid points about why reflectance is more appropriate as an input to deriving NDVI or other indices from multispectral data, but I wanted to add something fundamental that may be missing.

Reflectance is a property of the material being imaged, whereas the raw digital numbers are intensity measurements taken at the sensor (radiance). When raw intensity is converted to reflectance (radiometric correction), the idea is to account for atmospheric and illumination effects (among others) which differ based on the position of the sun and sensor relative to the object of interest. Raw intensity measurements are subject to all of these effects, meaning the same sensor can record very different values for the same scene on repeat observations under different conditions.

Converting raw digital numbers to reflectance (normally) involves using objects of known reflectance in the scene to infer the reflectance of the object(s) of interest, which means that (theoretically) repeat observations will result in similar reflectance values for the same material, regardless of the conditions.

A final point, different sensor arrays can have different bit depths, meaning that the possible range of values for a given band is variable depending on the resolution of the sensor array. For example, an 8-bit sensor is capable of measuring 256 possible values for each pixel, while 16 bit sensors can measure 65,535. Because reflectance is expressed as a percentage, radiometric correction of imagery taken from different sensors also serves to normalize the values of your data before computing NDVI or other indices.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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