Showing results for 
Search instead for 
Do you mean 

Landsat 8 Top of Atmosphere Reflectance Conversion

by Technical Evangelist on ‎05-05-2016 08:22 AM - edited on ‎02-24-2020 03:26 AM by Community Manager (14,433 Views)


Download model




This model implements the formulas published by the USGS for converting the quantized and calibrated scaled Digital Numbers (DN) representing multispectral image data acquired by Landsat 8 Operational Land Imager (OLI, bands 1 to 9)  to Top of Atmosphere (ToA) Reflectance. 


The conversion formulas require values stored in the metadata for each image (usually an ancillary file with a name such as <image>.met, or <image>_MTL.txt).


The published formula for TOA Reflectance is: 


R l' = MlQcal + Ar



Rl' = TOA planetary reflectance without correction for solar angle.

Ml = Band-specific multiplicative rescaling factor from the metadata (REFLECTANCE_MULT_BAND_x, where x is the band number)

Qcal = Quantized and calibrated standard product pixel values (DN)

Ar = Band-specific additive rescaling factor from the metadata (REFLECTANCE_ADD_BAND_x, where x is the band number)


TOA reflectance can be corrected for the sun angle by:


Rl = Rl' / cos(solar zenith angle) OR Rl = rl' / sin(solar elevation angle) 



Rl = TOA planetary reflectance

Rl' = product of TOA reflectance without correction

Solar Elevation angle = local sun elevation from the metadata (SUN_ELEVATION)  NOTE: SUN_ELEVATION is unique to each Landsat 8 Scene

Solar Zenith angle = 90 - Solar Elevation angle




Input parameters:


Landsat 8 MSI: Select the input Landsat 8 image to be converted to reflectance. This could be a multispectral image representing bands 1 to 7, a single band Panchromatic image (band 8), a single band Cirrus image (band 9) or a combination thereof (including individual band files). It should not be the Thermal bands (Bands 10 and 11) or the QA band.

Landsat 8 Reflectance: Name of the output image file containing the ToA Reflectance values. This will be a 32-bit Float data type.

REFLECTANCE_MULT_BAND: Enter a single Reflectance Multiplier correction value to be applied to every input band. The default is 0.00002, but the <image>_MTL.txt metadata file should be reviewed to determine the correct value.

REFLECTANCE_ADD_BAND: Enter a single Reflectance Additive correction value to be applied to every input band. The default is -0.1, but the <image>_MTL.txt metadata file should be reviewed to determine the correct value.

SUN_ELEVATION: Enter a single value for the Sun's elevation (in degrees) above the horizon at the time of image acquisition. This value is unique for every Landsat 8 image and can be determined by finding the SUN_ELEVATION keyword in the input image's <image>_MTL.txt metadata file.






Most Landsat 8 imagery provided by the USGS download site appears to have already been corrected to ToA Reflectance, but has subsequently had a consistent scale and offset applied to every band to fully utilize an unsigned 16-bit integer data range. Consequently the Reflectance_Mult_Band_n isusually 0.00002 and the Reflectance_Add_Band_n is usually -0.1 for every band in the image. So the current incarnation of the model both defaults to those values, and only has a single input to apply to every band.


If a review of the <image>_MTL.txt metadata file indicates that these values actually vary per band, you would need to either:


  1. Process each band individually, or
  2. Modify the model to prompt for inputs for all the Multiplier and Additive values, as suggested in the screenshot below (with a similar Table for the Additives), or
  3. Upgrade to ERDAS IMAGINE 2016 and make use of the model which will be posted separately which uses a Python script to parse the metadata file, create a Dictionary of metadata values (including Sun Elevation) and automatically correct all bands based on those values. See the article entitled Using the Python Script operator to ingest sensor metadata


 How to modify the model for varying Multipliers and Additives:




by Technical Evangelist
on ‎12-21-2018 11:49 AM

Does your data include a background value and you haven't set that to NoData prior to running the model? The fact that the Mode is the Min value as well suggests this. 


And yes, it's entirely possible that the corrections that were applied to the data prior to it being delivered to you scale to a reflectance range that's outside 0 - 1. A Mean of 0.262 and a SD of 0.286 seems plausible.


Did you check the *_mtl.txt header file to validate the input values?


If you data is Landsat 8 you could check out the slightly more automated TOA correction I integrated into this model:



‎12-22-2018 11:10 AM - edited ‎12-22-2018 11:17 AM


first thanks for your interest, but i dont understand how i can ignore background values before applying the model.

i will attach meta data to be sure about values , and your model applied for erdas 16 but i have only erdas 15

did i can use image with these values ?.




by Technical Evangelist
on ‎01-07-2019 12:46 PM

Hi mando,


Easiest way would be to add a Set to NoData operator into the spatial model (after the Raster Input) and use it to set an appropriate value to be considered NoData. 


Or you could use the Image Metadata (ImageInfo) utility to set a NoData value on individual datasets (Edit menu > Set / Clear NoData Value...). 




‎04-16-2020 05:34 AM - edited ‎04-16-2020 05:35 AM

hello Sir, 


Thank you for your model. But I have the same problem as mando. Even if I add a Set to NoData operator into the spatial model, it keeps showing up negative values but only for band 6 and 7. What should I do?  



by Technical Evangelist
on ‎04-16-2020 09:03 AM

Correction to TOA Reflectance is not necessarily an exact science. The correction can end up with negative values.


But first, check that you have defined your inputs correctly based on the input image. 


If those are all correct you may wish to consider extending the Spatial Model to truncate at 0.



Ian Anderson
Chief Product Owner, Desktop Remote Sensing
Hexagon Geospatial