Pada awalnya saya berpikir kalau algoritma mendeteksi awan cb (cumulonimbus) ini sangat rumit, sampai-sampai saya berpikir kalau ini hanya bisa diselesaikan dengan metode saraf tiruan (Artificial Neural Network). Ternyata tidak, kita bisa mendeteksi awan cb ini dengan memanfaatkan ciri khas dari fisis awan cb seperti suhu dan tinggi puncak awan cb. Informasi ini semua didapatkan dari brightness temperature pada kanal-kanal citra satelit.
Deskripsi singkat soal awan cb bagi yang tidak tahu, awan cb inilah satu-satunya jenis awan yang bisa menghasilkan petir karena hanya jenis awan inilah yang muatannya terbagi dengan rapi sehingga awan ini bisa diibaratkan sebagai kapasitor raksasa. Kenapa bukan baterai? Ini karena discharge dari awan jenis ini sangat dahsyat (petir dan guntur) yang mana merupakan ciri khas dari kapasitor (discharge yang cepat). Awan ini juga sumber merupakan sumber malapetaka bagi penerbangan. Akan tetapi walaupun begitu, petir dari awan cb ini ikut berperan dalam menyuburkan tanah (pembentuk nitrat).
Ok, jadi dalam algoritmanya kita akan menganalisis citra satelit ini per pixel. Kanal-kanal yang kita butuhkan adalah IR1, IR2, dan IR3. Disini kita memakai data netcdf yang didapat dari satelit himawari untuk tanggal 13 April 2017 jam 14.30 UTC.
Script lengkapnya sudah saya buatkan dan bisa di download di sini. Algoritma pemrogramannya akan dijelaskan setelah ini. Jadi pertama kita (tentu saja) membaca file input (data netcdf) terlebih dahulu.
Lalu kita menganalisisnya per pixel melalui serangkaian tes (tercantum di source codenya) .
rawIR1 = '/home/genomexyz/awancb/IR1.nc'
rawIR2 = '/home/genomexyz/awancb/IR2.nc'
rawIR3 = '/home/genomexyz/awancb/IR3.nc'
#read input
readIR1 = Dataset(rawIR1, mode = 'r')
readIR2 = Dataset(rawIR2, mode = 'r')
readIR3 = Dataset(rawIR3, mode = 'r')
#lat and lon matrix
#all nc file here have a same spatial matrix
lat = readIR1.variables['latitude'] #grid 0,0 is bottom left and max,max is upper right
lon = readIR1.variables['longitude']
#exract data from dataset
matrixIR1 = readIR1.variables['IR'][0]
matrixIR2 = readIR2.variables['I2'][0]
matrixIR3 = readIR3.variables['WV'][0]
Lalu kita menganalisisnya per pixel melalui serangkaian tes (tercantum di source codenya) .
#all matrix here is list object
def createbinermat(rightmat, leftmat, treshold):
right = np.asarray(rightmat)
left = np.asarray(leftmat)
y, x = np.shape(right)
out = np.zeros((y,x), dtype=np.int)
for i in xrange(y):
for j in xrange(x):
if (rightmat[i][j]-leftmat[i][j]) <= treshold:
out[i][j] = 1
else:
out[i][j] = 0
return out
.
.
.
#selection based on criteria
matrixcrit1 = createbinermat(matrixIR1, matrixIR2, crit1)
matrixcrit2 = createbinermat(matrixIR1, matrixIR3, crit2)
#detect cb
finalmatrix = matrixcrit1 + matrixcrit2
dimy, dimx = np.shape(finalmatrix)
cb = np.zeros((dimy,dimx), dtype=np.int)
for i in xrange(dimy):
for j in xrange(dimx):
if finalmatrix[i][j] == 2:
cb[i][j] = 1
else:
cb[i][j] = 0
Kemudian terakhir kita plot
#make our lon and lat 2D
lon1, lat1 = np.meshgrid(lon, lat)
m = Basemap(resolution='l', projection='merc', \
llcrnrlon=90, llcrnrlat=-20, urcrnrlon=150, urcrnrlat=20) #for mercator
#draw map coastline, etc
m.drawcoastlines(linewidth=0.25)
m.drawcountries(linewidth=0.25)
#finishing
plt.title('Pendeteksi Awan CB ver 1.0')
cs = m.pcolormesh(lon1, lat1, np.squeeze(cb), cmap='Set3', latlon=True)
#cbar = m.colorbar(cs, location='bottom', pad="10%") #add color bar
plt.show()
Sehingga kita dapatkan hasilnya seperti ini
Kemudian kita bandingkan dengan hasil olahan BMKG (peta kelembapan) untuk verifikasi
Dan terlihat bahwa titik-titik yang kita deteksi sebagai awan cb di peta output kita ternyata jika dilihat pada peta RH dari BMKG, itu merupakan titik-titik yang dianggap basah atau kelembapannya tinggi. Ini sesuai dengan sifat fisis awan cb yang basah karena penuh dengan uap air yang merupakan 'bahan bakarnya'.
referensi:
Mata kuliah Interpretasi Citra Satelit STMKG semeter VI
https://en.wikipedia.org/wiki/Paleolightning, di akses pada 13 April 2017
boleh kah saya meminta alamat email / kontak yang bisa d hubungi? karena saya tertarik mengenai pengolahan data yang dilakukan d atas, saya memiliki beberapa pertanyaan, terimakasih sebelumnya
BalasHapus