Mengukur Indeks Vegetasi (VI) dengan Memanfaatkan Sifat Klorofil


Untuk yang kedua kalinya artikel ini akan di awali dengan rant dari author, mohon disimak :))

Udah lama pengen nge-rant tapi sekarang lupa pengen rant apa...sigh. Oh iya, sure time fliest so fast huh. Tapi menurutku perasaan cepat atau lambat waktu yang kita rasakan itu relatif terhadap nikmatnya hidup kita sehari-hari. Maksudku, menurutmu kenapa menunggu 1 jam sebelum berbuka puasa itu lama sekali rasanya? Mengapa ketika kita kebelet ingin buang air tapi terpaksa harus mengantri karena ada yang pakai kamar mandi walau cuma 10 menit itu rasanya sangat lama? Kenapa makanan atau minuman yang enak  rasanya cepat sekali habisnya? Jawabannya karena perspektif atau fokus kita. Hipotesis dariku, manusia cenderung akan mengurangi kerja inderawinya ketika nyaman tapi menjadi fokus inderawinya ketika menjadi tidak nyaman. Lantas kemana pikiran kita ketika tidak fokus pada inderawi tersebut? Terbang kedunia fantasi, mengkhayalkan kemungkinan-kemungkinan yang akan terjadi atau membayangkan seandainya keadaan yang nyaman ini menjadi lebih nyaman. Merugilah wahai manusia. Sungguh, bahkan tubuh kita yang fana ini sudah merupakan ujian/cobaan dari Tuhan bagi yang mempercayai-Nya. Dari renungan ini saya sedikit sadar tentang arti dari "jangan sampai dikendalikan nafsumu sendiri".

