New satellites added to SMAC atmospheric correction


New coefficients have been added to the CESBIO repository for SMAC coefficients. The new sensors taken into account are :

  • Landsat 8, RapidEye
  • Quickbird, Worldview2, Ikonos
  • Pléiades1A (PHR1A)


The Simplified Model for Atmospheric Correction (SMAC) is the perfect model to perform easy, quick and not too dirty atmospheric corrections. It is based on very simple analytic formulas, based on the 5S model. The 49 coefficients of this model are fitted using a large number of radiative transfer simulations with the 6S model (the old historic version, not the recent vector version). This software is not very accurate (much less than MACCS), and it requires in-situ measurements for the aerosol optical thickness, and weather analyses for ozone and water vapour. If these data are available,  in most cases, its accuracy is within 2 and 3 percent, if we do not account for adjacency effects and slope effects, and it may be worse for large viewing and solar angles (above 70°) or within strong absorption bands.


SMAC is very easy to use:

#read the 49 coefficients in smac_soefs table
nom_smac ='COEFS/coef_FORMOSAT2_B1_CONT.dat'
#read the TOA reflectance image in r_toa variable
#depends on the file format
#read the angle values in the image metadata
# compute pressure at pixel altitude
#find the values of AOT, UO3, UH2O
#compute the atmospheric correction

where :

  • theta_s, phi_s are the solar zenith and azimuth angles
  • theta_v, phi_v are the viewing zenith and azimuth angles
  • AOT is the aerosol optical thickness at 550 nm which may be obtained from an Aeronet stations, or guessed, or equal to 0.1 for a really dirty atmospheric correction.
  • UO3 is the ozone content in cm.atm (0.3 is OK)
  • UH2O is the water vapour integrated content in kg/m². When I do quick and dirty atmospheric correction, I often use a value equal to 3, but I do not process spectral bands with strong water vapour absorption bands.

[1] Rahman, H., & Dedieu, G. (1994). SMAC: a simplified method for the atmospheric correction of satellite measurements in the solar spectrum. REMOTE SENSING, 15(1), 123-143.
"[2]"Tanré, D., Deroo, C., Duhaut, P., Herman, M., Morcrette, J. J., Perbos, J., & Deschamps, P. Y. (1990). Technical note Description of a computer code to simulate the satellite signal in the solar spectrum: the 5S code. International Journal of Remote Sensing, 11(4), 659-668.

"[3]"Vermote, E. F., Tanré, D., Deuze, J. L., Herman, M., & Morcette, J. J. (1997). Second simulation of the satellite signal in the solar spectrum, 6S: An overview. Geoscience and Remote Sensing, IEEE Transactions on, 35(3), 675-686.>
"[4]"Kotchenova, S. Y., Vermote, E. F., Matarrese, R., & Klemm Jr, F. J. (2006). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part I: Path radiance. Applied Optics, 45(26), 6762-6774.
"[5]"Kotchenova, S. Y., & Vermote, E. F. (2007). Validation of a vector version of the 6S radiative transfer code for atmospheric correction of satellite data. Part II. Homogeneous Lambertian and anisotropic surfaces. Applied Optics, 46(20), 4455-4464.


Posted under: Code, Corrections (geometry, atmosphere, clouds), In English, Landsat

