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

BAB 4: Biarkan Citra yang Bicara: Klasifikasi Tak Terbimbing

#Studi kasus: "Lahan apa saja yang ada di sini?"

Anda menerima citra baru Citra_Lahan.tif dari area contoh. Kepala Seksi ingin peta tutupan lahan, tetapi belum ada daftar kelas yang pasti. "Coba lihat saja, citranya mengelompok jadi apa," katanya. Itu pekerjaan klasifikasi tak terbimbing: komputer mengelompokkan piksel yang mirip, lalu Anda yang memberi nama kelompoknya.

#Konsep: klasifikasi tak terbimbing dalam tiga kalimat

Klasifikasi mengubah citra yang berisi angka pantulan menjadi peta kelas, misalnya hutan atau sawah. Pada cara tak terbimbing, komputer mengelompokkan piksel menurut kemiripan angka bandnya tanpa diberi contoh, seperti menyortir kelereng berdasarkan warna tanpa tahu namanya. Sesudah itu Anda memberi nama tiap kelompok memakai pengetahuan lapangan.

Istilah baru bab ini:

  • Klasifikasi: mengubah citra menjadi peta kelas.
  • Ruang spektral: grafik dengan sumbu berupa pantulan band. Satu piksel = satu titik.
  • Kluster: kelompok piksel yang angka bandnya mirip.
  • K-means: cara mengelompokkan dengan pusat kluster yang digeser berulang kali.
  • Area latih: lokasi yang kelas sebenarnya sudah Anda ketahui.
Ilustrasi 4.1: Ruang spektral
Grafik pantulan merah terhadap inframerah dekat: empat kelas membentuk gerombol, Kebun dan Sawah saling tumpang tindih

Lihat gambar di atas. Hutan (merah rendah, NIR tinggi) dan lahan terbuka (merah tinggi, NIR rendah) jauh terpisah. Kebun dan Sawah berdekatan dan sebagian tumpang tindih. Itulah yang membuat klasifikasi menarik: kelas yang mirip sulit dipisahkan.

K-means bekerja dalam tiga langkah yang diulang: letakkan pusat awal, tiap piksel ikut pusat terdekat, lalu pindahkan pusat ke rata-rata anggotanya. Berhenti bila pusat tidak bergeser lagi.

Ilustrasi 4.2: Langkah k-means
Skema tiga langkah: pusat awal, penugasan ke pusat terdekat, pemindahan pusat ke rata-rata

#Bagian A: QGIS

#Bagian A: Klasifikasi tak terbimbing di QGIS

#Catatan jujur tentang alat

QGIS punya alat GRASS di Processing, termasuk i.cluster (pengelompokan). Pada pengujian penulisan buku ini (QGIS 4.0.2, GRASS 8.4):

  • i.cluster berjalan dan menghasilkan berkas tanda spektral. Alat ini hanya menerima layer satu band per layer, jadi citra empat band harus dipisah dulu menjadi empat berkas, dan berkas tanda spektralnya harus berakhiran .txt.
  • Langkah berikutnya, i.maxlik (menerapkan tanda spektral ke citra), gagal dengan pesan "Unable to open signature file". Penyebab pastinya belum diketahui. Kemungkinan pembungkus QGIS belum sesuai dengan cara GRASS 8.4 menyimpan tanda spektral. [kemungkinan]
  • Satu catatan penting: processing.run pada kegagalan ini tidak melempar galat. Skrip tetap jalan seolah berhasil, padahal berkas keluaran tidak ada. Selalu periksa bahwa berkas hasil benar-benar ada.

Karena itu bab ini menulis k-means sendiri dengan NumPy. Isinya pendek, dan Anda jadi tahu persis apa yang terjadi.

#A1. Menyiapkan data dan melihat citranya

  1. Tambahkan Citra_Lahan.tif dari paket-i2 dan Area_Latih.gpkg.
  2. Buka Properties ► Symbology. Pilih Multiband color. Isi Red band = 4 (NIR), Green band = 1 (R), Blue band = 2 (G). Ini komposit warna semu: tumbuhan lebat tampak merah muda sampai merah.
  3. Perhatikan poligon Area_Latih. Ada 24 poligon, 6 untuk tiap kelas (Hutan, Kebun, Sawah, Lahan Terbuka), masing-masing 12 m x 12 m. Anggap itu hasil kunjungan lapangan.