But you know what? Dari kecil sampai sekarang, saya tidak pernah yakin atau mempercayai pemikiran-pemikiran saya sendiri yang salah satunya seperti paragraf di atas ini. Selalu terasa seperti 'ada yang kurang'. Sisiku yang lain sangat menentang pendapatku pada paragraf di atas itu, tapi tidak akan saya bahas karena akan sangat panjang. In nutshell, pada saat saya 'merenung' akan lebih banyak muncul pertanyaan baru daripada solusi yang ingin dicapai :((

Ok cukup rant tidak jelas dari saya. Kali ini kita akan mengukur indeks vegetasi di daerah Indonesia dan sekitarnya. Apa itu vegetasi? Vegetasi di sini mengacu ke seberapa hijau daerah tersebut. Karena seberapa hijau ini tidak punya besaran internasional (SI), oleh karena itu 'seberapa hijau' di sini memakai ukuran indeks (sehingga tidak berdimensi), itulah kenapa namanya adalah indeks vegetasi.

Dengan memahami pengertian dari indeks vegetasi, kita beralih tentang bagaimana cara mengukurnya. Untuk pengukurannya, kita memanfaatkan sifat dari klorofil pada tumbuhan yang menyerap sinar tampak. Penyerapan dari sinar tampak ini membuat sinar yang dipantulkan kembali dan ditangkap oleh satelit menjadi lebih sedikit jika dibandingkan dengan gelombang NIR (Near Infrared) yang ditangkap oleh satelit. Sehingga dari sini kita bisa mengukur seberapa hijau suatu wilayah dengan mengetahui selisih dari pantulan NIR dan VIS (sinar merah) yang ditangkap satelit. Perumusan matematisnya adalah 


dimana:
θnir = reflektansi dari kanal near infrared (sekitar 0.725-1 μm)
θred = reflektansi dari kanal sinar tampak warna merah (0.5-0.68 μm)

Oh iya, NDVI (Normalized Difference Vegetation Index) sendiri adalah salah satu metode untuk pengukuran indeks vegetasi. Nilainya berkisar dari -1 (non-vegetasi) sampai 1 (vegetasi). Menurut NASA, wilayah yang nilai NDVI dibawah 0.2 sudah keluar dari kelompok vegetasi. Wilayah-wilayah itu diasumsikan sebagai wilayah bebatuan atau perairan atau mungkin wilayah yang ditutupi awan. Oleh karena itu, pada algortima dari script kita nanti, kita akan mengeliminasi semua wilayah yang nilai NDVI nya dibawah 0.2.

Jurnal rujukan artikel kali ini (ada dibagian referensi pada penghujung tulisan ini) menggunakan data dari satelit polar sementara kita akan menggunakan satelit geostasioner yaitu satelit Himawari 8 yang mempunyai 16 kanal. Untuk kanal near infrared kita mengambil kanal 4 dan untuk sinar merah kanal 3.

Tabel kanal dan panjang gelombang satelit Himawari dan MTSAT (courtesy: http://www.data.jma.go.jp/mscweb/en/himawari89/space_segment/spsg_ahi.html)

Scriptnya seperti biasa bisa di download di sini. Jika kita running script ini, maka hasilnya


Woah, masih banyak daerah non-daratan yang belum di eliminasi. Jika menurut teorinya tadi wilayah non vegetasi bisa di eliminasi dengan mengeliminasi semua wilayah yang nilai NDVInya dibawah 0.2, tampaknya masih belum sempurna karena wilayah non-daratan masih terplot untuk warna NDVInya. Tampaknya wilayah tutupan awan yang mengacau pada data plot-an kita kali ini. Dari sini kita mengambil asumsi bahwa wilayah tutupan awan belum di eliminasi sebagian besarnya. Tapi sebenarnya, ketika algoritma ini (termasuk eliminasi wilayah NDVI dibawah 0.2) saya terapkan di MATLAB hasilnya, semua wilayah non-daratan terelimasi. Entah mungkin ada perbedaan algoritma plotting pada library matplotlib di python dan algoritma ploting di MATLAB, saya masih belum tahu sampai saat ini.

Berangkat dari asumsi wilayah tutupan awan yang belum di eliminasi dari wilayah daratan maupun non-daratan, maka wilayah tutupan ini akan kita eliminasi dengan algoritma pendeteksi awan. Sebenarnya, wilayah tutupan awan pada daerah daratan lebih berpotensi mengacaukan ploting kita daripada tutupan di daerah non-daratan karena bisa menyebabkan salah interpretasi pada nilai vegetasi sebenarnya. Sedangkan pada wilayah non-daratan, berapapun nilai NDVI yang terplot, kita semua tahu itu cuma data noise karena mustahil wilayah lautan mempunyai nilai NDVI di atas 0. Ini merupakan konsekuensi dari asumsi kita yang menganggap wilayah tutupan awan belum kita eliminasi dari filter nilai NDVI dibawah 0.2 .

Salah satu algoritma sederhana mendeteksi awan yang pernah kita bahas adalah metode threshold dengan memanfaatkan data brightness temperature IR1 atau kanal 13 Himawari 8Threshold yang kita gunakan pada artikel sebelumnya untuk mendeteksi langit cerah adalah 298 Kelvin. Artinya, semua wilayah yang brightness temperaturenya di atas 298 Kelvin pada IR1 di anggap mempunyai langit cerah atua tanpa tutupan awan. Dari hasil trial and error, saya sedikit menurunkan nilai thresholdnya menjadi 296.


Pada script yang sudah di siapkan tadi, sebenarnya sudah saya desain untuk sekalian mengeliminasi daerah tutupan awan hanya saja saat baris kode pengeliminasiannya saya comment out. Jadi untuk mengaktifkan fitur eliminasi wilayah tutupan awan pada script kita, tinggal mengubah ini

 NDVI = (B04 - B03) / (B04 + B03)  
 NDVI[NDVI < 0.2] = np.nan  
 B13[B13 < clearthreshold] = np.nan  
 #NDVI = np.ma.masked_invalid(np.atleast_2d(NDVI))  
 NDVI = np.ma.masked_where(np.isnan(NDVI),NDVI)  
 #NDVI = np.ma.masked_where(np.isnan(B13),NDVI)  

menjadi ini

 NDVI = (B04 - B03) / (B04 + B03)  
 NDVI[NDVI < 0.2] = np.nan  
 B13[B13 < clearthreshold] = np.nan  
 #NDVI = np.ma.masked_invalid(np.atleast_2d(NDVI))  
 NDVI = np.ma.masked_where(np.isnan(NDVI),NDVI)  
 NDVI = np.ma.masked_where(np.isnan(B13),NDVI)  

Ini baris mana? Coba pakai fitur ctrl+f pada text editor atau browser yang sekarang anda pakai sekarang :) .

Sekarang kita running scriptnya dan hasilnya

Terlihat jelas perbedaan indeks vegetasi Australia yang didominasi oleh wilayah gurun dengan wilayah Indonesia khususnya Kalimantan.

Urghh, masih ada noise yang menyebalkan yang terpampang di wilayah lautan. Tapi tak apalah, setidaknya sudah berkurang banyak dibanding yang tadi. Di sini kita berasumsi semua wilayah tutupan awan sudah di eliminasi yang artinya ploting NDVI yang sekarang adalah yang sesungguhnya.

Apa ada solusi untuk bisa mengetahui indeks vegetasi wilayah daratan tutupan awan ini? Ada, kita hanya perlu lebih banyak data saja dan berharap pada data selanjutnya wilayah itu tidak terkena tutupan awan :)) . Artinya, kita harus mempunyai banyak data sekitar beberapa minggu atau 1 bulan. Untuk efektifnya, misal kita mengukur NDVI pada data 1 Januari 2017 jam 05.00 UTC (12 siang untuk WIB), untuk data selanjutnya bagusnya kita mengambil data 2 Januari 2017 jam 05.00 UTC. Karena kalau kita mengambil data pada jam yang berdekatan pada hari yang sama, kemungkinan besar wilayah yang tertutup awan tersebut masih tetap ditutupi awan. Setelah itu, hasil pengukuran NDVI tersebut kita rata-ratakan per pixel dengan mengabaikan data-data yang kita filter (daerah tutupan awan sehingga pembagi untuk tiap pixel bisa beda-beda untuk mencari rata-ratanya).

Selain itu, algoritma pendeteksi awannya harus lebih baik dari ini. Menurut saya, algoritma ini masih sangat kasar dalam mendeteksi awan mengingat algoritmanya sangat sederhana dan hanya mengandalkan 1 kanal saja.

Mungkin itu saja, sebenarnya saya ingin menerapkan solusi dari masalah ini ke script kita, tapi terkendala pada server data satelit netcdf yang mendadak datanya menjadi sangat sedikit (katanya ada maintenance) dan algoritman pendeteksi awan yang masih belum mumpuni. Sekian.

referensi:
Analisis Indeks Vegetasi menggunakan Data Satelit NOAA/AVHRR dan TERRA/AQUA-MODIS oleh Dodi Sudiana dan Elfa Diasmara

Komentar