Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

Repository files navigation

Lambdasz Aerial Analytics Platform — Module 6

RGB Vegetation Condition Analysis (Drone Remote Sensing)

Python Platform License


1. Deskripsi Modul

Module 6 (RGB Vegetation Condition Analysis) merupakan komponen analitik citra udara drone pada platform Lambdasz Aerial Analytics. Modul ini dirancang untuk mengevaluasi tingkat kesehatan, vigoritas, dan kondisi visual kanopi vegetasi secara kuantitatif berbasis data spektral RGB tampak standar (tanpa memerlukan sensor Near-Infrared/NIR atau kamera multispektral yang mahal).

Secara arsitektural, Modul 6 memproses area kanopi vegetasi yang telah diisolasi dari latar belakang non-vegetasi (seperti tanah terbuka, aspal, air, dan atap bangunan). Untuk memastikan eksekusi eksperimen yang mandiri (decoupled), modul ini dilengkapi dengan adapter Mock Module 4 berbasis algoritma Excess Green ($ExG$) thresholding.


2. Landasan Ilmiah & Metodologi (Research Grounding)

Implementasi algoritma pada modul ini berakar kuat pada temuan empiris literatur ilmiah remote sensing berikut:

  1. Coswosk et al. (2024) — Remote Sensing:

    • Indeks VARI (Visible Atmospherically Resistant Index) $\frac{G - R}{G + R - B}$ terbukti memiliki korelasi linear tertinggi ($r = 0.99$) terhadap biomassa hijau dan aktivitas fotosintesis kanopi di bawah pencahayaan alami drone.
    • Sudut Hue ($H$) pada ruang warna HSL ($r = 0.97\text{--}0.99$) dan komponen ruang warna CIELab merupakan pemisah spektral paling stabil terhadap variasi intensitas cahaya.
    • Gejala klorosis atau penuaan dini kanopi diidentifikasi melalui transisi sudut Hue dari hijau ke kuning ($50^\circ \le H \le 75^\circ$).
  2. Peticilă et al. (2025) — AgriEngineering:

    • Menghitung indeks vegetasi langsung pada citra tanpa segmentasi kanopi menimbulkan distorsi spektral akibat pantulan tanah terbuka (soil background) dan seresah kering.
    • Pre-masking kanopi wajib dilakukan sebelum kalkulasi indeks kondisi.
  3. Matyukira & Mhangara (2024/2025) — Geocarto International:

    • Peringatan multikolinearitas (Variance Inflation Factor tinggi): pemilihan indeks dibatasi pada metrik non-redundan.
    • Indeks RBVI (Red-Blue Vegetation Index) $\frac{R - B}{R + B}$ dan rasio reflektansi merah dominan ($R > 0.90 \times G$) terbukti paling responsif dalam mendeteksi stres berat, daun terbakar matahari, dehidrasi, dan nekrosis (browning).

3. Paradigma Pemrograman (Strict Pure Functional Paradigm)

Seluruh logika komputasi analitik dibangun mematuhi aturan pemrograman fungsional murni:

  • Immutability (Ketidakberubahan): Tidak ada mutasi array citra secara in-place (dilarang menggunakan img[mask] = ... atau operasi mutasi internal). Setiap transformasi menghasilkan array atau struktur data baru (np.where, slicing immutabel, pure transforms).
  • Referential Transparency & Deterministic: Output fungsi hanya bergantung secara deterministik pada argumen input tanpa membaca atau menulis global state.
  • Separation of Concerns (Pemisahan I/O): Komputasi matematis/matriks dipisahkan secara tegas dari operasi input/output berkas ke disk.
  • Numerical Stability: Seluruh formula pembagian ditambahkan konstanta regularisasi $\epsilon = 10^{-6}$ pada penyebut untuk mengeliminasi potensi ZeroDivisionError, NaN, atau Inf.

4. Arsitektur Submodul & Spesifikasi API

