Sentinel-2: Cloud Probability

COPERNICUS/S2_CLOUD_PROBABILITY
데이터 세트 제공
2015-06-27T00:00:00Z–2026-10-16T09:53:41Z
데이터 세트 출처
Earth Engine 스니펫
ee.ImageCollection("COPERNICUS/S2_CLOUD_PROBABILITY")
재관측 간격
5일
태그
구름 copernicus esa eu msi 복사량 위성 이미지 sentinel
sentinelhub

설명

S2 구름 확률은 sentinel2-cloud-detector 라이브러리 (LightGBM 사용)로 생성됩니다. 모든 대역은 그래디언트 부스트 기본 알고리즘이 적용되기 전에 쌍선형 보간법을 사용하여 10m 해상도로 업샘플링됩니다. 결과로 생성되는 0..1 부동 소수점 확률은 0..100로 조정되고 UINT8로 저장됩니다. 밴드 중 일부 또는 전부가 누락된 영역은 마스킹됩니다. 값이 높을수록 구름 또는 반사율이 높은 표면(예: 지붕 또는 눈)일 가능성이 높습니다.

Sentinel-2는 넓은 관측 폭과 고해상도를 갖춘 다중 스펙트럼 이미징 임무로, 식생, 토양, 수역 모니터링을 포함하여 내륙 수로 및 해안 지역 관측 등 코페르니쿠스 지표면 모니터링 연구를 지원합니다.

수준 2 데이터는 COPERNICUS/S2_SR_HARMONIZED 컬렉션에서 찾을 수 있습니다. Level-1B 데이터는 COPERNICUS/S2_HARMONIZED 컬렉션에서 찾을 수 있습니다. 이러한 컬렉션의 애셋에 추가 메타데이터를 사용할 수 있습니다.

구름 마스크를 적용하는 방법을 설명하는 이 튜토리얼을 참고하세요.

대역

대역

픽셀 크기: 10m (모든 대역)

이름 민 최대 픽셀 크기 설명
probability 0 100 10미터

픽셀이 흐릴 확률입니다.

이용약관

이용약관

Sentinel 데이터 사용에는 Copernicus Sentinel 데이터 이용약관이 적용됩니다.

Earth Engine으로 탐색

코드 편집기(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);

Python 설정

Python API 및 대화형 개발을 위한 geemap 사용에 대한 자세한 내용은 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
코드 편집기에서 열기