Saat ini Area_Latih dipakai hanya untuk memberi nama kluster. Di bab 5 ia dipakai untuk melatih.

#A2. Menjalankan k-means

  1. Buka Plugins ► Python Console, klik Show Editor, dan buka i2_04_tak_terbimbing.py.
  2. Ubah dua jalur di bagian atas (PAKET_I2 dan HASIL). Klik Run.
  3. Skrip mengelompokkan seluruh 90.000 piksel dua kali: 6 kluster, lalu 10 kluster. Skrip mencetak tabel tiap kluster dan menyimpan tak_terbimbing_k6.tif dan tak_terbimbing_k10.tif.

Inti skrip, yaitu fungsi k-means:

PYTHON
def kmeans(x, k, ulang=30, seed=1):
    rng = np.random.default_rng(seed)
    pusat = x[rng.choice(len(x), k, replace=False)]
    for _ in range(ulang):
        jarak = ((x[:, None, :] - pusat[None, :, :]) ** 2).sum(axis=2)
        label = jarak.argmin(axis=1)
        baru = np.array([x[label == i].mean(axis=0) if np.any(label == i) else pusat[i] for i in range(k)])
        if np.allclose(baru, pusat, atol=1e-3):
            break
        pusat = baru
    return label, pusat

#A3. Membaca tabel dan memberi nama

Hasil uji untuk 6 kluster (kolom terakhir: jumlah piksel area latih per kelas, urutan Hutan/Kebun/Sawah/Lahan Terbuka):

KlusterPiksel (persen)RGBNIRPiksel latih H/Kb/Sw/LTNama
214.051 (15,6%)44,886,041,0153,4335/6/0/0Hutan
321.582 (24,0%)33,574,228,3141,4529/3/0/0Hutan
443.309 (48,1%)60,7104,148,1119,30/855/864/0Sawah (?)
53.131 (3,5%)146,3128,3113,6109,40/0/0/308Lahan Terbuka
65.920 (6,6%)126,6116,595,692,00/0/0/486Lahan Terbuka
12.007 (2,2%)110,1108,782,779,30/0/0/70Lahan Terbuka

Cara membacanya:

  1. Lihat kolom piksel latih. Kluster 2 dan 3 hampir seluruhnya berisi piksel latih Hutan, maka diberi nama Hutan. Kluster 5, 6, dan 1 berisi Lahan Terbuka.
  2. Lihat kluster 4: ia memuat 855 piksel latih Kebun dan 864 piksel latih Sawah, hampir sama banyak. Satu kluster tidak bisa jadi dua kelas. Skrip memberinya nama Sawah (suara terbanyak, selisih tipis), sehingga Kebun hilang dari peta. Nomor kluster boleh berbeda di komputer Anda, tetapi pola ini yang penting.

Hasil uji untuk 10 kluster:

KlusterPiksel (persen)Piksel latih H/Kb/Sw/LTNama
37.864 (8,7%)240/0/0/0Hutan
614.670 (16,3%)372/0/0/0Hutan
99.895 (11,0%)243/0/0/0Hutan
210.658 (11,8%)1/351/14/0Kebun
512.387 (13,8%)8/413/9/0Kebun
1010.580 (11,8%)0/57/366/0Sawah
113.013 (14,5%)0/43/475/0Sawah
73.037 (3,4%)0/0/0/297Lahan Terbuka
85.685 (6,3%)0/0/0/453Lahan Terbuka
42.211 (2,5%)0/0/0/114Lahan Terbuka

Dengan kluster lebih banyak, Kebun dan Sawah mulai terpisah. Harga yang dibayar: pekerjaan memberi nama bertambah, dan Anda harus yakin tiap kluster memang satu jenis lahan.

  1. Tambahkan tak_terbimbing_k6.tif ke QGIS. Buka Properties ► Symbology ► Paletted/Unique values, klik Classify, lalu beri warna dan nama (1 Hutan, 2 Kebun, 3 Sawah, 4 Lahan Terbuka).

Seberapa benar kedua peta ini, dan mana yang lebih baik? Itu dijawab di bab 6 dengan angka.

