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 (12,332 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:




on ‎12-26-2016 07:34 PM

Dear Ian, 


I have running this TOA reflectance model. But the given result is strange, It came out like this :



i change the background color to blue, to see whether the result image is black, but it's not. It's like the main image is transparent. When i did in the other bands, the results is the same. From the statistics file, it shows min=0, max=1, mean=0, st dev=0,013. What's wrong with the results? I'm not made any changes on your modeler and just directly run the modeler. 




by Technical Evangelist
‎01-04-2017 05:31 AM - edited ‎01-05-2017 02:23 PM

Hi Amalia,


Couple of possibilities:


  1. The model is set to output Float 32-bit data as provided (see screenshot above indicating f32 on the Raster Output operator), because Reflectance is usuallly in the range 0 to 1. But you appear to have created an Unsigned 16-bit output, which will have truncated the floating point values to integers (mainly 0s and 1s). Change the model back to f32 and see what the output looks like then.

  2. Did you check the *_mtl.txt header to make sure you are using the correct values for Reflectance_Mult_Band and  Reflectance_Add_Band?








on ‎06-08-2017 11:36 AM

Hello Sir,


The model you made looks very fine. I need more detailed information of the whole model. In the formulas there is not pi, while in the model you multiply pi as a scalar input. I would really appreciate more details of each step the model take and how did you developed. I really want to learn this. is my e-mail. You may send me more information or recommned me some literature on the relevant TOA reflectance.


Thank you,

by Technical Evangelist
on ‎06-09-2017 06:28 AM

Hi Wali,


If you check the Help for the Sin operator you'll see that it's input is expected to be in Radians. Since the Sun Elevation is usually provided in Degrees, the degrees value must first be converted to Radians. Hence multiplying by Pi and dividing by 180 before passing the value to the Sin operator. 


Hope this answers your question?





on ‎06-11-2017 10:22 PM



I understand how the model works. It is very good indeed. I used the model for sevaral images. I checked the quality of the images, it is perfect. I do nto see any problems. 


I wanted to calculate NDVI from the TOA reflectance images which is the output of the model. I used B5-B4/B5+B4. When I looked at the NDVI_toa, the results are not okay. it look just one color. I saved the NDVI files as Float Single. 


I would really appreciate, if someone could provide me with some instructions. If you need more informations, allo me know. I will provide that.




Emal Wali