Lewati ke isi
Profil penulisSeri Buku GIS Kehutanan dan Pertanian/ M3
Tampilkan bagian untuk:

BAB 2: Menyingkirkan Awan: Mask, Komposit, dan Menambal Lubang

#Studi kasus: "Kenapa hutan kita tiba-tiba nol?"

Anda memperlihatkan grafik bab sebelumnya kepada Kepala Seksi. Ia mengernyit. "Hutan alam kok turun ke nol, lalu naik lagi? Hutannya bohong, atau datanya?" Datanya yang bohong. Awan dan bayangannya ikut terhitung sebagai permukaan. Sebelum menganalisis apa pun, Anda harus membersihkannya.

#Konsep: membersihkan awan dalam tiga kalimat

Awan itu seperti kaca buram di depan kamera: apa pun yang tampak di baliknya bukan permukaan bumi. Cara membersihkannya ada tiga: membuang piksel buram memakai peta penanda (mask), menggabungkan banyak tanggal menjadi satu citra bersih (komposit), atau menambal lubangnya dari tanggal sebelum dan sesudah (interpolasi). Tiga cara itu bisa dipakai bersama.

Istilah baru bab ini:

  • SCL (Scene Classification Layer): band penanda kelas piksel pada produk Sentinel-2 L2A. Kodenya: 3 bayangan awan, 4 vegetasi, 5 bukan vegetasi, 6 air, 8 awan peluang sedang, 9 awan peluang tinggi, 10 cirrus tipis.
  • Mask: peta penanda piksel yang dipakai atau dibuang.
  • Komposit median: nilai tengah dari banyak tanggal; awan yang jarang muncul ikut tersisih.
  • Interpolasi linear temporal: menarik garis lurus antara dua pengamatan bersih untuk mengisi tanggal yang hilang.
  • Pengamatan valid: jumlah tanggal bersih pada sebuah piksel.
Ilustrasi 2.1: Awan, mask, dan komposit
Skema: NDVI mentah berawan, hasil setelah mask, dan komposit median yang bersih

#Mengapa tidak cukup memakai SCL saja

SCL adalah penebakan otomatis, bukan kebenaran. Di data latihan, tepi awan yang tipis sengaja dibuat lolos dari SCL, persis seperti di dunia nyata. Akibatnya masih ada sedikit "kabut" pada piksel yang dianggap bersih. Karena itu, komposit median lebih tahan banting daripada rata-rata: nilai ekstrem dari sisa kabut tidak ikut menarik hasil.

#Bagian A: QGIS

#Bagian A: Membersihkan awan di QGIS

A.1 Membuang awan tiap tanggal (Raster Calculator)

Idenya: piksel baik (SCL bernilai 4, 5, atau 6) dibiarkan, piksel buruk dijadikan NoData. Cara ringkasnya memakai kebiasaan Raster Calculator: pembagian dengan nol menghasilkan NoData. Jadi NDVI dibagi hasil ujian "piksel baik" (bernilai 1 bila baik, 0 bila buruk).

PYTHON
# SKRIP 2.1 (cuplikan; berkas lengkap: skrip/2_1_masker_awan.py)
ekspresi = '"%s@1" / (("%s@1" = 4) OR ("%s@1" = 5) OR ("%s@1" = 6))' % (n_ndvi, n_scl, n_scl, n_scl)
processing.run("native:rastercalc", {"LAYERS": [l_ndvi, l_scl], "EXPRESSION": ekspresi, "OUTPUT": out})

Prasyarat: Skrip 1.1 sudah dijalankan. Hasil uji pada 24 tanggal: persentase piksel valid sama dengan 100 dikurangi persentase awan di Daftar_Citra.csv.

TanggalPiksel valid
5 Januari 202493,5%
10 Maret 202441,6%
13 Juni 2024100,0%
25 Desember 202539,5%

Secara keseluruhan, 25,3% piksel-tanggal tidak valid (awan, bayangan, atau cirrus). [terbukti: dihitung dari data sintetis]

A.2 Komposit median dengan Cell Statistics

Alat Cell statistics (Processing Toolbox ► Raster analysis) menghitung satu nilai per piksel dari banyak layer. Pilih statistik Median, centang Ignore NoData values, dan pilih satu layer sebagai referensi grid.

PYTHON
# SKRIP 2.2 (cuplikan; berkas lengkap: skrip/2_2_komposit_median.py)
processing.run("native:cellstatistics", {"INPUT": berkas[a:b], "STATISTIC": 3,
    "IGNORE_NODATA": True, "REFERENCE_LAYER": berkas[a], "OUTPUT_NODATA_VALUE": -9999, "OUTPUT": out})

STATISTIC 3 berarti median, dan 1 berarti Count (jumlah pengamatan valid). Skrip membuat tiga komposit:

KompositTanggalPengamatan valid per piksel (minimum, rata-rata)Piksel tanpa data
Sebelum5 Jan sampai 12 Agu 2024 (8 tanggal)3 dan 6,40
Kemarau 202413 Jun sampai 16 Sep 2024 (4 tanggal)2 dan 3,60
Sesudah21 Sep sampai 25 Des 2025 (4 tanggal)1 dan 2,70

Perhatikan komposit Sesudah: ada piksel yang hanya punya satu pengamatan bersih. Median dari satu angka adalah angka itu sendiri, jadi komposit di sana sama rapuhnya dengan citra tunggal. Selalu periksa peta jumlah pengamatan valid sebelum memercayai komposit.

A.3 Menambal lubang dengan interpolasi

Komposit menyatukan tanggal. Kadang Anda justru perlu setiap tanggal tetap ada, tanpa lubang. Untuk itu tarik garis lurus antara dua pengamatan bersih di sekitar lubang. QGIS tidak menyediakan alat siap pakai untuk ini pada tumpukan band, jadi Skrip 2.3 memakainya lewat NumPy.

