I am using temporal datasets from Landsat 5, 7 and 8. Since I have many datasets I would like to include the conversion from ToA(top of atmosphere) to BoA(bottom of atmosphere) reflectance into a script using Arcpy.

Is there an equation to convert the ToA reflectance to BoA reflectance? I have checked the Landsat data users handbook but I could not find any formula:

  • ToA and surface reflectance are not linearly related, so there is no one size fit all method. It would depend on what level of error is acceptable, source of error, etc. etc. I would highly recommend that if your study area is in US, use ARD data. Unless you are remote sensing expert or consulting one who is looking at each image, ARD dataset would provide superior results. – Martan Aug 7 '19 at 10:59
  • Thank you for your answer. No, the area of interest is not in US. I calculate various indices of a water body. From the DN I have converted them to Radiance and then to ToA. You say that it is not needed the ToA reflectance to be converted first before I convert to the surface reflectance?Why not use both of them? – gispaew Aug 7 '19 at 22:21
  • I am not saying you don't need to convert from DN to ToA. What I am saying is since DN, Radiance and ToA are linearly related, converting between them is straightforward. However, ToA (or DN/Radiance) do not have straightforward relationship with surface reflectance (SR). If you think about it, the difference between ToA and SR is noise due to multitude of factors. The choice of algorithm to correct for SR would depend on what these factors are, what is land surface type, and what level of accuracy you desire. – Martan Aug 8 '19 at 4:42
  • That being said, this does not stop researchers, especially from applied fields from randomly applying tools commonly found in popular image processing software (FLAASH, DOS, etc). However there is fairly popular paper describing how these tools induce more error than they correct for if the setting and reasoning for them are not investigated. My suggestion would be, if you want to do temporal analysis, stick to this. – Martan Aug 8 '19 at 4:47
  • @Martan I will calculate different indices for inland waters and will be a temporal analysis. Regarding the apparent reflectance function is for the ToA and not SR though. Shall I then to stick to the ToA reflectance in order to avoid possible errors? – gispaew Sep 17 '19 at 19:47

The relationship between TOA reflectance to BoA reflectance is not linear but can be well approximated by second-order polynomials. You can check py6s, try some cases, and fit the second order polynomials then it is possible to find the simplified equation to fit into into Arcpy.


As they mentioned, you will need some kind of atmospheric or radiative tranfer model to convert to surface reflectance. Try looking into py6s. Python libraries are available already such as this one: https://py6s.readthedocs.io/en/latest/installation.html

  • For converting the ToA to surface reflectance across an image with py6s is time consuming therefore I will not be using it because in my case I have temporal dataset to work with and it will take ages. – gispaew Sep 24 '19 at 7:20

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.