Tagged as:


  • Ana on 28/01/2014 at 15:25 said:


    Thanks for sharing the SMAC code in Python. It is great. I have noticed two mistakes in the code:
    line 215 if (cksi < -1 ) : should be if (cksi '



    • Olivier Hagolle on 29/01/2014 at 08:08 said:

      Thanks Ana,
      Worpress replaced some of the signs by their HTML equivalent, I thought I had corrected all of them. Now I hope it's done.

  • Hans Roelofsen on 11/03/2014 at 08:36 said:


    I'd like to download the new satellite SMAC coefficients, but the link mentioned above appears not to work. Clicking "" leads to a message: 'Désolé, vous n'avez pas le droit d'accéder à ce fichier'

    Could you indicate where I can find the new coefficients? Merci d'avance!

    • Olivier Hagolle on 11/03/2014 at 09:11 said:

      Thanks for your comment. The link has been repaired. You should be able to download now.

  • Marcel on 15/04/2014 at 18:28 said:

    Encuentro una inconsistencia en el código C, en la línea:
    if( (uh2o > 0.) || ( uo3 > 0.) )
    to3 = exp ( (ca->ao3) * pow ( (uo3 *m) , (ca->no3) ) ) ;
    th2o = exp ( (ca->ah2o) * pow ( (uh2o*m) , (ca->nh2o) ) ) ;
    to2 = exp ( (ca->ao2) * pow ( (uo2 *m) , (ca->no2) ) ) ;
    tco2 = exp ( (ca->aco2) * pow ( (uco2*m) , (ca->nco2) ) ) ;
    tch4 = exp ( (ca->ach4) * pow ( (uch4*m) , (ca->nch4) ) ) ;
    tno2 = exp ( (ca->ano2) * pow ( (uno2*m) , (ca->nno2) ) ) ;
    tco = exp ( (ca->aco) * pow ( (uco*m) , (ca->nco) ) ) ;

    Tno2 y tco, no se definen en ninguna parte antes ?.
    En Python solo es un comentario esta condición
    #/*------: 4) if uh2o <= 0 and uo3 <=0 no gaseous absorption is computed
    to3 = exp ( (ao3) * ( (uo3 *m) ** (no3) ) )
    th2o = exp ( (ah2o) * ( (uh2o*m) ** (nh2o) ) )
    to2 = exp ( (ao2) * ( (uo2 *m) ** (no2) ) )
    tco2 = exp ( (aco2) * ( (uco2*m) ** (nco2) ) )
    tch4 = exp ( (ach4) * ( (uch4*m) ** (nch4) ) )
    tno2 = exp ( (ano2) * ( (uno2*m) ** (nno2) ) )
    tco = exp ( (aco) * ( (uco *m) ** (nco) ) )
    tg = th2o * to3 * to2 * tco2 * tch4 * tco * tno2

    Me pueden ayudar a entender.

    • Olivier Hagolle on 18/04/2014 at 07:55 said:

      No estoy responsable del código C, y no lo uso, no puedo ayudarte
      La posibilidad de anular la corrección de absorción no me parece necesaria, por este razón, se ha vuelto a un comentario

  • chintya on 19/06/2014 at 05:58 said:

    where can i find the atmospheric correction data (such as optical thickness, water vapour,ozone content, surface temp.) and how to make the sun/satellite angle data map from Landsat8 image?

    sorry i do not understand use this SMAC

    • Olivier Hagolle on 19/06/2014 at 06:09 said:

      Hi Chintya
      Weather agencies often provide water vapour, zone (surface temperature is not needed in SMAC). For the aerosols it is much more complicated, there are some local measurements, from the AERONET network, some estimates from satellites (MODIS), or you may try to use your images to estimate the aerosol thickness.

      But atmospheric correction is surely not straightforward and cannot be solved in a few day's work

  • Javier on 16/07/2014 at 16:18 said:

    I am using WorldView-2 images for coastal applications and I don't know If you could provide me a marine aerosol coefficients for this satellite.
    Best regards ...

    • Olivier Hagolle on 26/07/2014 at 14:14 said:

      I am sorry Javier, it takes a lot of time to compute coefficients. We would like to release the code for producing coefficients, so that anyone can produce hos own coefficients, but we did not get approval from CNES yet.

  • Javier Martín on 28/07/2014 at 20:13 said:

    I would like to know how can I obtain the % of diffuse and direct irradiance using SMAC.
    Best regards ..

  • Javier Martín on 30/09/2014 at 17:50 said:

    please can anybody help me with the diffuse and direct irradiance in SMAC.
    Thanks and best regards ...

    • Olivier Hagolle on 30/09/2014 at 20:03 said:

      Hola Javier,
      I am afraid SMAC does not allow to separate diffuse and direct irradiances. It only computes total transmission and not its direct and diffuse terms. See the lines ttetas and ttetav in :

      To do that, you'd better use 6S This code is more difficult to use but you may access all its parameters. By the way, SMAC coefficients are computed using 6S.

      un saludo,

  • sochi M on 09/12/2014 at 16:14 said:

    Hi Oliver,
    Thank you very much for sharing the SMAC code. However, I have a question regarding any possible typos in the script which may have been due to the html conversion.

    How can I make sure that the downloaded code is not producing any unintentional errors? A validation dataset with expected outputs would have been very useful to address this issue. Also, is there a way to download the code as a text file?

    Thanks a lot!

  • Ruben Remelgado on 24/03/2015 at 16:52 said:

    Dear Olivier,

    Thank you for making the work and, above all, for making the SMAC freely available. Regarding its use, I have a small doubt that I would like to run through you:

    Can you give me a short explanation of the meaning of the "altitude" variable in the workflow and how is this depends on the sensor?

    Thanks a lot.

    Best wishes,
    Ruben Remelgado

    • Olivier Hagolle on 26/03/2015 at 10:14 said:

      Dear Ruben,
      It is the altitude of the observed target. It does not depend on he sensor.
      The higher in altitude, the thinner the atmosphere. The altitude drives the pressure, which in turns drives the molecular scattering optical thickness.
      The altitude has no impact on the Aerosol optical thickness, as the code assumes that you know the aerosol optical thickness above each pixel (which is quite hard, I know).
      I hope it answers your question.

      Best regards,

  • Gaurav on 17/05/2017 at 13:46 said:

    Dear Olivier, Am still unable to understand how to use SMAC.
    After applying coefficients and running the python code i get some value now how i can used that value for atmospheric correction.does i have to apply band pixel data to python code ...

    • Olivier Hagolle on 18/05/2017 at 15:19 said:

      Hi @gaurav
      I am not sure to understand what you did exactly.
      Could you please provide the commands you used ?

  • Jay on 11/08/2017 at 06:04 said:

    Dear Olivier , I'm not able to understand of to use smac. i have appiled different cof dat file i.e Coef_S2A_CONT_B11.dat and after that i get r_toa, r_surf,r_toa2(Surface reflectance,TOA reflectance) i don't know how to use this data for atm correction.

  • Didier Ramon on 25/09/2017 at 08:56 said:

    Dear Olivier
    This page shows an example with uh2O expressed in kg/m2. You say:
    "UH2O is the water vapour integrated content in kg/m². When I do quick and dirty atmospheric correction, I often use a value equal to 3, but I do not process spectral bands with strong water vapour absorption bands."

    However the short documentation of SMAC indicates an uh2O input in g/cm2. This is confusing

    • Olivier Hagolle on 26/09/2017 at 14:48 said:

      Merci Didier,
      you are right, SMAC works in g/cm2, I corrected the text above.

Leave a Reply

Your email address will not be published. Required fields are marked *


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>