A. Adapter Isolasi Kanopi: mock_detect_vegetation

def mock_detect_vegetation(rgb_float: np.ndarray) -> np.ndarray
  • Fungsi: Mensimulasikan isolasi kanopi Modul 4.
  • Formula: $$r = \frac{R}{R + G + B + \epsilon}, \quad g = \frac{G}{R + G + B + \epsilon}, \quad b = \frac{B}{R + G + B + \epsilon}$$ $$ExG = 2g - r - b$$
  • Kriteria Kanopi Aktif: $$ExG > 0.04 \quad \land \quad G > R \quad \land \quad 0.08 < \text{Brightness} < 0.95$$ Menyaring lapangan pasir, jalan aspal, badan air, dan atap bangunan.

B. M6.1: Intensitas Kehijauan Kanopi (calculate_green_intensity)

def calculate_green_intensity(rgb_img: np.ndarray, mask: np.ndarray, method: str = "VARI") -> np.ndarray
  • Fungsi: Menghitung grid intensitas vigoritas kontinu bounded pada interval $[-1.0, 1.0]$.
  • Formula VARI: $$\text{VARI} = \frac{G - R}{G + R - B + \epsilon}$$
  • Keluaran: Nilai VARI untuk piksel kanopi (mask == True), dan 0.0 untuk piksel non-vegetasi.

C. M6.2: Analisis Karakteristik Warna Kanopi (analyze_color_characteristics)

def analyze_color_characteristics(rgb_img: np.ndarray, mask: np.ndarray) -> Dict[str, float]
  • Fungsi: Mengekstrak distribusi fotometrik dan metrik warna kanopi murni.
  • Metrik:
    • Mean & Standard Deviation kanal $R, G, B$.
    • Mean Sudut Hue HSL ($0^\circ\text{--}360^\circ$).
    • Mean Saturasi HSL ($0.0\text{--}1.0$).

D. M6.3: Klasifikasi Tingkat Kondisi Kanopi (classify_vegetation_condition)

def classify_vegetation_condition(vari_grid: np.ndarray, mask: np.ndarray, thresholds: dict = None) -> Tuple[np.ndarray, Dict[str, Any]]
  • Tingkat Kondisi (3-Tier Physiological States):
    • Class 3 (Vigorous): $\text{VARI} \ge 0.25$
    • Class 2 (Moderate Stress): $0.05 \le \text{VARI} < 0.25$
    • Class 1 (Severe Stress): $\text{VARI} < 0.05$
    • Class 0 (Non-vegetation): Piksel latar belakang non-kanopi.
  • Keluaran: Array klasifikasi diskrit (uint8) dan statistik persentase luasan kanopi per kelas.

E. M6.4: Deteksi Klorosis / Penuaan (detect_yellowing)

def detect_yellowing(rgb_img: np.ndarray, mask: np.ndarray) -> Tuple[np.ndarray, float]
  • Fungsi: Mengisolasi degradasi klorofil daun pada kanopi aktif.
  • Kriteria Spektral: $$\text{mask} \quad \land \quad 50^\circ \le \text{Hue} \le 75^\circ \quad \land \quad \text{Saturation} > 0.20$$
  • Keluaran: Binary mask piksel menguning dan persentase luasannya terhadap kanopi aktif.

F. M6.5: Deteksi Nekrosis / Daun Kering (detect_browning)

def detect_browning(rgb_img: np.ndarray, mask: np.ndarray) -> Tuple[np.ndarray, float]
  • Fungsi: Mengidentifikasi jaringan daun mati/kering kecokelatan (browning / necrosis).
  • Formula & Kriteria: $$\text{RBVI} = \frac{R - B}{R + B + \epsilon} > 0.15 \quad \land \quad R > 0.90 \times G$$
  • Keluaran: Binary mask piksel nekrosis dan persentase luasannya terhadap kanopi aktif.

