Cloud masks
Clouds and their shadows would pull an index towards meaningless values, so AgroSat masks them before computing statistics. Masked pixels are left out of mean, median and the other values, and counted in cloud_fraction.
The two Sentinel-2 masks
Section titled “The two Sentinel-2 masks”Each Sentinel-2 statistics row says which mask produced it, in cloud_mask:
cloud_mask |
Built from | When |
|---|---|---|
scl_cld |
The scene classification layer plus the cloud-probability layer | Scenes that have a cloud-probability layer. This is the normal case for current imagery. |
scl |
The scene classification layer only | Scenes without a cloud-probability layer, mostly older than 2025. |
scl masks cloud edges and thin cloud less strictly than scl_cld, so an scl date can keep a few hazy pixels that scl_cld would remove. A scene without the cloud-probability layer still produces statistics instead of failing.
{ "date": "2022-06-18", "mean": 0.6402, "median": 0.6611, "min": 0.1937, "max": 0.8124, "std": 0.0877, "p10": 0.5263, "p90": 0.7408, "valid_fraction": 0.9615, "cloud_fraction": 0.0385, "cloud_mask": "scl"}Using the mask in your product
Section titled “Using the mask in your product”- When you compare seasons before and after 2025, expect the older dates, which are more likely to carry
scl, to be slightly noisier. - If you flag sudden drops in an index, require a higher
valid_fractionforscldates, or confirm the drop on the next clear date. cloud_fractionis the share of the field masked as cloud;valid_fractionis the share of the field actually used. The two need not add up to 1: pixels can be left out for reasons other than cloud.
Scene cloud cover
Section titled “Scene cloud cover”scene_cloud_cover from dates is a different number: the cloud cover reported for the whole satellite scene, which covers far more than your field. Use it to skip obviously cloudy days, and the per-field values above to judge the data you actually got.
