Villerest Project · Geomorphology · LiDAR Analysis

Riverbank Change
Detection (DoD)

DEM of Difference (DoD) workflow to quantify river corridor elevation change between two LiDAR-derived rasters at the Villerest site — mapping thresholded erosion and deposition zones and computing area and volume statistics from a 1 m² pixel grid.

Python · rasterio EPSG:2154 · 1 m grid DoD = B − A Threshold T = 0.10 m LiDAR DEM · QGIS

Objective

What this project does

River corridors are dynamic environments — the bed and banks erode and deposit material over time, driven by floods, sediment supply, and channel adjustment. DEM of Difference (DoD) is the standard geomorphological technique to detect and quantify these changes from repeat LiDAR surveys: subtract an older DEM from a more recent one, pixel by pixel.

This project automates the full DoD workflow in Python using rasterio — from reading aligned GeoTIFF rasters through thresholding, classification, area/volume computation, and QA/QC figures — applied to the Villerest river corridor on a 1 m grid in the French national coordinate system (EPSG:2154).


Methodology

Analysis pipeline

QGIS
PreprocessingDigitised river centreline → corridor buffer → clipped both DEMs → resampled DEM B to match DEM A on a 1 m grid (same CRS, extent, transform) → NoData standardised to −9999.
01
Grid validationPython asserts CRS match, pixel transform match, and shape match before any computation — ensures DoD is spatially meaningful.
02
DEM of DifferenceDoD computed per pixel: DoD = B − A. Positive = deposition (surface gained elevation). Negative = erosion (surface lost elevation).
03
ThresholdingUniform minimum detection threshold T = 0.10 m applied. Changes below ±T are classified as stable to avoid noise. Classification raster produced: −1 (erosion) / 0 (stable) / +1 (deposition).
04
Area & Volume statisticsPixel area = 1 m². Area = pixel count × 1 m². Volume = Σ(DoD × 1 m²) over classified pixels. Erosion volume reported as signed and as magnitude.
05
QA/QC & exportDoD histogram, DoD map, and erosion/deposition classification map generated and saved. Statistics exported to CSV.
DoD = B − A     ← per pixel (both DEMs on same 1 m grid, EPSG:2154)
Erosion     if DoD ≤ −0.10 m
Deposition if DoD ≥ +0.10 m
Stable      otherwise

Volume = Σ(DoD × Apix)   ← A_pix = 1 m²

Results

Key statistics — threshold T = 0.10 m

All statistics computed from outputs/tables/dod_erosion_deposition_stats.csv. Valid corridor area derived from valid (non-NoData) pixels.

Valid corridor area
1,895,198 m²
~189.5 ha of analysed corridor
DoD range
−7.03 → +9.00 m
Mean DoD: +0.172 m (net deposition)
Erosion area
105,311 m²
~5.6% of valid corridor
Deposition area
1,191,342 m²
~62.9% of valid corridor
Erosion volume
−46,588 m³
Magnitude: 46,587.65 m³
Deposition volume
+347,429 m³
347,429.08 m³
Net volume
+300,841 m³
Deposition − Erosion: strong net gain

QA/QC Figures

Output maps & histogram

DoD histogram showing distribution of elevation change
Figure 1 — DoD Histogram. Distribution of per-pixel elevation change (DoD = B − A) across the Villerest corridor. The right-skewed distribution confirms net deposition dominates. Vertical dashed lines mark the ±0.10 m threshold. Pixels between the lines are classified as stable.
DoD map showing spatial distribution of elevation change
Figure 2 — DoD Map. Spatial distribution of elevation change (m) across the river corridor. Cool colours = erosion, warm colours = deposition. Produced at 1 m resolution, EPSG:2154.
Erosion/deposition classification map
Figure 3 — Classification Map. Thresholded erosion (−1, red) / stable (0, grey) / deposition (+1, blue) classification at T = 0.10 m. Deposition dominates the corridor, concentrated on inner bends and the channel bed.

Technical Details

Stack & repository structure

Python 3 rasterio numpy pandas matplotlib DEM of Difference Geomorphology Erosion Mapping Volume Statistics QGIS Preprocessing EPSG:2154 LiDAR DEM · 1 m grid
riverbank-change-detection/
├── tools/
│   ├── dod_workflow.py     ← main script (317 lines): DoD, threshold, stats, plots
│   └── verify_qgis_dod.py  ← optional: verify against QGIS-produced DoD
├── outputs/
│   ├── figures/
│   │   ├── dod_histogram.png
│   │   ├── dod_map.png
│   │   └── class_map.png
│   └── tables/
│       └── dod_erosion_deposition_stats.csv
├── report/
│   └── report.md          ← full methodology & results report
├── Inputs/               ← GeoTIFFs placed here (git-ignored, large files)
├── dod_workflow.py       ← also at root level for convenience
└── README.md
⚠ Limitations. The uniform minimum detection threshold (T = 0.10 m) is a simplified approach. A more rigorous analysis would incorporate spatially varying uncertainty (e.g., from survey point density or ground control point error) to produce a propagated error surface. Results are also sensitive to the quality of DEM alignment during QGIS preprocessing.