Penggabungan, Masking, dan Mosaik

Dengan koleksi reflektansi TOA Landsat 8 yang dimuat ke dalam variabel bernama l8, Anda melihat bahwa kode berikut menghasilkan komposit nilai terbaru:

Editor Kode (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

Salah satu masalah pada komposit ini adalah banyaknya awan. Daripada hanya mengambil piksel terakhir dalam koleksi (saat Anda menambahkan koleksi ke peta, Earth Engine secara implisit memanggil mosaic() di dalamnya), Anda dapat mengurangi ImageCollection (Pelajari lebih lanjut cara mengurangi koleksi gambar).

Pembuatan Komposit dengan Reducer

Anda pertama kali diperkenalkan dengan reducer untuk mendapatkan statistik di wilayah gambar. Itu adalah pengurangan spasial. Mengurangi koleksi gambar menjadi satu gambar adalah pengurangan temporal jika koleksi tersebut mewakili gambar dari waktu ke waktu. Jenis Reducer yang Anda gunakan menentukan cara Earth Engine menangani piksel yang tumpang-tindih. Landsat 8 mengunjungi tempat yang sama di Bumi setiap 16 hari. Artinya, selama periode 6 bulan, akan ada sekitar 12 gambar (dan lebih banyak lagi jika adegan tumpang-tindih). Setiap piksel pada peta berasal dari tumpukan piksel - satu dari setiap gambar dalam koleksi yang ditampilkan.

Hanya menambahkan koleksi ke peta akan menghasilkan pemilihan piksel terbaru - piksel dari gambar terbaru dalam tumpukan. Perilaku ini dapat diubah menggunakan reducer Earth Engine. Misalnya, daripada mengambil piksel terbaru dari tumpukan, Earth Engine dapat diinstruksikan untuk memilih nilai median dalam tumpukan. Hal ini memiliki manfaat menghilangkan awan (yang memiliki nilai tinggi) dan bayangan (yang memiliki nilai rendah). Jika koleksi gambar dikurangi menggunakan pengurang median, nilai kompositnya adalah median di setiap band, dari waktu ke waktu. Misalnya, menggunakan scene Landsat pada tahun 2016:

Editor Kode (JavaScript)

// Get the median over time, in each band, in each pixel.
var median = l8.filterDate('2016-01-01', '2016-12-31').median();

// Make a handy variable of visualization parameters.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};

// Display the median composite.
Map.addLayer(median, visParams, 'median');

Hal baru dalam kode ini adalah metode median() yang diterapkan ke koleksi gambar. Seperti metode pemfilteran, ini adalah pintasan untuk metode reduce() yang lebih umum pada koleksi gambar yang menggunakan ee.Reducer() sebagai argumen. Lihat paket ee.Reducer di tab Docs di Editor Kode untuk melihat daftar semua pengurang Earth Engine. Saat mempertimbangkan reducer untuk koleksi gambar, perhatikan bahwa output-nya adalah gambar, sehingga reducer dengan output non-numerik, misalnya reducer histogram atau toList, tidak akan berfungsi dengan koleksi gambar.

Tutorial_api_06_median_composite
Gambar 6. Komposit median Landsat 8.

Saat memperkecil tampilan komposit median, Anda akan melihat tampilan seperti Gambar 6. Hasilnya akan terlihat jauh lebih baik daripada komposit nilai terbaru yang Anda buat sebelumnya. Pada tahap ini, ada baiknya kita mundur sejenak dan mempertimbangkan apa yang telah dilakukan untuk membuat komposit median tersebut. Earth Engine telah memuat seluruh koleksi Landsat 8 di seluruh daratan Amerika Serikat, dan telah menghitung median untuk setiap piksel. Itu jumlah data yang sangat banyak. Tentu saja, Anda dapat menghitung median tahunan, dengan memfilter koleksi terlebih dahulu, seperti yang telah Anda lakukan sebelumnya. Intinya, jika Anda harus mendownload semua citra tersebut dan membuat komposit ini, itu akan menjadi proyek besar. Dengan Earth Engine, Anda akan mendapatkan hasilnya dalam hitungan detik.

Pelajari lebih lanjut penggabungan dan mosaik di sini.

Penyamaran

Meskipun komposit median merupakan peningkatan dari komposit nilai terbaru, Anda mungkin ingin menyamarkan bagian gambar. Menyamarkan piksel dalam gambar akan membuat piksel tersebut transparan dan mengecualikannya dari analisis. Setiap piksel di setiap band gambar memiliki mask. Nilai mask 0 atau di bawahnya akan transparan. Objek dengan mask nilai apa pun di atas 0 akan dirender. Mask gambar ditetapkan menggunakan panggilan seperti image1.mask(image2). Panggilan ini mengambil nilai image2 dan menjadikannya mask image1. Setiap piksel di image2 yang memiliki nilai 0 akan dibuat transparan di image1.

Misalnya, Anda ingin menyamarkan semua piksel air dalam komposit median. Masker air dapat dibuat menggunakan set data yang dijelaskan oleh Hansen et al. (2013) yang ada di katalog data Earth Engine. (Pelajari lebih lanjut set data Hansen et al. dalam tutorial ini.) Dalam set data ini, air memiliki nilai 2, daratan memiliki nilai 1, dan 'tidak ada data' memiliki nilai 0. Gunakan sedikit logika untuk membuat gambar mask yang memiliki nilai nol di tempat yang tidak ada daratan:

Editor Kode (JavaScript)

// Load or import the Hansen et al. forest change dataset.
var hansenImage = ee.Image('UMD/hansen/global_forest_change_2025_v1_13');

// Select the land/water mask.
var datamask = hansenImage.select('datamask');

// Create a binary mask.
var mask = datamask.eq(1);

// Update the composite mask with the water mask.
var maskedComposite = median.updateMask(mask);
Map.addLayer(maskedComposite, visParams, 'masked');

Ada beberapa hal baru dalam kode ini yang perlu disebutkan secara mendetail. Pertama, fungsi select() berguna untuk mengekstrak band yang diinginkan dari gambar. Di sini, kita hanya memilih band yang kita minati: datamask. Hal baru berikutnya adalah operator logis eq() yang berarti "sama dengan". Kita menggunakan eq(1) untuk membuat gambar biner yang semua pikselnya tidak memiliki nilai 1 di band datamask (yang merupakan air atau tidak ada data) mendapatkan nilai 0 dalam gambar yang dihasilkan.

Sebagai hasil dari masking ini, semua piksel dalam komposit median yang berada di atas daratan (menurut set data Hansen et al.) terlihat, tetapi piksel yang berada di atas air (atau nodata) transparan dan akan dikecualikan dari analisis apa pun yang Anda lakukan pada gambar maskedComposite.

Pembuatan Mosaik

Dengan menggabungkan konsep koleksi gambar, operator logika, masking, dan komposisi, Anda dapat memperoleh hasil kartografi yang menarik. Misalnya, jika Anda menginginkan gambar yang piksel daratannya ditampilkan dalam warna asli dan semua piksel lainnya ditampilkan dalam warna biru, Anda dapat melakukan hal seperti:

Editor Kode (JavaScript)

// Make a water image out of the mask.
var water = mask.not();

// Mask water with itself to mask all the zeros (non-water).
water = water.mask(water);

// Make an image collection of visualization images.
var mosaic = ee.ImageCollection([
  median.visualize(visParams),
  water.visualize({palette: '000044'}),
]).mosaic();

// Display the mosaic.
Map.addLayer(mosaic, {}, 'custom mosaic');

Ada banyak hal yang terjadi dalam kode tersebut, jadi mari kita bedah. Pertama, kita menggunakan operator logika not() untuk membalikkan mask yang kita buat sebelumnya. Secara khusus, not() mengubah semua angka nol menjadi satu dan semua angka bukan nol menjadi nol. Tidak sepenuhnya benar untuk menyebut variabel tersebut sebagai water karena variabel tersebut juga menyertakan beberapa piksel nodata, tetapi tidak masalah dalam konteks kartografi saat ini. Hal berikutnya adalah menyamarkan "air" dengan dirinya sendiri. Hasilnya adalah gambar yang semua piksel airnya bernilai 1 dan semua piksel lainnya disamarkan. Langkah terakhir adalah menggabungkan gambar dengan mosaic(). Karena mosaic() berfungsi pada koleksi gambar, kita meneruskan daftar gambar yang ingin digabungkan ke dalam konstruktor koleksi gambar, lalu memanggil mosaic() sebagai langkah terakhir. Urutan gambar dalam daftar tersebut penting. Secara khusus, gambar output akan berisi piksel terakhir yang tidak disamarkan dari tumpukan gambar dalam koleksi input. Dalam hal ini, cara tersebut berhasil karena lapisan air adalah gambar terakhir (atas) dalam koleksi, dan hanya berisi piksel yang tidak dimasking di tempat air berada.

Perhatikan bahwa gambar dalam koleksi adalah gambar visualisasi. Saat Anda memanggil visualize() pada gambar, gambar tersebut akan diubah menjadi gambar 3 band, 8 bit sesuai dengan parameter visualisasi yang Anda teruskan. Parameter visualisasi default berfungsi dengan baik untuk gambar 3 band, 8 bit, sehingga Anda tidak memerlukan parameter visualisasi saat menambahkan gambar ke peta. Hasilnya akan terlihat seperti Gambar 7.

Tutorial_api_07_mosaic.png
Gambar 7. Mosaik kustom yang membuat area perairan memiliki warna yang seragam.

Pada tahap ini, Anda telah melihat cara memvisualisasikan koleksi gambar sebagai komposit nilai terbaru, metode untuk membuat komposit koleksi gambar menggunakan reducer, dan metode untuk membuat komposit kustom dengan menyamarkan dan membuat mosaik koleksi gambar. Di halaman berikutnya, pelajari cara menambahkan indeks vegetasi ke setiap gambar dalam koleksi dan menggunakan indeks tersebut untuk membuat komposit "piksel terhijau".