5. Struktur Direktori Proyek & Arsitektur Modular

Untuk memaksimalkan readability, maintainability, dan kemudahan integrasi tim pengembang, seluruh fungsionalitas Modul 6 telah dipisahkan ke dalam modul/berkas terpisah di dalam paket module6/:

Module-6-Experiment/
├── assets/                                     # Citra drone masukan (input samples)
│   ├── IMG_SAMPLE_1.jpeg
│   ├── IMG_SAMPLE_2.jpeg
│   ├── IMG_SAMPLE_3.jpeg
│   ├── IMG_SAMPLE_4.jpeg
│   └── IMG_SAMPLE_5.jpeg
├── module6/                                    # Paket Inti Module 6 (Modular Architecture)
│   ├── __init__.py                             # Re-export API publik, versioning, package metadata
│   ├── constants.py                            # Konstanta numerik (EPSILON) & ambang batas default
│   ├── types.py                                # Dataclass immutable (VegetationAnalysisResult)
│   ├── color.py                                # Konversi ruang warna HSL murni tervektorisasi
│   ├── adapter.py                              # Mock Module 4 adapter (mock_detect_vegetation via ExG)
│   ├── greenness.py                            # Submodul M6.1: calculate_green_intensity (VARI)
│   ├── spectral.py                             # Submodul M6.2: analyze_color_characteristics (RGB/HSL)
│   ├── condition.py                            # Submodul M6.3: classify_vegetation_condition (3-Tier)
│   ├── yellowing.py                            # Submodul M6.4: detect_yellowing (Klorosis / Senescence)
│   ├── browning.py                             # Submodul M6.5: detect_browning (Nekrosis / RBVI)
│   ├── pipeline.py                             # Orkestrator alur analitik murni (analyze_vegetation_image)
│   └── io.py                                   # Pemisahan I/O (loader citra, discovery, plot, CSV)
├── experiment_results/                         # Direktori luaran otomatis
│   ├── IMG_SAMPLE_1_module6_analysis.png       # Panel visual multi-komparatif (200 DPI)
│   ├── IMG_SAMPLE_2_module6_analysis.png
│   ├── IMG_SAMPLE_3_module6_analysis.png
│   ├── IMG_SAMPLE_4_module6_analysis.png
│   ├── IMG_SAMPLE_5_module6_analysis.png
│   └── module6_experiment_summary.csv          # Tabel rekapitulasi data statistik
├── run_experiment_module6.py                   # Runner skrip eksperimen mandiri
└── README.md                                   # Dokumentasi teknis & panduan modul

6. Panduan Dokumentasi Tim Pengembang (Pydoc Documentation)

Setiap fungsi dan kelas pada seluruh berkas di dalam paket module6 telah didokumentasikan secara komprehensif mengikuti standar docstring PEP 257 / Google Style. Anggota tim developer lain dapat membaca dokumentasi ini secara langsung menggunakan antarmuka bawaan Python pydoc.

A. Membaca Dokumentasi via Terminal Konsol

Untuk membaca dokumentasi paket utama atau submodul tertentu di terminal:

# Membaca dokumentasi menyeluruh paket module6
python -m pydoc module6

# Membaca dokumentasi submodul M6.1 (Greenness / VARI)
python -m pydoc module6.greenness.calculate_green_intensity

# Membaca dokumentasi submodul M6.3 (Condition Classification)
python -m pydoc module6.condition.classify_vegetation_condition

# Membaca dokumentasi submodul M6.4 (Yellowing / Chlorosis)
python -m pydoc module6.yellowing.detect_yellowing

# Membaca dokumentasi submodul M6.5 (Browning / Necrosis)
python -m pydoc module6.browning.detect_browning

# Membaca dokumentasi submodul M6.2 (Spectral Characteristics)
python -m pydoc module6.spectral.analyze_color_characteristics

# Membaca dokumentasi Adapter Mock M4
python -m pydoc module6.adapter.mock_detect_vegetation

