Deteksi Volcanic Ash dengan 3 Algoritma Filter


Kita sudah pernah membahas di artikel sebelumnya tentang macam-macam metode untuk interpretasi citra satelit. Kali ini kita akan mencoba mendeteksi debu vulkanik dengan metode gabungan yang sedikit lebih rumit dari sebelum-sebelumnya. Hanya sedikti lebih rumit, menurutku ini masih masuk hitungan mudah.

Sedikit mengenai debu vulkanik, what's the deal about volcanic ash? Dalam dunia penerbangan debu vulkanik ini sangat berbahaya. Terdeteksi sedikit saja, bandara bisa di tutup untuk sementara. Mulai dari gagal mesin, merusak fisik pesawat, sampai berkurangnya visibility bisa ditimbulkan oleh partikel dari debu vulkanik.

Dalam algoritma mendeteksi debu vulkanik di sini, kita memakai metode gabungan channel difference dan split windows. Data input yang kita perlukan adalah data netcdf satelit himawari-8 kanal IR1, IR2, dan IR4.


Pada split windows sebenarnya gabungan dari 2 metode channel difference, sehingga bisa kita simpulkan ada 3 algoritma filter (menyeleksi pixel mana yang bisa di anggap debu vulkanik) di sini.

Seperti biasa, scriptnya bisa di download di sini. Cara kerja script ini yaitu, dia akan membuat 3 matrix biner bedasarkan pixel yang lolos 'seleksi' (yang di anggap VA oleh masing-masing algoritma filter). Setelah itu matrix biner ini seluruhnya di jumlahkan, lalu berdasarkan penjumlahan matrix itu kita buat matrix biner baru, yang mana dari penjumlahan itu jika ada pixel yang nilainya 3 (lolos filter dari 3 algoritma filter) maka pixel itu terdeteksi sebagai volcanic ashTerdeteksi sebagai VA di sini maksudnya pada matrix di pixel tersebut di beri nilai 1. Tiga algoritma filter yang melakukan tugas sebenarnya di deskripsikan dalam 3 function.

 def algoTVAP(dataB07, dataB13, dataB15, thres):  
      res = np.zeros((len(dataB07), len(dataB07[0])), dtype=np.int)  
      print len(dataB07)  
      print len(dataB07[0])  
      for i in xrange(len(dataB07)):  
           for j in xrange(len(dataB07[0])):  
                #tes = 60 + 10 * (dataB15[i,j] - dataB13[i,j]) + 3 * (dataB07[i,j] - dataB13[i,j])  
                tes = 60 + (10 * (dataB15[i,j] - dataB13[i,j]) + (3 * (dataB07[i,j] - dataB13[i,j])))  
                if (tes > thres):  
                     res[i,j] = 1  
      return res  
 def split1(dataB13, dataB15):  
      res = np.zeros((len(dataB13), len(dataB13[0])), dtype=np.int)  
      for i in xrange(len(dataB13)):  
           for j in xrange(len(dataB13[0])):  
                if (dataB13[i,j] < 233):  
                     if (dataB13[i,j] - dataB15[i,j] < -2):  
                          res[i,j] = 1  
                     else:  
                          res[i,j] = 0  
                else:  
                     if (dataB13[i,j] - dataB15[i,j] < 0):  
                          res[i,j] = 1  
                     else:  
                          res[i,j] = 0  
      return res  
 def split2(dataB07, dataB13):  
      res = np.zeros((len(dataB13), len(dataB13[0])), dtype=np.int)  
      for i in xrange(len(dataB07)):  
           for j in xrange(len(dataB07[0])):  
                if (dataB07[i,j] - dataB13[i,j] > 0):  
                     res[i,j] = 1  
                else:  
                     res[i,j] = 0  
      return res  

Hasilnya adalah plotting sebagai berikut


Bintik-bintik merah pada peta di atas terdeteksi sebagai volcanic ash. Debu vulkanik ini bersumber dari pulau lombok. Ya benar, ini adalah kejadian letusan gunung rinjani, lombok pada tanggal 1 Agustus 2016.


Sekian pembahasan kita kali ini. Cukup sederhana bukan.

referensi:
Mata kuliah Interpretasi Citra Satelit STMKG semeter VI

Komentar

  1. cara instal script bagaimana gan,,,di blogspot kk gk bisa,,,infonya,,,

    BalasHapus
    Balasan
    1. udah install python sebelumnya? scriptnya taruh di notepad aja kalau pake windows setelah itu jalankan pake idle atau dari terminal di panggil scriptnya bisa

      Hapus

Posting Komentar