Deteksi Jenis Awan dengan Metode Threshold (Menggunakan Python dan Grads)


Sebelumnya kita sudah pernah membahas tentang deteksi awan di artikel terdahulu. Jadi apa yang baru di sini? Kalau sebelumnya kita hanya mendeteksi awan CB (cumulonimbus), kali ini kita akan mendeteksi awan CB, awan rendah, awan menengah dan awan tinggi.

Sedikit review materi interpretasi citra satelit, sebenarnya dalam interpretasi citra satelit ada 3 metode, yaitu:
- Thresholding
- Multispectral channel (RGB)
- Split window
- Channel difference (cari selisih brightness temperature antar channel)

Pada pembahasan sebelumnya untuk mendeteksi awan CB, kita menggunakan teknik dual channel difference. Kali ini kita akan menggunakan teknik thresholding. Sesuai namanya, metode ini sangat sangat sederhana kita hanya memakai 1 channel (IR1 untuk kasus kali ini) dan tentukan threshold untuk masing-masing awan yang ingin di identifikasi and we are done. Dan tentu saja threshold yang kita pakai di sini sudah pernah diteliti dan diuji.

Kali ini kita akan menggunakan script grads dan python untuk merealisasikan metode ini.

Grads

Pada artikel sebelum-sebelumnya kita (sepertinya pernah) hanya menyinggung nama grads tanpa pernah sekalipun membahasnya. Ok, apa itu grads? grads adalah software untuk melakukan analisis grid dan menampilkannya. Software ini memang di desain untuk keperluan sains kebumian. Dalam melakukan manipulasi dan visualisasi ini, grads punya bahasa pemrograman sendiri. What, harus belajar bahasa baru hanya untuk pekerjaan ini!? Tenang, meskipun begitu bahasa grads ini tergolong mudah dan cepat dikuasai. 

 'reinit'  
 'sdfopen IR1.nc'  
 #==============================================================  
 *Seting tampilan  
 'set lon 90 145'  
 'set lat -15 10'  
 'set display color white'  
 'clear'  
 'set csmooth on'  
 'set mpdset hires'  
 'set clopts -1 3 0.14'  
 'set gxout shaded'  
 'set font 0'  
 'set strsiz 0.12 0.12'  
 'set grid off'  
 #'set mproj scaled'  
 'set map 4 1 6'  
 'set string 14 tl 6 0'  
 'draw string 2.29 8 `1 Jenis Awan'  
 'draw string 3.2 1.2 `1 CB'  
 'draw string 4 1.2 `1 High'  
 'draw string 4.8 1.2 `1 Midle'  
 'draw string 5.6 1.2 `1 Low'  
 'draw string 6.4 1.2 `1 Clear'  
 #================================================================  
 *Setting warna  
 'set rgb 21 0 0 0'  
 'set rgb 22 255 140 0'  
 'set rgb 23 240 230 140'  
 'set rgb 24 127 255 212'  
 'set rgb 25 250 60 60'  
 'set rgb 26 0 0 255'  
 #===============================================================  
 'set ccols 25 24 23 22 21'  
 'set clevs 233 252 272 286 298'  
 'set black 15 1000'  
 'd IR'  
 'cbarn'  

Syntax yang sederhana beserta comment-comment yang sangat membantu di sini, membuat orang awampun yang baru melihat script ini akan langsung mengerti. Bagian spesial yang sepertinya butuh penjelasan sedikit adalah bagian penentuan tresholding dan visualisasi data di peta.

 'set ccols 25 24 23 22 21'  
 'set clevs 233 252 272 286 298'  

Ini adalah bagian thresholdingnya. Di pertama kita menyatakan warna untuk kontur level yang mana ini saling berpasang-pasangan dengan tresholdnya yang dinyatakan di set clevs (nilai di bawah 233 memakau warna format 25, dibawah 252 memakai warna format 24 dan seterusnya).

Di bawah 233, di bawah 252, di bawah bla bla bla apa maksudnya ini? Nilai-nilai itu mengacu ke nilai parameter yang ingin kita tampilkan dan ya, ini berhubungan langsung dengan visualisasi datanya di peta.

 'd IR'  
 'cbarn'  

'IR' di sini adalah salah satu variabel data netcdf yang kita buka.

 'reinit'  
 'sdfopen IR1.nc'  

Sehingga threshld yang sudah kita deklarasaikan tadi akan berefek pada variabel ini. Beda data netcdf tentu beda nama variabel yang ada di dalamnya, untuk melihat variabel apa saja yang ada di dalam suatu file netcdf dengan grads, pakai perintah

 ga-> q file  
 File 1 : IR Indonesia 2017051601 UTC  
  Descriptor: IR1.nc  
  Binary: IR1.nc  
  Type = Gridded  
  Xsize = 3000 Ysize = 2000 Zsize = 1 Tsize = 1 Esize = 1  
  Number of Variables = 1  
    ir 0 t,y,x IR  

Dimensinya pun ikut diperlihatkan di situ. Hasil dari script ini adalah seperti ini


Python


Ini sudah banyak kita pakai dan bahas di blog ini. Scriptnya bisa di dapatkan di sini. Loh, script grads yang tadi kenapa tidak dimasukkan di github juga? Well, itu bukan scriptku...itu cuma script dari dosen yang kumodif sedikit :p . Saya berniat hanya memasukkan script-script buatanku sendiri di github.

Thresholdingnya diurus pada function ini

 def detkindcloud(under, upper, data):  
      Y, X = np.shape(data)  
      cloudmat = np.zeros((Y, X), dtype = np.int)  
      cloudmat[data < upper] = 1  
      cloudmat[data < under] = 0  
      return cloudmat  
 def detclear(upper, data):  
      Y, X = np.shape(data)  
      cloudmat = np.zeros((Y, X), dtype = np.int)  
      cloudmat[data > upper] = 1  
      return cloudmat  

Algoritmanya hanya, baca data netcdf -> deteksi awan melalui tresholding sehingga menghasilkan matrix biner (elemen matrix bernilai 0 atau 1) -> plotting matrix ke peta. Bagian tersulit dari script python ini hanya mencari cara plotting yang bagus, sampai saya luncurkan artikel ini saya masih belum tahu cara menampilkan colorbar di bawah peta seperti pada grads (I think grads win this time). Hasil dari script python kita menggunakan data netcdf IR1 dari JMA adalah seperti ini

Warna merah untuk awan CB, oranye untuk awan rendah, kuning untuk awan menengah dan cyan untuk awan tinggi.

Ya, kelihatan kurang e s t e t i k a nya jika dibandingkan dengan hasil dari grads.

Dan sekian materi singkat kita kali ini. Akhir kata, interpretasi citra satelit itu seperti mencoba mengenali seseorang dari gedung yang sangat tinggi hanya dengan melihat ujung kepalanya. Sekian.


referensi:
Mata kuliah Interpretasi Citra Satelit STMKG semeter VI

Komentar

  1. Bermanfaat, coba kunjungi https://rootorial.com jika ingin belajar pemrograman android dan python

    BalasHapus
  2. untuk mendapatkan datanya dimana bang

    BalasHapus

Posting Komentar