CART (Classification and Regression Trees) Supervised Classification untuk Landsat 8 (GEE-013)
Supervised Classification Secara Umum
Classifier dalam Eart Engine menggunakan algoritma Machine Learning konvensional seperti CART, RandomForest, NaiveBayes, dan SVM. Pada umumnya, prosesnya adalah seperti ini :
- Buat training data. Anda dapat melakukannya dengan membuat fitur pada kelas-kelas tertentu.
- Latih algoritma dengan menggunakan training data.
- Klasifikasikan citra.
- Ukur kesalahan/akurasi.
Training data yang Anda gunakan harus berupa FeatureCollection dengan informasi di dalamnya berupa label dan properti yang berisi nama variabel prediktornya. Label kelasnya harus integer yang diawali dari 0 (bukan 1). Anda dapat mengubah nilai kelas menjadi integer menggunakan remap() jika dibutuhkan.
Training dan validasi data dapat dilakukan dengan berbagai macam cara. Anda dapat melakukannya langsung di Earth Engine dengan memanfaatkan fasilitas geometry atau dengan menggunakan mengimpor training data yang telah Anda buat dengan menggunakan QGIS atau ArcGIS.
CART
1. Mendapatkan citra
Langkah pertama yang dapat Anda lakukan adalah memilih citra yang akan Anda gunakan. Dalam contoh ini kita akan menggunakan citra Landsat 8 dari USGS level 1 Surface Reflectance yang dikerucutkan dengan menggunakan sebuah area kajian (filterBounds), range waktu (filterDate), dan tutupan awan (‘CLOUD_COVER’).
Kali ini kita akan memberikan titik sebagai acuan untuk pemilihan area kajian, gunakan Kecamatan Kepanjen sebagai pusatnya. Exit dari drawing tools. Variabel baru dari drawing tools akan masuk di import yang dianggap sebagai sebuah Geometry. Ubah nama import ini menjadi roi.
Selanjutnya kita dapat menjalankan script di bawah ini untuk mengekstrak citra yang kita inginkan dari Landsat 8 dan menambahkannya ke dalam peta sebagai komposit warna nyata.
var l8 = ee.Image(ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(roi)
.filterDate('2019-01-01', '2019-12-31')
.sort('CLOUD_COVER')
.first());
Map.addLayer(l8, {bands: ['B4', 'B3', 'B2'],min:0, max: 3000}, 'Warna nyata');
Cermati citra yang telah Anda dapatkan dan eksplor tampilan yang ada agar Anda memahami medan di daerah kajian Anda. Anda akan menyadari bahwa citra ini terlihat sedikit terlalu gelap. Masalah ini dapat kita atasi dengan cara menyesuaikan brightness/contrast menggunakan Gamma adjuster di tab Layers.
2. Mengkumpulkan training data
- Langkah pertama dalam klasifikasi data adalah mendapatkan training data dari citra untuk mengajari algoritma cara mengklasifikasikan objek di dalamnya. Itulah mengapa kita menyebutnya dengan sebutan supervised.
- Training data dalam sesi ini dibuat dengan menggunakan drawing tools dari Earth Engine. Dalam menambahkan kelas yang berbeda Anda dapat menggunakan ‘+new layer’.
- Buat kelas pertama sebagai ‘perkotaan’. Buat titik di setiap area terbangun seperti bangunan, jalan, parkir, dsb.
- Dapatkan sampel sebanyak 30 buah dan rename import sebagai ‘perkotaan’.
- Jangan lupa, ubah nama labelnya menjadi ‘perkotaan’
- Selanjutnya ubah konfigurasi import geometry (bentuk gir) dari ‘Geometry’ menjadi ‘FeatureCollection’. Gunakan ‘Add property’ dan tuliskan ‘tutupanlahan’, lalu set nilainya menjadi 0 (kelas selanjutnya menjadi 1, 2, 3, dst). Klik ok.
- Ulangi langkah 6 untuk setiap tutupan lahan dalam klasifikasi Anda, pastikan bahwa titik training tidak bertampalan dengan citra. Tambahkan ‘perairan’, ‘hutan’, serta ‘agrikultur’, masing-masing sebanyak 30 titik.
- Sekarang kita punya 4 kelas (perkotaan, perairan, hutan, dan agrikultur). Namun sebelum itu, kumpulkan semua training data itu menjadi ‘FeatureCollection’. Jalankan script berikut :
var kelas = perkotaan.merge(perairan).merge(hutan).merge(agrikultur);
print(kelas)
3. Buat training data
Setelah kita dapat menggunakan FeatureCollection, ekstrak nilai pantulan setiap piksel dari setiap band. Kita membuat training data dari penampalan titik training di atas citra. Cara ini akan memberikan training data nilai piksel masing-masing.
var bandcitra = ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'];
var training = l8.select(bandcitra).sampleRegions({
collection: kelas,
properties: ['tutupanlahan'],
scale: 30
});
print(training);
Setelah menjalankan script di atas training data akan dicetak ke dalam konsol. Perhatikan bahwa informasi ‘properties’ sekarang telah diubah menjadi tutupanlahan. Dan sekarang pada setiap titik terdapat nilai pantulan.
4. Latih classifier dan jalankan klasifikasi
Setelah melakukan langkah 1–3 Anda sekarang dapat menjalankan algoritma pengklasifikasian dengan menggunakan kelas tutupan lahan dari citra multi spektral.
var classifier = ee.Classifier.cart().train({
features: training,
classProperty: 'tutupanlahan',
inputProperties: bandcitra
});
Langkah selanjutnya adalah melakukan training ini kepada seluruh band citra. Dengan begitu kita dapat melihat nilai pantulan dalam berbagai panjang gelombang.
var terklasifikasi = l8.select(bandcitra).classify(classifier);
Tampilkan hasil klasifikasi dengan beberapa warna. Caranya adalah dengan mengurutkannya sebagaimana urutan yang telah kita buat sebelumnya : perkotaan=0, perairan=1, hutan=2, dan agrikultur=3.
Map.centerObject(kelas, 11);
Map.addLayer(terklasifikasi,
{min: 0, max: 3, palette: ['red', 'blue', 'green','yellow']},
'klasifikasi cart');
5. Lihat hasil Anda
Hasil yang ditampilkan merupakan produk dari training data yang Anda buat. Apakah Anda cukup senang dengan hasilnya? Ataukah masih terdapat ruang untuk perbaikan? Anda dapat menambahkan kelas atau kategori tutupan lahan dari hasil ini.