Atmospheric correction above water surface


I am currently experimenting Sen2Cor to process satellite imagery in a coastal environment.

I need to retrieve surface reflectance of seawater. I have read that Sen2Cor was originaly designed for land corrections and has finaly been provided with a maritim setting. However, the result is not as i expected :

Granules are still visible above the sea whereas they are no more above land.
Scenes classification seems highly inaccurate. Water mask for exemple is extremly noisy and very uncomplet.

Knowing that the orthoimage has been taken around the 22°19’S latitude in october, i tried the different setting Winter/Summer without any clear improvement. I have also added a DEM to the process. I thoughts that it would at least improves the ocean ocean water pixel classification but it did not.

I think that the difficulties come from the fact that each granules are composed from both water and land areas. I imagine that the defined threshold are then unsuitable.

Have you any advice allowing me to improve my setting ?
Thanks you very much for your help…

1 Like

Hi Selam,
the “granules” limit you see correspond to different detector footprint, acquired from slightly different viewing angles. What you see is not an atmospheric signal, but comes from the sunglint (the specular reflection of sun over water, which shows sharp variations with the acquisition angles).
And yes Sen2cor is not designed for atmospheric correction above water, does not estimate the aerosols over water and does not correct for the sunglint effect.

Acolite starts to be widely used for atmospheric correction above water

Regarding sunglint correction, I have seen impressive results from @harmel method. I think it derives from this paper, but I am not sure the application to Sentinel-2 has been published yet. Anyway, @harmel often comes to this forum, so you can ask him.

Best regards,

Hello, Selam
I have seen some wide stripes on your picture.
Are they the result of Rayleigh Correction ?

Answer about the stripes (or “granules” in the first question), is in the first paragraph of my answer above :wink:
I also posted about it two years ago on my blog :

1 Like

You can try the Case-2 Regions CoastColour (C2RCC ) processor. It is included in the current BETA version of SNAP 6. It does the AC and water constituents retrieval.

Thanks you all for your quick answers.

I had already tried acolite but the results were fully incomplet. After reading your post and acolite forum, I realized that atmospheric correction has to be processed after sun glint removal. And, tell me if I’m wrong but, in case of Sentinel sun glint should be removed separately for each detector footprint. Then I should extract footprints from gml files.

However, I’ve just discovered on your blog (Ohagolle) the L2 Sentinel products processed by Theia with MAJA processor. Do you know if this processor provide suitable results overs coastal water ? Knowing that my zone of interest goes from coasts to reefs which can be up to 15 or 20 kilometers away.

Hi Selam,
yes, over coastal waters, Sunglint should be removed, using the exact geometric condition for each detector. Sentinel-2 data contain all the necessary information to fin the angle values for each pixel, even if it is a bit complicated.

MAJA processor is a land atmospheric correction processor. It does not correct for sunglint, and regarding the atmosphere, only propagates the aerosol content it finds over land. Although a few users have had decent results on coastal regions and lakes, 15 to 20 kilometres is probably too much.

Best regards,

Dear Oliver and Selam,
Actually the paper on the sunglint correction for Sentinel-2 is under revision.
I just added the poster describing the method here:

All the best,

1 Like


Here is some news.

I finaly applied the sun glint removal technique from this paper The process seems easier but it is also the one used in the sen2coral toolbox of snap with sentinel 2 imagery (However it does not work on my Snap …).

It consist of extracting a sample area displaying range of sun glint in homogeneous water such as deep water. A linear regression is computed between each bands to correct and one NIR band. Lastly a minimum NIR value is extrated from the sample. Correction is then processed as followed :
R’_i = R_i - b_i*(R_nir - Min_R_nir)
with R’_i, the corrected pixel in band i, R_i the pixel to be corrected in band i, b_i the slope of regression between NIR and band i, R_nir the near-infrared signal of the pixel, and Min_R_nir the minimun of the near infrared signal over the extracted sample.

In my case I computed a separated regression for each detector footprint but choose the global Min_R_nir over all samples(one per footprint) in order to obtain same range of intensity.
Results are pretty good regarding the sun glint removal :

However the detectors footprints are still visible:

The difference are slight but big enough to expect statistical difference between the footprint which risk to be problematic for the next parts of my work(involving classifications).

The red component seems to be the more distingish diffenrence between footprints so I took a look on the regressions :

Indeed, regressions of Red band over NIR band shows the lowest coefficients of determination(despite the fact that their wavelength are the closest …).

At the end, I’m asking myself if the specular reflection behaving differently due to the detectors angles is the only cause responsible for detector footprints difference. I imagine that each detectors are undergoing instrumental noise. Is this noise corrected ?

Are you finally applying the sunglint method before or after sen2cor? Have you tried Acolite after the sunglint correction?

Hello Selam,
Regarding the method described in Hedley et al. 2005, you could get better results by applying the regression calculation for a given subset of each detector footprint. The subset should be spatially homogeneous in terms of water-leaving signal but as heterogeneous as possible in terms of sunglint “contamination” (including glint-free pixels).
Another issue comes from the change in viewing geometry from one band to another. To have the full info on angles you can use the code provided by
The difference you observed along the two footprints could be simply due to differences in the viewing geometries implying changes in the measured atmospheric radiance and sky reflection on surface.

So there is no need of Sen2cor apply after C2RCC process?

No, the data is already corrected for atmospheric effects in this case.

Does this processor include sun glint removal? If not, what would you suggest?

I think you should try Sen2Coral Processing module

The paper is now available:


Hi all

I was wondering if there has been any improvement in the availability of a method for Atmospheric/Sun glint Correction of Sentinel 2 products for ocean monitoring applications. I would welcome if Harmel can share how to implement the Algorithm he and his colleagues published recently. So far, researchers who pursue the use of Sentinel 2 for Ocean applications I feel we are a bit stuck with this issue. I have tried Sen2Cor, Polymer and C2CRCC processor, but the radiometric diferences between detectors are still visible, thus limiting the use of classification algorithms over ocean ecosystems. I would welcome advice in this matter.

1 Like

So you wouldn t suggest to use sen2cor with coastal areas? I am interesting in cacluating harmful algaal blooms.

Also in some areas and in bands like B4 you can see having the sane value reflectance over the coastal areas (attaching image). Does that make any sense?

Actually, the image looks like a land-water mask. It does not seem to be a reflectance band.

Actually i corrected using the sen2cor tool and then masked the land. As a result the image is the coastal zone.
You can see that a very big part of the image has the same value in B4 0.0001. Attaching the parameters of sen2cor.

sen2cor.xml (1.1 KB)

Any ideas why is that?