#Bagian B: ArcGIS Pro

#Bagian B: ArcGIS Pro

Alat padanannya, menurut dokumentasi Esri, adalah Iso Cluster Unsupervised Classification (Spatial Analyst, kelompok Multivariate). Alat ini menggabungkan Iso Cluster dan Maximum Likelihood Classification, dan dapat menghasilkan raster kelas beserta berkas tanda spektral. [CEK]

  1. Siapkan citra empat band sebagai satu raster multiband. Alat ini memakai semua band bila masukannya multiband. [CEK]
  2. Buka alat Iso Cluster Unsupervised Classification. Isi jumlah kelas (misalnya 6), ukuran kelas minimum, dan interval sampel. [CEK]
  3. Jalankan, lalu beri nama kluster pada tabel atribut raster hasil. [CEK]
  4. Algoritmanya ISODATA, mirip tetapi tidak sama dengan k-means: jumlah kluster akhir bisa berbeda dari angka yang Anda minta. [CEK]
  5. Pro juga punya Classification Wizard dan alat pada ekstensi Image Analyst. Ketersediaan tergantung lisensi Anda. [CEK]

#Bagian C: ArcMap 10.8

#Bagian C: ArcMap 10.8

Alat Iso Cluster Unsupervised Classification ada di Spatial Analyst Tools ► Multivariate, bersama Iso Cluster, Create Signatures, dan Maximum Likelihood Classification (nama diperiksa pada dokumentasi Esri). [CEK]

  1. Gabungkan band menjadi satu raster dengan Composite Bands. [CEK]
  2. Jalankan Iso Cluster Unsupervised Classification. Isi jumlah kelas dan keluaran. [CEK]
  3. Beri nama kelas pada tabel atribut hasil. [CEK]

#Cek paham

  1. Apa perbedaan utama klasifikasi tak terbimbing dan terbimbing?
  2. Mengapa Kebun dan Sawah sulit dipisahkan pada citra ini?
  3. Apa yang terjadi bila Anda meminta 10 kluster, bukan 6?

Jawaban:

  1. Tak terbimbing: komputer mengelompokkan dulu, manusia memberi nama kemudian. Terbimbing: manusia memberi contoh kelas lebih dulu.
  2. Angka bandnya berdekatan dan saling tumpang tindih pada ruang spektral.
  3. Kluster lebih halus, Kebun dan Sawah mulai terpisah, tetapi nama harus diberikan pada lebih banyak kluster.

#Kesalahan umum

  • Menganggap satu kluster pasti satu kelas. Cek dengan area latih. Kluster 4 di atas memuat dua kelas.
  • Menganggap hasil berhasil karena skrip tidak galat. Periksa berkas keluarannya.
  • Memilih jumlah kluster tanpa dasar. Mulai dari beberapa kali jumlah kelas yang dicari, lalu gabungkan.
  • Memakai band dengan satuan berbeda tanpa menyamakan. K-means memakai jarak, jadi band dengan angka besar mendominasi. Di data ini semua band 0 sampai 255.

#Ringkasan dan latihan

Ringkasan: klasifikasi tak terbimbing mengelompokkan piksel menurut kemiripan band. Anda yang memberi nama kluster. Kelas yang mirip bisa menyatu. Menambah jumlah kluster membantu memisahkan, tetapi menambah pekerjaan memberi nama.

Latihan:

  1. Ubah JUMLAH_KLUSTER menjadi [4, 8] dan jalankan lagi. Berapa kluster yang memuat piksel latih dua kelas?
  2. Ubah seed pada fungsi kmeans menjadi 2. Apakah tabelnya sama persis? Mengapa?

#Tabel perbandingan: klasifikasi tak terbimbing

HalQGISArcGIS ProArcMap 10.8
Alattidak ada alat siap pakai yang lengkap pada uji ini; skrip NumPy (k-means) di bukuIso Cluster Unsupervised Classification [CEK]Iso Cluster Unsupervised Classification [CEK]
Algoritmak-meansISODATAISODATA
Keluaranraster kelasraster kelas + berkas tanda spektral [CEK]raster kelas + berkas tanda spektral [CEK]
Syarattanpa ekstensiSpatial Analyst [CEK]Spatial Analyst [CEK]