B. Menjalankan Server Dokumentasi Interaktif (Browser Web)

Developer dapat membuka server dokumentasi lokal interaktif di browser web:

python -m pydoc -b

Perintah ini akan secara otomatis membuka antarmuka web interaktif yang menampilkan hierarki dokumentasi seluruh modul.

C. Menghasilkan Berkas Dokumentasi Format HTML

Untuk menghasilkan berkas HTML statis yang dapat dibagikan kepada tim pengembang:

python -m pydoc -w module6

Perintah ini akan membuat berkas module6.html yang dapat dibuka di peramban web apa pun tanpa memerlukan server aktif.

D. Contoh Penggunaan Modular oleh Pengembang Lain

Anggota tim pengembang dapat mengimpor fungsi secara langsung sesuai kebutuhan:

import numpy as np
from module6.greenness import calculate_green_intensity
from module6.condition import classify_vegetation_condition
from module6.yellowing import detect_yellowing
from module6.browning import detect_browning

# Contoh pemanggilan fungsional murni
vari_grid = calculate_green_intensity(rgb_image, vegetation_mask, method="VARI")
classified_grid, stats = classify_vegetation_condition(vari_grid, vegetation_mask)
yellow_mask, yellow_pct = detect_yellowing(rgb_image, vegetation_mask)
brown_mask, brown_pct = detect_browning(rgb_image, vegetation_mask)

7. Persyaratan Sistem & Dependensi

Pastikan lingkungan kerja telah terpasang Python 3.9+ (telah diverifikasi pada Python 3.13.0).

Paket pustaka yang diperlukan:

  • numpy ($\ge 1.22.0$) — Operasi array numerik vektor murni.
  • opencv-python ($\ge 4.5.0$) — Pembacaan format citra masukan.
  • matplotlib ($\ge 3.5.0$) — Pembangkitan visualisasi multi-panel beresolusi tinggi.

Instalasi dependensi via pip:

pip install numpy opencv-python matplotlib

8. Cara Menjalankan Modul (Usage Guide)

Langkah Eksekusi Otomatis

Skrip run_experiment_module6.py dilengkapi dengan fitur Dynamic Image Asset Discovery, yang secara otomatis memindai seluruh citra (.jpg, .jpeg, .png, .webp) dalam direktori kerja saat ini dan sub-direktorinya secara rekursif tanpa perlu melakukan hardcoding nama file.

Jalankan perintah berikut pada terminal:

python run_experiment_module6.py

Pada sistem berbasis Unix / Linux / macOS:

python3 run_experiment_module6.py

9. Luaran & Hasil Analisis (Output Artifacts)

Setelah proses selesai, modul menghasilkan:

1. Panel Visual Multi-Komparatif 2x3 Resolusi Tinggi

Tersimpan di ./experiment_results/<nama_citra>_module6_analysis.png dengan 6 panel:

  1. Original Aerial RGB Imagery: Citra asli tampak atas dari drone.
  2. Mock M4 Vegetation Canopy Mask: Overlay kanopi aktif (hijau zamrud) terhadap latar belakang desaturasi.
  3. M6.1 VARI Greenness Intensity Map: Peta panas nilai indeks VARI dengan colormap RdYlGn.
  4. M6.3 Canopy Condition Classification Map: Peta diskrit 3 kelas (Hijau = Vigorous, Kuning = Moderate Stress, Merah = Severe Stress, Abu-abu = Non-vegetation).
  5. M6.4 Foliar Chlorosis / Yellowing Mask: Deteksi daun menguning/klorosis (highlight kuning terang).
  6. M6.5 Necrosis / Browning Mask: Deteksi daun terbakar/kering/mati (highlight cokelat bata).

2. Tabel Rekapitulasi Data Statistik (module6_experiment_summary.csv)

Tersimpan di ./experiment_results/module6_experiment_summary.csv dengan kolom:

