Penggabungan, Masking, dan Mosaik

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

Code Editor (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 dengan 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).

Menggabungkan dengan Peredam

Anda pertama kali diperkenalkan dengan reducer untuk mendapatkan statistik di wilayah gambar. Itu adalah pengurangan spasial. Mengurangi kumpulan gambar menjadi satu gambar adalah pengurangan temporal jika kumpulan gambar 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 adegannya tumpang-tindih). Setiap piksel di 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 peredam Earth Engine. Misalnya, alih-alih mengambil piksel terbaru dari stack, Earth Engine dapat diinstruksikan untuk memilih nilai median dalam stack. Hal ini bermanfaat untuk menghilangkan awan (yang memiliki nilai tinggi) dan bayangan (yang memiliki nilai rendah). Saat kumpulan gambar dikurangi menggunakan peredam median, nilai gabungannya adalah median di setiap rentang, dari waktu ke waktu. Misalnya, menggunakan gambar Landsat pada tahun 2016:

Code Editor (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 pada 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 Dokumen pada Editor Kode untuk melihat daftar semua pereduksi Earth Engine. Saat mempertimbangkan peredam untuk kumpulan gambar, perhatikan bahwa outputnya adalah gambar, sehingga peredam dengan output non-numerik, misalnya peredam histogram atau toList, tidak akan berfungsi dengan kumpulan gambar.

Tutorial_api_06_median_composite
Gambar 6. Komposit median Landsat 8.

Saat memperkecil tampilan komposit median, Anda akan melihat sesuatu seperti Gambar 6. Hal ini akan terlihat jauh lebih baik daripada komposit nilai terbaru yang Anda buat sebelumnya. Pada tahap ini, sebaiknya mundur dan mempertimbangkan apa yang telah dilakukan untuk membuat komposit median tersebut. Earth Engine telah memuat seluruh koleksi Landsat 8 di seluruh Amerika Serikat, dan telah menghitung median untuk setiap piksel. Jumlah datanya banyak sekali. Tentu saja, Anda dapat menghitung median tahunan, dengan terlebih dahulu memfilter kumpulan data, seperti yang telah Anda lakukan sebelumnya. Intinya, jika Anda harus mendownload semua gambar tersebut dan membuat komposit ini, itu akan menjadi project besar. Dengan Earth Engine, Anda akan mendapatkan hasilnya dalam hitungan detik.

Pelajari lebih lanjut penggabungan dan mosaik di sini.

Penyamaran

Meskipun komposit median lebih baik daripada komposit nilai terbaru, Anda mungkin ingin menutupi bagian gambar. Membuat piksel dalam gambar menjadi transparan dan mengecualikannya dari analisis. Setiap piksel di setiap band gambar memiliki masker. Objek dengan nilai mask 0 atau di bawahnya akan transparan. Yang memiliki mask dengan nilai di atas 0 akan dirender. Masker gambar ditetapkan menggunakan panggilan seperti image1.mask(image2). Panggilan ini mengambil nilai image2 dan menjadikannya mask image1. Piksel apa pun di image2 yang memiliki nilai 0 akan dibuat transparan di image1.

Misalnya, Anda ingin menutupi 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. di 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 nol di tempat yang tidak ada daratannya:

Code Editor (JavaScript)

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

// 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 dibahas secara mendetail. Pertama, fungsi select() berguna untuk mengekstrak band yang diinginkan dari gambar. Di sini, kita hanya memilih rentang yang kita inginkan: datamask. Hal baru berikutnya adalah operator logis eq() yang berarti "sama dengan". Kami menggunakan eq(1) untuk membuat gambar biner yang semua pikselnya tidak memiliki nilai 1 di band datamask (yang merupakan air atau tidak ada data) akan mendapatkan nilai 0 dalam gambar yang dihasilkan.

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

Penggabungan

Dengan menggabungkan konsep koleksi gambar, operator logis, masking, dan komposisi, Anda dapat mencapai hasil kartografi yang menarik. Misalnya, jika Anda menginginkan gambar yang menampilkan piksel daratan dalam warna asli dan semua piksel lainnya dalam warna biru, Anda dapat melakukan sesuatu seperti:

Code Editor (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 non-nol menjadi nol. Tidak sepenuhnya benar untuk memanggil variabel tersebut water karena juga menyertakan beberapa piksel nodata, tetapi tidak masalah dalam konteks kartografi saat ini. Langkah berikutnya adalah menutupi "air" dengan dirinya sendiri. Hal ini akan menghasilkan gambar yang semua piksel airnya adalah 1 dan semua piksel lainnya ditutupi. Langkah terakhir adalah menggabungkan gambar dengan mosaic(). Karena mosaic() berfungsi pada koleksi gambar, kita meneruskan daftar gambar yang ingin digabungkan ke 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 tertutup dari tumpukan gambar dalam koleksi input. Dalam hal ini, cara tersebut berhasil karena lapisan air adalah gambar terakhir (paling atas) dalam koleksi, dan hanya berisi piksel yang tidak tertutup di mana air terjadi.

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, jadi 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 seragam.

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