圖片區域的統計資料

reduceRegion

如要取得 ee.Image 區域中像素值的統計資料,請使用 image.reduceRegion()。這會將區域中的所有像素縮減為統計資料,或其他簡潔的區域像素資料表示法 (例如直方圖)。該區域會以 Geometry 表示,可能是多邊形,包含許多像素,也可能是單一點,在這種情況下,該區域中只有一個像素。無論是哪種情況,如圖 1 所示,輸出內容都是從該區域的像素衍生而來的統計資料。

reduceRegion 圖表
圖 1. 插圖:ee.Reducer 套用至圖片和區域。

如要使用 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
reduceRegion 圖表
圖 2. 加州和內華達州的 Landsat 影像資料假彩色合成影像。要縮減的區域會以白色顯示。

請注意,在本例中,系統會透過提供 reducer (ee.Reducer.mean())、geometry (region.geometry())、scale (30 公尺) 和 maxPixels 來指定縮減作業,以便將最多像素數量輸入至縮減器。請務必在 reduceRegion() 呼叫中指定比例。這是因為在複雜的處理流程中,可能會涉及不同來源的資料,且這些資料的比例不同,因此無法從輸入內容明確判斷輸出的比例。在這種情況下,比例預設為 1 度,通常會產生不理想的結果。如要進一步瞭解 Earth Engine 如何處理比例,請參閱這個頁面

您可以透過兩種方式設定比例:指定 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()):如果像素的中心點位於區域內,且圖片的遮罩值非零,則會納入該像素。
  • 加權縮減器 (例如 ee.Reducer.mean()):如果像素中至少有 (約) 0.5% 位於區域內,且圖片遮罩值不為零,則會納入像素;其權重為圖片遮罩值和區域所涵蓋的像素 (約) 小數位。

您必須使用 maxPixels 參數,才能讓運算成功。如果在示例中省略這個參數,系統會傳回錯誤,如下所示:

您可以透過多種方式解決這些錯誤:增加 maxPixels (如範例所示)、增加 scale,或是將 bestEffort 設為 true,系統就會自動計算新的 (較大) 比例,以免超過 maxPixels。如未指定 maxPixels,系統會使用預設值。