Kolom CSV Definisi
image_name Nama berkas citra drone
total_pixels Total resolusi piksel citra ($H \times W$)
vegetation_pixels Jumlah piksel kanopi vegetasi aktif terdeteksi
vegetation_coverage_pct Persentase tutupan kanopi terhadap total area citra
mean_vari Rata-rata nilai VARI pada kanopi aktif
mean_hue_deg Rata-rata derajat sudut Hue HSL pada kanopi ($0^\circ\text{--}360^\circ$)
vigorous_pct Persentase kanopi dalam kondisi prima ($\text{VARI} \ge 0.25$)
moderate_stress_pct Persentase kanopi dalam stres moderat ($0.05 \le \text{VARI} &lt; 0.25$)
severe_stress_pct Persentase kanopi dalam stres berat ($\text{VARI} &lt; 0.05$)
yellowing_pct Persentase kanopi yang mengalami klorosis/menguning
browning_pct Persentase kanopi yang mengalami nekrosis/daun kering

10. Hasil Uji Eksperimental Terverifikasi

Hasil eksekusi pada 5 dataset sampel citra udara drone:

Asset Name Total Pixels Canopy Pixels Coverage Mean VARI Mean Hue Vigorous Mod. Stress Sev. Stress Yellowing Browning
IMG_SAMPLE_1.jpeg 1,920,000 289,420 15.07% 0.1231 90.79° 6.21% 69.18% 24.61% 2.21% 3.95%
IMG_SAMPLE_2.jpeg 1,228,800 357,580 29.10% 0.0671 76.40° 0.92% 53.40% 45.68% 27.21% 23.18%
IMG_SAMPLE_3.jpeg 1,228,800 153,623 12.50% 0.0839 76.75° 1.42% 65.56% 33.02% 33.68% 32.21%
IMG_SAMPLE_4.jpeg 1,228,800 117,802 9.59% 0.0755 80.30° 0.70% 62.85% 36.45% 18.54% 21.29%
IMG_SAMPLE_5.jpeg 1,228,800 276,008 22.46% 0.0980 91.70° 3.50% 68.86% 27.64% 2.96% 5.76%

Analisis Kondisi Biologis:

  • Sampel 1 & 5: Menunjukkan kondisi kanopi yang sehat dengan sudut Hue dominan hijau ($&gt;90^\circ$) dan tingkat degradasi sangat rendah (klorosis $\le 3%$, nekrosis $\le 5.8%$).
  • Sampel 2 & 3: Menunjukkan kanopi yang mengalami stres berat hingga penuaan/klorosis akut (klorosis mencapai $27.2%\text{--}33.7%$, nekrosis $23.2%\text{--}32.2%$, dan sudut Hue bergeser ke $76.4^\circ\text{--}76.8^\circ$).

11. Referensi Ilmiah

  1. Coswosk, G. G., et al. (2024).
    Utilizing Visible Band Vegetation Indices from Unmanned Aerial Vehicle Images for Maize Phenotyping.
    Remote Sensing, 16(16), 3015.
    DOI: 10.3390/rs16163015 | Tautan: MDPI Open Access

  2. Peticilă, A., Iliescu, P. G., Dinca, L., Popa, A.-Ș., & Murariu, G. (2025).
    Vegetation Indices from UAV Imagery: Emerging Tools for Precision Agriculture and Forest Management.
    AgriEngineering, 7(12), 431.
    DOI: 10.3390/agriengineering7120431 | Tautan: MDPI Open Access

  3. Matyukira, C., Mhangara, P., Gidey, E., & Hussein, J. (2025).
    Assessing environmental drivers of vegetation health using enhanced vegetation index and principal component analysis: a case study of the Cradle Nature Reserve, Gauteng province, South Africa.
    Geocarto International, 40(1), 2509873.
    DOI: 10.1080/10106049.2025.2509873 | Tautan: Taylor & Francis

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages