MACCS (Multi-sensor Atmospheric Correction and Cloud Screening) is a level 2A processor, which detects the clouds and their shadows, and estimates aerosol optical thickness (AOT), water vapour and corrects for the atmospheric effects. The processor was jointly developed by CESBIO and CNES. CESBIO developed the methods and a prototype, while CNES funded the operational version of the processor, with a strong support from CESBIO for the validation. More recently CNES+CESBIO and DLR joined their efforts to develop a joint processor named MAJA, for MACCS-ATCOR Joint Algorithm. MAJA is an evolution  of MACCS, in which a couple of methods inspired by ATCOR software have been added. MAJA V1_0 could have been called MACCS V6.0, but we wanted to celebrate the association of both entities with a new name.

MAJA’s distinctive feature is its dedication to high resolution time series and its wide use of multi-temporal methods. For this reason, MAJA can only be applied to the optical missions which observe the earth under constant viewing angles. It is the case for Sentinel-2, VENµS, LANDSAT and Trishna satellites.

How to access MAJA code and products ?

There are several ways to acces to MAJA itself or to its products:

  1. MAJA runs at CNES within the Muscate ground segment of Theia (data are available here). It is used there to process Sentinel-2, LANDSAT and VENµS data over seleted zones.
  2. Since version 4.2, MAJA is an open source software, released under the permissive Apache licence 2.0
  3. MAJA is also freely available in binary versionfor a few linux distributions. MAJA is a bit complicated to use, and requires memory, disk space and computer power., however, the last MAJA version has simplified the processing,  and, on CNES github platform, we are providing a tutorial to explain how to set it to work.
  4. MAJA also runs within PEPS, as an on-demand processor. Just select the granules you need, and submit the processing. This can be done either through the peps web interface, or through a command line interface. However, the infrastructure is limited to 10 processings in parallel. Processing whole continentts could take years…
  5. CAP Gemini is offering an on demand production service based on MUSCATE. Information on this service is available from the following document
  6. MAJA is also used in several other platforms or softwares, Sen2Agri, Sen4cap, DLR, EEA Snow&Ice, KERMAP, CODE-DE, …

A short description of MAJA

The following ATBD document provides a detailed description of the methods used in MAJA. But if you lack time, here is a much shorter description. MAJA is briefly described in the joined figure. The text below provides some information for the main boxes.

Atmajaspheric absorption

In the case of Sentinel-2 and Venµs, which include a water vapour channel at 940 nm (resp. 910nm) in a strong water vapour absorption band, a first step consists in estimating the atmospheric water vapour content. For the other satellites, weather analysis data can be used. After that, the processor can correct for the gaseous absorption using the SMAC model.

Composite imajage

The next steps deeply involve multi-temporal methods. Of course, to do that, a time series must be processed in chronological order. After each processing, a composite image is updated with with the unclouded pixels from the processed date. This composite image is used as a reference for the cloud detection and the AOT estimate.

The cloud majasks

Our cloud detection method is based on a large number of tests, the most efficient of which are :

  • a test based on the  cirrus band (at 1380 nm), available on Landsat 8 and Sentinel-2, which detects very well the high clouds (above 2000m)
  • a multi-temporal test, which detects a steep increase of the blue surface reflectance, which is the sign of presence of a cloud.
  • and finally, to avoid over detections of clouds, for each potential detected by one of the previous tests, a last test measures the correlation of the pixel neighbourhood with the previous images. As it is unlikely that two different clouds at the same location on successive dates have the same shape, if a large correlation is observed, the pixel is finally not declared as a cloud.

Having detected the clouds, we can proceed with the detection of  cloud shadows, water, and snow.

Aerosol optical thickness estimajate

The aerosol optical thickness (AOT) estimate combines several criteria in the computation of a global cost function, which is then inverted using non linear least mean squares inversion.

  • A multi-temporal criterion : after atmospheric correction, two successive observations of the same neighbourhood should provide nearly the same surface reflectances. The squared residuals after atmospheric correction are inserted in the cost function.
  • A multi-spectral criterion : above vegetation, and also above many bare soils, the surface reflectance in the blue is close to half the reflectance in the red. The squared residuals to this relation after atmospheric correction are also added to the cost function.
  • Optical Thickness minimum and maximum : AOT cannot be negative, and should not get higher that the one measured using the dark pixel method. When the AOT values are above maximum or under minimum, a high cost is added to the cost function.

