Forest Cover Change Detection & Land-Cover Classification (Kenya AOI)
# GIS
Forest Cover Change Detection & Land-Cover Classification (Kenya AOI)
A complete, reproducible GIS/remote-sensing pipeline for **land-cover classification**, **multi-temporal change detection**, and **accuracy assessment** — built around a nature-based carbon (REDD+/forest monitoring) use case for a simulated Area of Interest (AOI) near the Mau Forest Complex, Kenya.
This project demonstrates the core outputs commonly required in GIS/remote-sensing and forest carbon project roles: NDVI-based land-cover classification, change-detection mapping, shapefile/GeoPackage exports with attribute metadata, statistical accuracy assessment (confusion matrix, Kappa), and publication-quality cartographic map layouts.
## Why this project
Forest monitoring for carbon projects (REDD+, ARR) depends on being able to answer three questions reliably: *What land cover exists now? What changed? How confident are we in the answer?* This pipeline answers all three, end-to-end, using an open-source Python geospatial stack — the same core workflow used with real Sentinel-2/Landsat imagery pulled from Google Earth Engine or QGIS.
## Methodology
| Step | Script | What it does |
|---|---|---|
| 1 | `01_generate_synthetic_data.py` | Generates two NDVI raster surfaces (2015 baseline, 2024) simulating a forest AOI with realistic disturbance patches |
| 2 | `02_land_cover_classification.py` | Threshold-based NDVI classification into Water / Bare-Cleared / Cropland / Forest, with area (ha) summaries |
| 3 | `03_change_detection.py` | Post-classification change detection; vectorizes change polygons into a GeoPackage + Shapefile with attributes |
| 4 | `04_accuracy_assessment.py` | Stratified reference-point sampling, confusion matrix, overall accuracy, Cohen's Kappa, producer's/user's accuracy |
| 5 | `05_generate_map_layouts.py` | Publication-ready cartographic maps (title, legend, north arrow, scale bar, coordinate grid) |
**Note on data:** This project uses procedurally generated …