PYTHON
# SKRIP 2.3 (cuplikan; berkas lengkap: skrip/2_3_isi_lubang.py)
hari = np.array([(t - tgl[0]).days for t in tgl], dtype="float64")   # waktu dalam HARI
ok = baik[:, i, j]
hasil[:, i, j] = np.interp(hari, hari[ok], ndvi[ok, i, j])

np.interp menarik garis lurus menurut hari. Di luar rentang pengamatan bersih, ia memakai nilai ujung (tidak menebak ke luar).

Uji sembunyi-isi. Cara menguji tambalan: sembunyikan sebagian pengamatan yang sebenarnya bersih, tambal, lalu bandingkan dengan nilai aslinya. Skrip 2.3 menyembunyikan 20% pengamatan bersih secara acak.

KelasGalat (RMSE) tambalan
Seluruh data (5.336 pengamatan)0,078
Hutan alam0,038
Hutan tanaman0,039
Pertanian0,158
Deforestasi0,117

Galat median mutlak keseluruhan hanya 0,014, tetapi galat membesar di sawah (musim berganti cepat) dan di bukaan (nilai melompat mendadak). Garis lurus cocok untuk perubahan pelan, bukan untuk lompatan. [terbukti: dihitung dari data sintetis]

Ilustrasi 2.2: Mengisi lubang
Satu piksel hutan: titik silang merah adalah pengamatan berawan, garis biru adalah hasil tambalan

Hasilnya: Anda punya mask per tanggal, tiga komposit, dan satu tumpukan NDVI tanpa lubang (NDVI_isi.tif).

#Bagian B: ArcGIS Pro

#Bagian B: ArcGIS Pro

  1. Mask: pakai Raster Calculator atau tool Con (Spatial Analyst) dengan syarat SCL bernilai 4, 5, atau 6. [CEK]
  2. Komposit median: pakai Cell Statistics (kelompok Spatial Analyst Tools, perlu ekstensi Spatial Analyst atau Image Analyst). Statistik yang tersedia: Majority, Maximum, Mean, Median, Minimum, Minority, Percentile, Range, Standard deviation, Sum, dan Variety. Parameter Ignore NoData aktif secara bawaan, sehingga piksel NoData dilewati.
  3. Menambal lubang: pada raster multidimensi, Pro punya alat pengisian celah di toolbox Multidimensional. Cocokkan dengan versi Anda. [CEK] Alternatif: skrip ArcPy dengan NumPy, memakai logika yang sama dengan Skrip 2.3.

#Bagian C: ArcMap 10.8

#Bagian C: ArcMap 10.8

  1. Mask: Raster Calculator atau Con (Spatial Analyst). [CEK]
  2. Komposit median: Cell Statistics, statistik MEDIAN. Dokumentasi ArcMap menyebut dua mode NoData: DATA (NoData diabaikan) dan NODATA (satu NoData membuat hasil NoData). Pilih DATA. Perlu lisensi Spatial Analyst.
  3. Menambal lubang: tidak ada alat siap pakai yang saya ketahui. Pakai skrip ArcPy dengan NumPy (Python 2.7). [CEK]

#Cek paham

  1. Mengapa komposit median lebih tahan terhadap awan sisa daripada rata-rata?
  2. Komposit Sesudah punya piksel dengan satu pengamatan valid. Apa risikonya?
  3. Mengapa tambalan linear kurang cocok untuk piksel yang baru dibuka (deforestasi)?

Jawaban:

  1. Median tidak terpengaruh nilai ekstrem. Satu atau dua nilai berkabut tidak menggeser nilai tengah.
  2. Hasilnya sama rapuhnya dengan citra tunggal. Bila satu pengamatan itu masih berkabut, hasilnya salah tanpa ada pembanding.
  3. Garis lurus menghaluskan lompatan. Pada piksel yang tiba-tiba terbuka, tambalan melandaikan perubahan yang sebenarnya mendadak.

#Kesalahan umum

  • Mempercayai SCL sebagai kebenaran. Tepi awan tipis bisa lolos. Pakai median, bukan rata-rata.
  • Memakai komposit tanpa memeriksa jumlah pengamatan valid. Selalu buat dan lihat peta jumlah.
  • Menghitung selisih tanggal dalam nomor urut. Pakai hari.
  • Menambal sebelum mendeteksi perubahan. Tambalan menyamarkan kapan perubahan terjadi.

#Ringkasan dan latihan

Ringkasan: buang piksel buruk memakai SCL, gabungkan tanggal dengan median, tambal lubang dengan interpolasi bila perlu, dan selalu cek jumlah pengamatan valid.

Latihan:

  1. Buat komposit median untuk periode Jan sampai Mar 2024 saja. Berapa piksel yang pengamatan validnya kurang dari 3?
  2. Ubah persentase yang disembunyikan di Skrip 2.3 dari 20% menjadi 40%. Bagaimana galatnya?
  3. Bandingkan komposit median dengan komposit rata-rata (statistik Mean) pada periode yang sama. Di mana bedanya paling terlihat?

#Tabel perbandingan: membersihkan awan

LangkahQGISArcGIS ProArcMap 10.8Status
Mask dari SCLRaster CalculatorRaster Calculator, ConRaster Calculator, ConQGIS terbukti; lainnya [CEK]
Komposit medianCell statistics (Median)Cell Statistics (Median)Cell Statistics (MEDIAN)Pro dan ArcMap: dokumentasi dibaca
Abaikan NoDataIgnore NoData valuesIgnore NoDataMode DATADokumentasi dibaca
Isi celah sepanjang waktuSkrip NumPyAlat Multidimensional [CEK] atau skripSkripQGIS terbukti