Indeks Vegetasi Mangrove (MVI) merupakan sebuah indeks spektral yang secara spesifik dikembangkan untuk meningkatkan keakuratan dalam pemetaan mangrove. Indeks ini bekerja dengan memanfaatkan sifat pantulan cahaya (reflektansi) yang khas dari vegetasi mangrove, khususnya pada spektrum hijau, inframerah dekat (NIR), dan inframerah gelombang pendek (SWIR). Menurut Baloloy et al. (2020), MVI dirancang untuk menjawab kekurangan indeks vegetasi lain seperti NDVI, yang seringkali kesulitan membedakan mangrove dari vegetasi darat lainnya karena karakteristik unik mangrove terkait kelembapan dan kerapatan tajuknya.
Dalam tutorial ini, kita akan menggunakan Mangrove Vegetation Index (MVI) untuk tujuan utama memetakan distribusi spasial mangrove, bukan untuk mengestimasi biomassa. Keunggulan MVI adalah kemampuannya yang dirancang khusus untuk mendeteksi vegetasi mangrove dengan cara memanfaatkan kontras antara pantulan spektral yang tinggi pada kanal inframerah gelombang pendek (SWIR) dan inframerah dekat (NIR) dengan pantulan yang rendah pada kanal hijau (Green).
Menurut Baloloy et al. (2020), formula untuk menghitung MVI adalah:
\[ MVI = \frac{NIR - Green}{SWIR - Green} \]
Untuk citra Sentinel-2A , band yang akan kita gunakan dalam perhitungan tersebut adalah:
SWIR: Band 11 (1610 nm)
Green: Band 3 (560 nm)
NIR: Band 8 (842 nm)
Perhitungan MVI akan diterapkan pada setiap piksel di seluruh area citra. Nantinya, hasil dari indeks ini akan menjadi dasar untuk klasifikasi berbasis ambang batas (threshold classification) guna mengidentifikasi area mana yang merupakan mangrove. Peta mangrove yang dihasilkan dari proses ini kemudian akan kita gunakan sebagai batas area analisis (mask) untuk tahapan selanjutnya, seperti estimasi karbon dengan indeks vegetasi lain.
Menurut Gonzalez and Woods (2018), Metode global thresholding merupakan teknik fundamental dalam segmentasi citra yang bertujuan untuk memisahkan objek dari latar belakang. Proses ini dimulai dengan mendefinisikan sebuah nilai ambang batas skalar tunggal, T. Selanjutnya, setiap piksel dalam citra masukan berskala keabuan, f(x,y), dievaluasi berdasarkan predikat biner. Secara spesifik, nilai intensitas piksel pada setiap koordinat (x,y) diuji: jika f(x,y)>T, piksel tersebut diklasifikasikan sebagai bagian dari objek dan nilai intensitas pada citra keluaran, g(x,y), diatur menjadi nilai maksimum (misalnya, 255 atau 1). Namun, jika kondisi tersebut tidak terpenuhi (f(x,y)≤T), piksel tersebut ditetapkan sebagai latar belakang dengan mengatur nilai g(x,y) menjadi 0. Nilai threshold yang digunakan tidak ditentukan secara manual, melainkan mengacu langsung pada hasil penelitian Baloloy et al. (2020). Berdasarkan tabel penelitian tersebut untuk kawasan Asia Tenggara, piksel dengan nilai MVI ≥ 3.5 diklasifikasikan sebagai mangrove.
Secara matematis, proses klasifikasi biner ini (menurut Gonzalez dan Wood, 2018) dapat direpresentasikan dengan rumus berikut :
\[ g(x,y) = \left\{ \begin{array}{ll} 1 & \text{if } I(x,y) \geq T \\ 0 & \text{if } I(x,y) < T \end{array} \right. \]
Nilai Threshold MVI Mangrove Asia Baloloy et al. (2020)
\[ \begin{array}{llll} \hline \textbf{Region} & \textbf{Mangrove Site} & \textbf{Mangrove Type} & \textbf{MVI Threshold} \\ \hline \text{Southeast Asia} & \text{Philippines (countrywide mean threshold)} & \text{Fringe} & 3.5 \\ & \text{Can Gio Mangrove Forest, Vietnam} & \text{Delta} & 3.5 \\ & \text{West Kalimantan, Indonesia} & \text{Delta} & 3.5 \\ & \text{Prey Nob, Cambodia} & \text{Fringe} & 3 \\ & \text{Mueang Trat District, Trat, Thailand} & \text{Fringe/Estuary} & 3 \\ \text{South America} & \text{Baia do Arraial, Amazon Coast, Brazil} & \text{Delta} & 3 \\ \text{Africa} & \text{Mabokweni, Tanzania} & \text{Estuary} & 3 \\ \text{Australia} & \text{Prince Regent National Park, Western Australia} & \text{Estuary} & 3 \\ \hline \end{array} \]
Jika diaplikasikan pada indeks MVI (Mangrove Vegetation Index) dengan nilai thresshold pada lokasi penelitian sebesar ≥ 3.5 maka pengaplikasian rumus thresshold sebagai berikut :
\[ Mangrove = \left\{ \begin{array}{ll} 1 & \text{jika } I(MVI) \geq 3.5 \\ 0 & \text{jika } I(MVI) < 3.5 \end{array} \right. \]
Paket R ‘terra’ versi 1.8-60, yang dipublikasikan pada 21 Juli 2025, adalah sebuah perangkat lunak yang dirancang untuk analisis data spasial. Dikelola dan dikembangkan oleh Hijmans et al. (n.d.) bersama dengan beberapa kontributor lainnya, paket ini menyediakan berbagai metode untuk mengolah data vektor (seperti titik, garis, dan poligon) dan data raster (grid). Fungsionalitasnya mencakup operasi geometris seperti intersect dan buffer, serta berbagai operasi raster termasuk lokal, fokal, global, dan zonal. Selain itu, ‘terra’ mendukung penggunaan model regresi untuk prediksi spasial, mampu memproses file berukuran sangat besar, dan dirancang untuk menggantikan paket ‘raster’ dengan performa yang lebih cepat serta penggunaan yang lebih mudah. Paket ini memerlukan R versi 3.5.0 atau yang lebih baru, memiliki lisensi GPL (>= 3), dan membutuhkan beberapa perangkat lunak sistem seperti C++17, GDAL, GEOS, dan PROJ untuk dapat berfungsi. Pengguna dapat menemukan informasi lebih lanjut di situs web rspatial.org atau melaporkan masalah melalui halaman GitHub proyek.
Langkah pertama dalam analisis data spasial di R adalah memastikan
paket yang dibutuhkan sudah terpasang. Pada tutorial ini, kita
menggunakan paket terra yang merupakan paket terbaru dan lebih cepat
dibandingkan raster. Paket ini mendukung pengolahan data raster dan
vektor, serta sangat cocok untuk analisis citra satelit seperti pemetaan
mangrove menggunakan MVI. Perintah
install.packages("terra") digunakan untuk memasang paket
dari CRAN, sedangkan library(terra) berfungsi memanggil
paket agar siap digunakan pada sesi analisis. Intalasi terra dapat
dilakukan dengan menulis kode sebagai berikut:
install.packages("terra")
Setelah paket terra berhasil diinstal dan dimuat menggunakan sintaks
library(terra), tahap berikutnya adalah memanggil data
raster yang sudah diunduh. Pada contoh ini digunakan data Sentinel-2
dengan tiga band utama yang diperlukan untuk perhitungan Mangrove
Vegetation Index (MVI), yaitu Band 8 (NIR), Band 3 (Green), dan Band 11
(SWIR). Ketiga file tersebut telah disimpan di komputer dalam format
GeoTIFF (.tif). Pemanggilan data dilakukan dengan membuat variabel,
kemudian didefinisikan menggunakan tanda <- dan sintaks
rast("alamat/file.tif"), di mana alamat disesuaikan dengan
lokasi penyimpanan pada perangkat komputer.
Selain mempersiapkan band untuk perhitungan indeks, visualisasi citra juga dapat dilakukan dengan membuat komposit false color. Pada kombinasi NIR–SWIR–Green, vegetasi mangrove biasanya tampak dengan warna oranye hingga coklat, sehingga memudahkan identifikasi awal sebelum dilakukan perhitungan indeks.
# Pemanggilan data
library(terra)
## terra 1.8.42
NIR <- rast("D:/TUTORIAL R/MVI/NIR.tif")
Green <- rast("D:/TUTORIAL R/MVI/GREEN.tif")
SWIR <- rast("D:/TUTORIAL R/MVI/SWIR.tif")
# Cek informasi raster
NIR
## class : SpatRaster
## dimensions : 5227, 3364, 1 (nrow, ncol, nlyr)
## resolution : 8.983153e-05, 8.983153e-05 (x, y)
## extent : 97.86669, 98.16888, 4.424832, 4.894381 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : NIR.tif
## name : B8
Green
## class : SpatRaster
## dimensions : 5227, 3364, 1 (nrow, ncol, nlyr)
## resolution : 8.983153e-05, 8.983153e-05 (x, y)
## extent : 97.86669, 98.16888, 4.424832, 4.894381 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : GREEN.tif
## name : B3
SWIR
## class : SpatRaster
## dimensions : 5227, 3364, 1 (nrow, ncol, nlyr)
## resolution : 8.983153e-05, 8.983153e-05 (x, y)
## extent : 97.86669, 98.16888, 4.424832, 4.894381 (xmin, xmax, ymin, ymax)
## coord. ref. : lon/lat WGS 84 (EPSG:4326)
## source : SWIR.tif
## name : B11
# Komposit false color (NIR, SWIR, Green)
plotRGB(c(NIR, SWIR, Green),
r = 1, g = 2, b = 3,
stretch = "lin")
Setelah ketiga band utama berhasil dipanggil, tahap selanjutnya adalah melakukan perhitungan Mangrove Vegetation Index (MVI). Indeks ini dihitung menggunakan kombinasi tiga band Sentinel-2, yaitu Band 8 (NIR), Band 3 (Green), dan Band 11 (SWIR). Rumus MVI dalam kode R ditulis sebagai berikut :
#Rumus MVI
MVI <- (NIR - Green) / (SWIR - Green)
# Plot hasil MVI
plot(MVI, col = gray.colors(100), main = "Mangrove Vegetation Index (MVI)")
Dalam penulisan sintaks R, operasi pengurangan direpresentasikan
dengan simbol -, sedangkan pembagian dituliskan dengan
simbol /. Tanda kurung () digunakan untuk
memastikan bahwa pengurangan antara NIR - Green dan SWIR - Green
dihitung terlebih dahulu sebelum dilakukan operasi pembagian. Tanpa
tanda kurung, R akan membaca operasi sesuai aturan prioritas aritmatika
yang bisa menghasilkan hasil berbeda dari rumus yang dimaksud. Oleh
karena itu, penggunaan tanda kurung sangat penting untuk menjaga
keakuratan perhitungan. Hasil kalkulasi kemudian divisualisasikan dalam
bentuk peta raster menggunakan fungsi plot() .
Seperti yang sudah ditampilkan pada hasil perhitungan, peta indeks MVI divisualisasikan dalam warna abu-abu sehingga yang tampak hanyalah distribusi nilai piksel dari hasil perhitungan. Namun, untuk mendapatkan informasi mengenai area mangrove secara lebih spesifik, diperlukan proses ekstraksi dengan menerapkan nilai ambang batas (threshold). Berdasarkan tabel nilai ambang yang digunakan oleh Baloloy et al. (2020), mangrove dapat diidentifikasi dengan nilai MVI lebih besar dari 3.5. Oleh karena itu, piksel dengan nilai MVI ≥ 3.5 akan diklasifikasikan sebagai mangrove, sedangkan nilai di bawahnya dianggap bukan mangrove. Tahapan ini memungkinkan pemisahan area mangrove dari non-mangrove secara lebih tegas. Proses thresholding dapat dilakukan dengan menulis kode berikut:
# Terapkan threshold MVI berdasarkan Baloloy et al. (2020)
# Piksel dengan nilai >= 3.5 dianggap mangrove
Mangrove <- MVI >= 3.5
# Plot hasil klasifikasi threshold
plot(Mangrove,
col = c("grey", "darkgreen"),
legend = FALSE)
# Keterangan warna:
# white = Non-mangrove
# darkgreen = Mangrove
# Thresholding hasil MVI
Mangrove <- MVI >= 3.5
# Konversi ke faktor (kategori)
Mangrove <- as.factor(Mangrove)
# Set label kategori
levels(Mangrove) <- data.frame(value = c(0,1),
label = c("Non-Mangrove", "Mangrove"))
# Plot dengan legenda
plot(Mangrove, col = c("white", "darkgreen"),
main = "Peta Sebaran Mangrove")
#Grid
grid(lty = 2,
lwd = 0.5,
col = "gray50")
Untuk mengetahui seberapa luas area mangrove hasil klasifikasi, kita dapat menghitung jumlah piksel yang masuk ke dalam kategori “Mangrove” dan “Non-Mangrove”. Karena citra Sentinel-2 memiliki resolusi spasial 10 m × 10 m, maka setiap piksel merepresentasikan luas sebesar 100 m² atau 0,01 hektar. Dengan demikian, total luas mangrove dapat diperoleh dengan mengalikan jumlah piksel pada kategori tertentu dengan luas per piksel, kemudian mengubahnya ke satuan hektar. Berikut contoh kodenya:
library(terra)
# Hitung jumlah piksel per kategori
freq_mangrove <- freq(Mangrove)
# Ukuran 1 piksel Sentinel-2 (10m x 10m)
pixel_area_m2 <- 10 * 10 # 100 m²
pixel_area_ha <- pixel_area_m2 / 10000 # 0.01 ha
# Tabel ringkas
tabel_luas <- data.frame(
Kategori = c("Non-Mangrove", "Mangrove"),
`Total Piksel` = freq_mangrove[,"count"],
`Luas (Hektar)` = round(freq_mangrove[,"count"] * pixel_area_ha, 2)
)
# Print tabel
tabel_luas
## Kategori Total.Piksel Luas..Hektar.
## 1 Non-Mangrove 16068914 160689.1
## 2 Mangrove 1514710 15147.1