The cost function evaluation is evaluated using neighbourhoods of coarse resolution pixels (240m), spreading over 2 kilometres. The obtained AOT images are then smoothed, the gaps are filled to obtain finally an AOT map with a 5 km resolution. The aerosol type is not estimated, it is a processing parameter which can be fixed per geographic region.

Atmajospheric correction

One of he quicklooks we produce with each image for visual verification, here for Chiapas site in Mexico, with the TOA reflectance, top left, the AOT and cloud mask, bottom left, surface reflectance after adjacency effect correction, top right, and the same with slope correction, bottom right.

Once the AOT is known, we can retrieve the surface reflectances. To do that, we are using look-up tables (LUT) which are computed using the SOS radiative transfer code (Successive Orders of Scattering, Lenoble, 2007). These LUT are also used in the AOT estimation. The surface reflectance of the cloud free pixels obtained there are used to update the composite image, which will be used for the processing of the next image in the time series. Before editing the output product, we still need to correct for two other points, already described in this blog : the adjacency effects and the effects of terrain slopes on the illumination.


MAJA development started in 2005, and the contributor list is starting to be quite long :

  • at CESBIO : H.Tromp, V. Debaecker, M. Huc, P.Gely, Bastien Rouquié, Jérôme Colin, O.Hagolle,
  • at CNES : B. Petrucci, D.Villa-Pascual, Camille Desjardins, Pierre Lassalle, Peter Kettig, Sophie Coustance
  • at DLR : A. Makarau, R.Richter, P. d’Angelo
  • at CS-SI : T.Feuvrier, C.Ruffel, A.Bricier, B. Esquis, J.Brossard
  • at CAP Gemini : M.Farges, G. Rochais, E.Durand
  • at Magellium : E. Hillairet
  • at Thales-IS : J.Staufer


For more details, we have published 4 papers about MAJA’s methods and validation :


