Sentinel-2: Cloud Probability

COPERNICUS/S2_CLOUD_PROBABILITY
Dostępność zbioru danych
2015-06-27T00:00:00Z–2026-10-16T09:53:41Z
Producent zbioru danych
Fragment kodu dla Earth Engine
ee.ImageCollection("COPERNICUS/S2_CLOUD_PROBABILITY")
Odstęp między kolejnymi wizytami
5 dni
Tagi
chmury copernicus esa ue msi promieniowanie zdjęcia-satelitarne sentinel
sentinelhub

Opis

Prawdopodobieństwo wystąpienia chmur S2 jest tworzone za pomocą biblioteki sentinel2-cloud-detector (przy użyciu LightGBM). Przed zastosowaniem podstawowego algorytmu wzmocnienia gradientowego wszystkie pasma są poddawane nadpróbkowaniu przy użyciu interpolacji dwuliniowej do rozdzielczości 10 m. Wynikowe prawdopodobieństwo zmiennoprzecinkowe 0..1 jest skalowane do 0..100 i przechowywane jako UINT8. Obszary, w których brakuje niektórych lub wszystkich pasm, są maskowane. Wyższe wartości oznaczają większe prawdopodobieństwo występowania chmur lub powierzchni o wysokim współczynniku odbicia (np. dachów lub śniegu).

Sentinel-2 to misja obrazowania wielospektralnego o wysokiej rozdzielczości i szerokim pasie, która wspiera badania w ramach programu Copernicus dotyczące monitorowania lądów, w tym monitorowanie roślinności, gleby i pokrywy wodnej, a także obserwację śródlądowych dróg wodnych i obszarów przybrzeżnych.

Dane poziomu 2 znajdziesz w kolekcji COPERNICUS/S2_SR_HARMONIZED. Dane Level-1B znajdziesz w kolekcji COPERNICUS/S2_HARMONIZED. W przypadku zasobów w tych kolekcjach dostępne są dodatkowe metadane.

Zapoznaj się z tym samouczkiem, w którym wyjaśniono, jak zastosować maskę chmur.

Pasma

Pasma

Rozmiar piksela: 10 metrów (wszystkie pasma)

Nazwa Minimum Maks. Rozmiar piksela Opis
probability 0 100 10 metrów

Prawdopodobieństwo, że piksel jest zachmurzony.

Warunki usługi

Warunki korzystania z usługi

Korzystanie z danych z satelitów Sentinel podlega Warunkom korzystania z danych z satelitów Copernicus Sentinel.

Odkrywaj za pomocą Earth Engine

Edytor kodu (JavaScript)

var s2Sr = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED');
var s2Clouds = ee.ImageCollection('COPERNICUS/S2_CLOUD_PROBABILITY');

var START_DATE = ee.Date('2019-01-01');
var END_DATE = ee.Date('2019-03-01');
var MAX_CLOUD_PROBABILITY = 65;
var region =
    ee.Geometry.Rectangle({coords: [-76.5, 2.0, -74, 4.0], geodesic: false});
Map.setCenter(-75, 3, 12);

function maskClouds(img) {
  var clouds = ee.Image(img.get('cloud_mask')).select('probability');
  var isNotCloud = clouds.lt(MAX_CLOUD_PROBABILITY);
  return img.updateMask(isNotCloud);
}

// The masks for the 10m bands sometimes do not exclude bad data at
// scene edges, so we apply masks from the 20m and 60m bands as well.
// Example asset that needs this operation:
// COPERNICUS/S2_CLOUD_PROBABILITY/20190301T000239_20190301T000238_T55GDP
function maskEdges(s2_img) {
  return s2_img.updateMask(
      s2_img.select('B8A').mask().updateMask(s2_img.select('B9').mask()));
}

// Filter input collections by desired data range and region.
var criteria = ee.Filter.and(
    ee.Filter.bounds(region), ee.Filter.date(START_DATE, END_DATE));
s2Sr = s2Sr.filter(criteria).map(maskEdges);
s2Clouds = s2Clouds.filter(criteria);

// Join S2 SR with cloud probability dataset to add cloud mask.
var s2SrWithCloudMask = ee.Join.saveFirst('cloud_mask').apply({
  primary: s2Sr,
  secondary: s2Clouds,
  condition:
      ee.Filter.equals({leftField: 'system:index', rightField: 'system:index'})
});

var s2CloudMasked =
    ee.ImageCollection(s2SrWithCloudMask).map(maskClouds).median();
var rgbVis = {min: 0, max: 3000, bands: ['B4', 'B3', 'B2']};

Map.addLayer(
    s2CloudMasked, rgbVis, 'S2 SR masked at ' + MAX_CLOUD_PROBABILITY + '%',
    true);

Konfiguracja Pythona

Informacje o interfejsie API dla Pythona oraz o używaniu geemap do interaktywnego programowania znajdziesz na stronie środowiska Python.

import ee
import geemap.core as geemap

Colab (Python)

s2_sr = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
s2_clouds = ee.ImageCollection('COPERNICUS/S2_CLOUD_PROBABILITY')

start_date = ee.Date('2019-01-01')
end_date = ee.Date('2019-03-01')
max_cloud_probability = 65
region = ee.Geometry.Rectangle(
    coords=[-76.5, 2.0, -74, 4.0], geodesic=False, proj='EPSG:4326'
)


def maskClouds(img):
  clouds = ee.Image(img.get('cloud_mask')).select('probability')
  is_not_cloud = clouds.lt(max_cloud_probability)
  return img.updateMask(is_not_cloud)


# The masks for the 10m bands sometimes do not exclude bad data at
# scene edges, so we apply masks from the 20m and 60m bands as well.
# Example asset that needs this operation:
# COPERNICUS/S2_CLOUD_PROBABILITY/20190301T000239_20190301T000238_T55GDP
def maskEdges(s2_img):
  return s2_img.updateMask(
      s2_img.select('B8A').mask().updateMask(s2_img.select('B9').mask())
  )


# Filter input collections by desired data range and region.
criteria = ee.Filter.And(
    ee.Filter.bounds(region), ee.Filter.date(start_date, end_date)
)
s2_sr = s2_sr.filter(criteria).map(maskEdges)
s2_clouds = s2_clouds.filter(criteria)

# Join S2 SR with cloud probability dataset to add cloud mask.
s2_sr_with_cloud_mask = ee.Join.saveFirst('cloud_mask').apply(
    primary=s2_sr,
    secondary=s2_clouds,
    condition=ee.Filter.equals(
        leftField='system:index', rightField='system:index'
    ),
)

s_2_cloud_masked = (
    ee.ImageCollection(s2_sr_with_cloud_mask).map(maskClouds).median()
)

rgb_vis = {'min': 0, 'max': 3000, 'bands': ['B4', 'B3', 'B2']}

m = geemap.Map()
m.set_center(-75, 3, 12)
m.add_layer(
    s_2_cloud_masked,
    rgb_vis,
    'S2 SR masked at ' + str(max_cloud_probability) + '%',
    True,
)
m
Otwórz w edytorze kodu