NDVI, Memetakan Fungsi ke Koleksi, Mosaik Berkualitas

Sebelumnya, Anda telah mempelajari cara mendapatkan setiap scene Landsat dengan melakukan sesuatu seperti ini, dengan l8 dan point adalah impor yang merepresentasikan kumpulan TOA Landsat 8 dan geometri area yang diminati:

Code Editor (JavaScript)

// Define a point of interest. Use the UI Drawing Tools to import a point
// geometry and name it "point" or set the point coordinates with the
// ee.Geometry.Point() function as demonstrated here.
var point = ee.Geometry.Point([-122.292, 37.9018]);

// Import the Landsat 8 TOA image collection.
var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

// Get the least cloudy image in 2015.
var image = ee.Image(
  l8.filterBounds(point)
    .filterDate('2015-01-01', '2015-12-31')
    .sort('CLOUD_COVER')
    .first()
);

Sekarang, misalkan Anda ingin menghitung gambar Normalized Difference Vegetation Index (NDVI) dari gambar Landsat. Vegetasi memantulkan cahaya di bagian inframerah dekat (NIR) spektrum elektromagnetik dan menyerap cahaya di bagian merah (Pelajari lebih lanjut pantulan NIR dari vegetasi). NDVI menggunakan ini untuk membuat satu nilai yang secara kasar mencerminkan aktivitas fotosintesis yang terjadi pada piksel. Perhitungannya adalah (NIR - merah) / (NIR + merah). Hal ini menghasilkan angka antara 1 dan -1, dengan piksel yang memiliki aktivitas fotosintetik tinggi memiliki NDVI tinggi. Berikut salah satu cara untuk menghitung NDVI di Earth Engine:

Code Editor (JavaScript)

// Compute the Normalized Difference Vegetation Index (NDVI).
var nir = image.select('B5');
var red = image.select('B4');
var ndvi = nir.subtract(red).divide(nir.add(red)).rename('NDVI');

// Display the result.
Map.centerObject(image, 9);
var ndviParams = {min: -1, max: 1, palette: ['blue', 'white', 'green']};
Map.addLayer(ndvi, ndviParams, 'NDVI image');

Hasilnya akan terlihat seperti Gambar 8. Perhatikan bahwa kita menggunakan fungsi select() yang Anda pelajari di bagian sebelumnya tentang masking untuk mendapatkan band NIR dan merah, lalu menghitung NDVI menggunakan operator matematika gambar yang juga telah Anda lihat sebelumnya di bagian tentang matematika Image. Terakhir, tampilkan gambar dengan palet. Di sini kita menggunakan nama warna, bukan string hex dalam palet. (Lihat referensi eksternal tentang warna CSS ini untuk mengetahui detailnya.)

Tutorial_api_08_ndvi.png
Gambar 8. NDVI untuk satu adegan Landsat. Biru menunjukkan NDVI rendah dan hijau menunjukkan NDVI tinggi.

Operasi perbedaan yang dinormalisasi sangat umum dalam penginderaan jauh, ada fungsi pintasan pada ee.Image yang berguna untuk menyederhanakan kode dalam contoh sebelumnya:

Code Editor (JavaScript)

var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');

Memetakan Fungsi ke Koleksi

Sekarang, misalkan Anda ingin menambahkan NDVI ke setiap gambar dalam koleksi gambar. Cara melakukannya di Earth Engine adalah dengan map() fungsi pada koleksi. Jangan keliru memahami map() dengan objek Map. Yang pertama adalah metode pada koleksi, dan menggunakan peta dalam arti komputasi paralel untuk menerapkan fungsi ke setiap elemen dalam koleksi. Fungsi ini menentukan operasi yang akan diterapkan ke setiap elemen dalam koleksi. Anda telah melihat fungsi sederhana dalam tutorial JavaScript, tetapi sekarang kita akan membuat fungsi yang menyertakan fungsi Earth Engine. Misalnya, salin kode NDVI sebelumnya ke dalam fungsi yang menampilkan gambar input dengan band NDVI:

Code Editor (JavaScript)

var addNDVI = function(image) {
  var ndvi = image.normalizedDifference(['B5', 'B4']).rename('NDVI');
  return image.addBands(ndvi);
};