20 thoughts on “MACCS/MAJA, how it works

  1. I saw multiple interesting presentations at ESA Living Planet 2016 mentioning MACCS. One thing I haven’t been able to figure out is that is MACCS software publicly available, or will it be? I found some mentions about MACCS and Orfeo Toolbox, is MACCS included there? I’m just looking for alternatives to Sen2Cor.Thanks, Lauri M

    1. Dear Lauri, thanks for your interest for MACCS. I was also at LPS, too bad we did not meet.Here is the situation with MACCS, a complex one in 3 points : CNES decided to distribute L2A products processed with MACCS rather than MACCS itself. A ground segment has been built and Sentinel-2 data will be processed and distributed using MACCS. But this ground segment will not produce the world world, and « only » about 6 M of km2. If you are lucky, your interest zone may lie within the selected zones which are displayed here . All the data above France are already distributed.ESA is considering producing L2A over the whole world and is currently selecting the method that will be implemented. MACCS is among the runners, and I think it has some chances, but however, I am sure it will at least take 18 months, before ESA can start the production.MACCS has been included in the Sen2Agri package you must have heard of at LPS (it was shown 3 times). The sen2Agri processor will be distributed (within the next 6 months), and it will include MACCS as a blackbox. A license will have to be signed saying that you intend to use MACCS within the Sen2Agri system. But if you are working in the Plymouth Marine lab, it is maybe not your main interest. By the way, MACCS was developed to work above lands and only extrapolates above water.I hope it clarifies the situation a little bitOlivier

        1. No yet, just freely available as a binary code for linux, even for commercial applications.

  2. Thanks Olivier for the detailed answer!Indeed there are couple of interesting zones within the 6 M km2 area. Yes, my current interest is in water, especially in small lakes. This in mind, could you open bit more the « MACCS only extrapolates above water » part? Does it mean that the data is not usable at all over water, or it’s just not so reliable?Thanks for the interesting blog,//Lauri

  3. MACCS does two things : it detects clouds and shadows, and estimates aerosol optical thickness (AOT) to use it for atmospheric correction. To do that, it relies on assumptions of stability with time of surface reflectance. This assumption is usually nor true above water. Clouds above water are usually correctly detected, but I did not find a way to detect the shadows. Regarding aerosols, we estimate the AOT above land, and then fill the gaps above water. This is working well above small water bodies, but not over ocean or very large lakes,far from the coast.Some users tested the output products along the coast and were happy with the results :Gernez, P.; Lafon, V.; Lerouxel, A.; Curti, C.; Lubac, B.; Cerisier, S.; Barillé, L. Toward Sentinel-2 High Resolution Remote Sensing of Suspended Particulate Matter in Very Turbid Waters: SPOT4 (Take5) Experiment in the Loire and Gironde Estuaries. Remote Sens. 2015, 7, 9507-9528.

  4. Bonjour Olivier,j’envisage de tester Sen2Agri pour un site dans les Antilles. Je suis interessé par le processeur « composite », pour éliminer un maximum de nuages dans cette zone très souvent couverte, et par le processeur « LAI retrieve ».Ma question est simple : est-il possible à votre avis de fournir au processeur « composite » directement des images S2 au niveau 1A, ce qui éviterait le cout de traitement de MACCS.Merci d’avance

    1. Bonjour Olivier,\neffectivement, MUSCATE a choisi un format différent du format de sortie standard de MAJA, alors que Sen2Agri a conservé ce format. Il n’est donc pas possible d’économiser du temps en récupérant les produits de MUSCATE. J’ai regretté la décision de MUSCATE qui nous pose aujourd’hui bien des soucis, mais elle avait été prise dans un but louable d’homogénéisation des produits au sein de MUSCATE.\nIl nous est maintenant difficile de revenir en arrière, désolé.\nCordialement,\nOlivier

  5. Hello,I would like to ask about the LUT used. What atmospheric conditions are considered? Is only mid-latitude summer used?Thank you,Elsy

    1. Hi Elsy\nOur LUTS are not based on MODTRAN and the atmosphere is specified otherwise. \nThe aerosol model we use is defined in this reference :\nO. Hagolle, M. Huc, D. Villa Pascual, and G. Dedieu, “A Multi-Temporal and Multi-Spectral Method to Estimate Aerosol Optical Thickness over Land, for the Atmospheric Correction of FormoSat-2, LandSat, VENμS and Sentinel-2 Images,” Remote Sensing, vol. 7, no. 3, pp. 2668–2691, Mar. 2015.\nAerosols are stored in the lower part of the atmosphere using an exponential law of concentration between 0 and 2 Km.\nAll absorbing gases are above the scattering layers, which, I know, is a first order approximation (but absorption is low).\n\nOlivier

      1. Thank you for your answer. I will go though the reference. What I am specifically interested in is to know if tropical atmospheric conditions are considered. So, yes, based on your answer. I am working on a tropical site (New Caledonia) and I noticed that there are already images processed with MAJA available at THEIA. icor’s and Sen2Cor’s LUTs only consider mid latitude summer. So, I am trying to compare the three atmospheric correction approaches a bit. Any advice you might have is appreciated.

  6. Hello,Which resolution of SRTM DEM do you use for the correction of Sentinel-2 images? Thank you,Francesco

    1. Hi Francesco,\nIt is still 90 meter, but it’s true we should move to 30m.\nBest regards,\nOlivier

  7. Hi Olivier!First of all: Great work! As someone who had to use the Sen2Cor cloud masks frequently, MAJA looks like a good step up. I have a question: What input from the user is needed to run MAJA (multi-temporal of course)? I would like to try it using both Sentinel-2 L1C and Landsat-8 respectively using my own data, but couldn’t figure out what data to prepare. I’d much appreciate if you could help me out here.Thanks,Daria

    1. Thanks, I like to read that kind of sentences, you know how to talk to me ;)\n\nWe are providing a little scheduler to help users running MAJA, and the Readme tries to provide the necessary information to run it. \nhttps://github.com/CNES/Start-MAJA\n\nIt is not that easy, because one has to read the docs, fetch data from different servers, prepare the DEM,… But a lot of users manage to get it to work, sometimes after posting a few issues on github that we use as a forum (please do not post issues here, it’s better to have them in a single place).\n\nJust one thing, it is even more difficult to use MAJA on LANDSAT8, because MAJA needs to have the same upper left corner on each input product of a time series, and that’s not the case of LANDSAT L1 products. We are developing another tool to prepare LANDSAT data, but it’s not ready yet. Anyway, USGS/NASA official L2 products are good. \n\nOlivier

      1. Hi Olivier,
        I would like to know how to process Landsat collection in Maja too. But it’s a little bit difficult to use even with Sentinel. If you have any document guideline to do it. Thank yo very much!. Best, Ly

        1. Hi Ly.
          Yes MAJA is not easy, even if it is progressing. Regarding LANDSAT, it is even more complex because the L1T products are not tiled products, with different upper left corners for instance. To process them, MAJA needs a geometrical transformation to have the same corner on each date. We have implemented that in our ground segment, but not yet on our tool start_maja. It is feasible with gdal, but requires some work.

          USGS L2A products for LANDSAT are good, I think it is much simpler to use them.
          Best regards,

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.