Statistik Region Gambar

reduceRegion

Untuk mendapatkan statistik nilai piksel di region ee.Image, gunakan image.reduceRegion(). Tindakan ini akan mengurangi semua piksel di region menjadi statistik atau representasi ringkas lainnya dari data piksel di region (misalnya, histogram). Region direpresentasikan sebagai Geometry, yang mungkin berupa poligon, yang berisi banyak piksel, atau mungkin berupa satu titik, yang dalam hal ini hanya akan ada satu piksel di region. Dalam kedua kasus tersebut, seperti yang diilustrasikan dalam Gambar 1, output adalah statistik yang berasal dari piksel di region.

Diagram reduceRegion
Gambar 1. Ilustrasi ee.Reducer yang diterapkan pada gambar dan region.

Untuk contoh mendapatkan statistik piksel di region gambar menggunakan reduceRegion(), pertimbangkan untuk menemukan nilai spektral rata-rata komposit Landsat 5 tahun dalam batas Hutan Konifer Sierra Nevada (diilustrasikan oleh Gambar 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);

Untuk memaksa komputasi, cukup cetak hasilnya, yang akan ditampilkan oleh Code Editor sebagai Dictionary di konsol. Outputnya akan terlihat seperti berikut:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
Diagram reduceRegion
Gambar 2. Komposit warna palsu dari data gambar Landsat untuk California dan Nevada. Region yang akan dikurangi ditampilkan dalam warna putih.

Perhatikan bahwa dalam contoh ini, pengurangan ditentukan dengan memberikan reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 meter), dan maxPixels untuk jumlah piksel maksimum yang akan dimasukkan ke reducer. Skala harus selalu ditentukan dalam reduceRegion() panggilan. Hal ini karena dalam alur pemrosesan yang kompleks, yang mungkin melibatkan data dari berbagai sumber dengan skala yang berbeda, skala output tidak akan ditentukan secara jelas dari input. Dalam hal ini, skala akan ditetapkan secara default ke 1 derajat, yang umumnya menghasilkan hasil yang tidak memuaskan. Lihat halaman ini untuk mengetahui informasi selengkapnya tentang cara Earth Engine menangani skala.

Ada dua cara untuk menetapkan skala: dengan menentukan parameter scale, atau dengan menentukan CRS dan transformasi CRS. (Lihat glosarium untuk informasi selengkapnya tentang CRS dan transformasi CRS). Misalnya, pengurangan meanDictionary (di atas) setara dengan hal berikut:

// 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
}));

Secara umum, menentukan skala sudah cukup dan menghasilkan kode yang lebih mudah dibaca. Earth Engine menentukan piksel mana yang akan dimasukkan ke reducer dengan terlebih dahulu melakukan rasterisasi region. Jika skala ditentukan tanpa CRS, region akan di-rasterisasi dalam proyeksi native gambar yang diskalakan ke resolusi yang ditentukan. Jika CRS dan skala ditentukan, region akan di-rasterisasi berdasarkan keduanya.

Piksel di region

Piksel ditentukan berada di region (dan diberi bobot) sesuai dengan aturan berikut, yang diterapkan dalam skala dan proyeksi yang ditentukan:

  • Reducer tanpa bobot (misalnya, ee.Reducer.count() atau ee.Reducer.mean().unweighted()): piksel disertakan jika sentroidnya berada di region dan mask gambar bukan nol.
  • Reducer berbobot (misalnya, ee.Reducer.mean()): piksel disertakan jika setidaknya (kira-kira) 1/256 (~0,4%) piksel berada di region dan mask gambar bukan nol; bobotnya adalah minimum mask gambar dan (perkiraan) pecahan piksel yang tercakup oleh region. Bobot persimpangan piksel direpresentasikan secara internal sebagai bilangan bulat 8-bit (0 hingga 255), yang mengkuantisasi cakupan pecahan menjadi 256 tingkat diskrit.

Parameter maxPixels diperlukan agar komputasi berhasil. Jika parameter ini tidak disertakan dalam contoh, error akan ditampilkan, yang terlihat seperti:

Ada beberapa opsi untuk mengatasi error ini: meningkatkan maxPixels, seperti dalam contoh, meningkatkan scale, atau menetapkan bestEffort ke benar (true), yang secara otomatis menghitung skala baru (lebih besar) sehingga maxPixels tidak terlampaui. Jika Anda tidak menentukan maxPixels, nilai default akan digunakan.