reduceRegion
ee.Image의 리전에서 픽셀 값의 통계를 가져오려면
image.reduceRegion()을 사용합니다.
이렇게 하면 리전의 모든 픽셀이 리전의 픽셀 데이터에 대한 통계 또는 기타 간결한 표현(예: 히스토그램)으로 축소됩니다. 리전은 여러 픽셀을 포함하는 다각형일 수 있는 Geometry로 표현되거나 단일 지점일 수 있습니다. 이 경우 리전에 픽셀이 하나만 있습니다. 어느 경우든 그림 1과 같이 출력
은 리전의 픽셀에서 파생된 통계입니다.
ee.Reducer의 그림입니다.`reduceRegion()`을 사용하여 이미지의 리전에서 픽셀 통계를 가져오는 예시로
reduceRegion() 시에라네바다
침엽수림 경계 내에서 5년 Landsat 합성의 평균 스펙트럼
값을 찾는 것을 고려해 보겠습니다(그림 2에 표시됨).
// Load input imagery: Landsat 7 5-year composite. var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012'); // Load an input region: Sierra Nevada. var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3') .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada')) .first()); // Reduce the region. The region parameter is the Feature geometry. var meanDictionary = image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), scale: 30, maxPixels: 1e9 }); // The result is a Dictionary. Print it. print(meanDictionary);
계산을 강제하려면 결과를 출력하면 됩니다. 그러면 코드 편집기가 콘솔에
Dictionary로 표시합니다. 출력은 다음과 같이 표시됩니다.
B1: 25.406029716816853 B2: 23.971497014238988 B3: 22.91059593763103 B4: 54.83164133293403 B5: 38.07655472573677 B6_VCID_2: 198.93216428012906 B7: 24.063261634961563
이 예시에서 축소는 reducer
(ee.Reducer.mean()), geometry (region.geometry()),
scale (30m) 및 리듀서에 입력할 최대 픽셀 수에 대한 maxPixels를 제공하여 지정됩니다. 스케일은 항상
reduceRegion() 호출에서 지정해야 합니다. 이는 스케일이 다른 여러 소스의 데이터가 포함될 수 있는 복잡한 처리 흐름에서 출력의 스케일이 입력에서 명확하게 결정되지 않기 때문입니다. 이 경우 스케일은 기본적으로
1도로 설정되며 일반적으로 만족스럽지 않은 결과를 생성합니다. Earth Engine에서 스케일을 처리하는 방법에 관한 자세한 내용은 this
page를 참고하세요.
스케일을 설정하는 방법에는 두 가지가 있습니다. scale 매개변수를 지정하거나,
CRS 및 CRS 변환을 지정하는 것입니다. (CRS 및 CRS 변환에 관한 자세한 내용은 용어집을
참고하세요.) 예를 들어
meanDictionary 축소 (위)는 다음과 같습니다.
// As an alternative to specifying scale, specify a CRS and a CRS transform. // Make this array by constructing a 4326 projection at 30 meters, // then copying the bounds of the composite, from composite.projection(). var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563]; // Perform the reduction, print the result. print(image.reduceRegion({ reducer: ee.Reducer.mean(), geometry: region.geometry(), crs: 'EPSG:4326', crsTransform: affine, maxPixels: 1e9 }));
일반적으로 스케일을 지정하는 것으로 충분하며 코드를 더 읽기 쉽게 만듭니다. Earth Engine은 먼저 리전을 래스터화하여 리듀서에 입력할 픽셀을 결정합니다. CRS 없이 스케일을 지정하면 리전이 지정된 해상도로 조정된 이미지의 기본 투영으로 래스터화됩니다. CRS와 스케일이 모두 지정되면 리전이 이를 기반으로 래스터화됩니다.
리전의 픽셀
픽셀은 지정된 스케일 및 투영에 적용되는 다음 규칙에 따라 리전에 있는 것으로 결정되고 가중치가 부여됩니다.
- 가중치가 없는 리듀서 (예:
ee.Reducer.count()또는ee.Reducer.mean().unweighted()): 중심이 리전에 있고 이미지의 마스크가 0이 아닌 경우 픽셀이 포함됩니다. - 가중치가 있는 리듀서 (예:
ee.Reducer.mean()): 픽셀의 최소 (대략) 1/256 (~0.4%)이 리전에 있고 이미지의 마스크가 0이 아닌 경우 픽셀이 포함됩니다. 가중치는 이미지의 마스크와 리전으로 덮인 픽셀의 (대략적인) 비율 중 최솟값입니다. 픽셀 교차 가중치는 내부적으로 8비트 정수 (0~255)로 표현되며, 분수 적용 범위를 256개의 개별 수준으로 양자화합니다.
계산이 성공하려면 maxPixels 매개변수가 필요합니다. 이
매개변수가 예시에서 생략되면 다음과 같은 오류가 반환됩니다.
이러한 오류를 해결하는 방법에는 여러 가지가 있습니다. 예시와 같이 maxPixels
를 늘리거나 scale를 늘리거나 bestEffort를
true로 설정합니다. 그러면 maxPixels
가 초과되지 않도록 새 스케일 (더 큰 스케일)이 자동으로 계산됩니다. maxPixels를 지정하지 않으면 기본값이 사용됩니다.