// Test the addNDVI function on a single image.
var ndvi = addNDVI(image).select('NDVI');

Kode ini mungkin tidak seefisien penghitungan NDVI untuk satu gambar, tetapi fungsi ini dapat digunakan sebagai argumen untuk map() guna menambahkan band NDVI ke setiap gambar dalam koleksi. Sering kali ada baiknya menguji fungsi terlebih dahulu pada satu gambar, untuk memastikan fungsi tersebut berperilaku seperti yang Anda harapkan. Setelah menguji fungsi pada setiap gambar dan menentukan bahwa fungsi tersebut melakukan apa yang Anda inginkan, Anda dapat memetakannya ke seluruh koleksi:

Code Editor (JavaScript)

var withNDVI = l8.map(addNDVI);

Untuk memverifikasi bahwa tindakan ini memang menempatkan band NDVI di setiap gambar dalam koleksi ini, Anda dapat menambahkan koleksi withNDVI ke peta dan mengkueri lokasi acak dengan tab Pemeriksa. Anda akan melihat bahwa setiap gambar dalam koleksi kini memiliki band bernama NDVI.

Membuat komposit piksel paling hijau

Setelah Anda membuat koleksi gambar yang setiap gambarnya memiliki band NDVI, kita dapat menjelajahi cara baru untuk membuat komposit: qualityMosaic(). Anda mungkin melihat diskontinuitas antara jalur Landsat, bahkan dalam komposit piksel median. Sebagian alasan hal tersebut mungkin disebabkan oleh perbedaan fenologi sebagai akibat dari gambar di jalur yang berdekatan yang dikumpulkan pada waktu yang berbeda (khususnya, selisih 8 hari). Salah satu cara untuk meminimalkan hal ini adalah dengan mencoba menetapkan nilai piksel dalam komposit dari tahap fenologi yang kurang lebih sama, misalnya waktu kehijauan maksimum tanaman (saat daun tumbuh dan aktif secara fotosintetik). Jika kita membiarkan kehijauan maksimum ditentukan oleh NDVI maksimum, kita dapat menggunakan qualityMosaic() untuk membuat komposit yang setiap pikselnya berisi piksel NDVI maksimum dari koleksi. Sekarang Anda dapat memanfaatkan band NDVI yang ditambahkan dalam koleksi withNDVI Anda:

Code Editor (JavaScript)

// Make a "greenest" pixel composite.
var greenest = withNDVI.qualityMosaic('NDVI');

// Display the result.
var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(greenest, visParams, 'Greenest pixel composite');

Hasil kode ini akan terlihat seperti Gambar 9. Dengan membandingkan Gambar 9 dengan komposit median yang ditampilkan dalam Gambar 6, perhatikan bahwa komposit piksel paling hijau memang jauh lebih hijau. Namun, pemeriksaan cermat terhadap badan air akan memunculkan masalah yang berbeda. Secara khusus, perairan kini tampak berawan. Hal ini disebabkan oleh cara kerja metode qualityMosaic(): di setiap lokasi, seluruh deret waktu diperiksa dan piksel dengan nilai maksimum dalam band NDVI ditetapkan sebagai nilai gabungan. Karena NDVI lebih tinggi di atas awan daripada air, area perairan akan mendapatkan piksel berawan, sementara area yang ditumbuhi vegetasi akan tampak hijau karena NDVI paling tinggi saat vegetasi dalam piksel aktif secara fotosintetik.

Tutorial_api_09_greenest.png
Gambar 9. Komposit piksel paling hijau Landsat 8.

Sekarang Anda telah melihat beberapa cara untuk menggabungkan dan menyusun gambar dalam Earth Engine. Anda dapat membuat komposit nilai terbaru, median, atau piksel terhijau dari gambar yang difilter menurut waktu dan tempat atau semua gambar dalam koleksi. Anda telah mempelajari cara melakukan komputasi pada gambar dan mengekstrak informasi. Halaman berikutnya membahas cara mendapatkan informasi dari Earth Engine, misalnya sebagai diagram atau set data yang diekspor ke folder Google Drive Anda.