Diferences series values EOBrowser vs Python API / GEE

I have a question which I could not find a solution for

I use the EO Browser service to access NDVI data, with zero clouds, for specific polygons.
I am testing some Python API GEE scripts, to retrieve a data set from Sentinel 2, but the returned values of this series, for the same polygon, are pretty different.

Considering that the script is the same and I am using images without clouds, what is the reason for this big difference?

The pictures below show the results charts for each service.
Thanks in advance.


Hi Ivo,

That is interesting to note, here are the possible reasons for these differences

  • If you have not noted already, since January 2022 ESA updated the Sentinel 2 processing baseline, as reported in this post, Sentinel Hub has since implemented parameters to harmonize the values, before and after the baseline change, see docs . I have no information whether this has been implemented yet in GEE. This is worth checking , seeing that significant differences appear in the months after January 2022

  • Processing options such as cloud filtering maybe quite different, it seems there were abit more cloud free dates selected in EO browser as seen in the chart. Perhaps you could compare the cloud filtering options you did use for GEE , even better could you share the GEE script ? that might make the comparison easier

Best regards

Thanks ,

The reason must be that the difference in the data series increases in January 2022.
Is there a way to implement the harmonization in the code?

The code: (Base Time Series By Region (with Conversion to Pandas and Visualization with Seaborn)

import ee, eemont, geemap
import pandas as pd
import numpy as np
import seaborn as sns
from matplotlib import pyplot as plt

Map = geemap.Map()


area = ee.Geometry.Polygon(

S2 = (ee.ImageCollection('COPERNICUS/S2_SR')
    .maskClouds() # Extended (pre-processing) 
    .scaleAndOffset() # Extended (pre-processing)
    .spectralIndices(['NDVI','EVI'])) # Extended (processing)

ts = S2.getTimeSeriesByRegion(reducer = [ee.Reducer.mean()],
                             geometry = area,
                             scale=10, crs='EPSG:4326')

Would appreciate comments and improvements

Dear Ivo

Good that you have identified the cause of the differences in values.

I cant comment on implementing the harmonization in the GEE code. For that please do find out from a GEE forum.

EDIT: please try using the harmonized collection as described here and check the results again

However , I can help you with any other questions related to Sentinel Hub

Best wishes

Thank you very much it was very helpful