152 lines
8.2 KiB
Markdown
152 lines
8.2 KiB
Markdown
# Ground classification — options, benchmark and references
|
|
|
|
> **Status (up to date)**: the pipeline default is `--ground-classification ign`
|
|
> with `--ign-classes sol` (IGN vendor ground class 2), extracted directly with
|
|
> laspy (`_extract_ign_ground` in `dtm.py`), with PDAL as fallback. `auto`,
|
|
> `smrf` and `csf` remain selectable via `--ground-classification`. Map-triggered
|
|
> generation always uses `ign` (no classification/reconciliation setting is
|
|
> exposed in the map UI).
|
|
|
|
Synthesis note for choosing/improving the ground-detection algorithm.
|
|
Context: IGN LiDAR HD tiles (Lambert 93), areas of strong relief / rock outcrops /
|
|
dense forest where the ground is under-classified and the DTM shows large holes.
|
|
|
|
Reference tile: `LHD_FXX_0999_6778_PTS_LAMB93_IGN69`
|
|
- 65,047,919 points, ~1 km², resolutions 0.5 m and 0.2 m.
|
|
- Class breakdown (vendor pre-classification):
|
|
class 2 (ground) **25.79%**, class 5 (high vegetation) **63.2%**,
|
|
class 3 (low vegetation) 7.85%, class 4 (medium vegetation) 2.66%,
|
|
class 1 0.47%, class 6 0.01%. No points in class 0.
|
|
- Holes in the existing DTM (before correction): **43.5%** at 0.5 m,
|
|
**44.1%** at 0.2 m (tile extent, header bounds).
|
|
|
|
## Measured benchmark (PDAL, 1 km²)
|
|
|
|
| Method | Time | Ground points | Ground surface* | Holes* |
|
|
|---|---|---|---|---|
|
|
| **IGN** (vendor pre-classification) | **9.4 s** | 25.8% | 84.6% | 15.4% |
|
|
| **SMRF** | 326.3 s | 36.1% | 90.4% | 9.6% |
|
|
| **CSF** | 355.2 s | 17.6% | 46.9% | 53.1% |
|
|
|
|
\* "Ground surface" computed over the point extent (point cloud bounding box),
|
|
at 0.5 m. Final DTM hole percentages (header bounds, larger) are higher: see
|
|
the reference tile above.
|
|
|
|
## A. Geometric filters (current PDAL stack)
|
|
|
|
- **IGN** (vendor pre-classification, class 2): the fastest (~9 s). Reliable
|
|
where the vendor has confidence; holes under dense forest / steep relief.
|
|
No parameter to tune.
|
|
- **SMRF** — Pingel, Clarke & McBride 2013, *ISPRS J. Photogramm. Remote
|
|
Sens.* 77:21-30. **Raster-based** filter (operates on a DSM, not on points),
|
|
hence faster than point-based filters; **minimizes type I errors**
|
|
(ground omission) → well suited when ground is scarce (forest). Best
|
|
coverage of the three here (90.4%) but ~5.4 min/tile.
|
|
- **CSF** — Zhang et al. 2016, *Remote Sensing* 8(6):501. Inverted cloth
|
|
draped over the point cloud; simple, accurate, but **the cloth no longer
|
|
touches the ground on steep/hilly terrain** → poor classification. Slowest
|
|
here and worst on this tile. Best reserved for urban areas.
|
|
- **PTD/PTIN** (Progressive TIN Densification) — Axelsson 2000, ISPRS
|
|
Congress. **Literature's winner**: most robust on complex terrain +
|
|
forest (Moudrý et al. 2020, *Measurement* 150:107047; Cai et al. 2019,
|
|
*Remote Sensing* 11(9):1037) and the fastest (lidR benchmark: PTD ~20 s
|
|
vs CSF ~156 s vs PMF ~1800 s). **NOT available in the PDAL version
|
|
bundled in this image** (`filters.ground` / TIN missing) — would need to
|
|
be added to use it (or via lidR / a custom implementation).
|
|
|
|
## B. Fast hybrid (chosen for implementation)
|
|
|
|
**PTD / Wack & Wimmer** principle (Wack & Wimmer 2002, *ISPRS Archives*
|
|
XXXIV/3A:293-296: DTM from lowest return, excluding the lowest 1% per cell
|
|
to discard outliers):
|
|
|
|
1. **Base = IGN pre-classification** (class 2, ~9 s, reliable and official).
|
|
2. **Measured gap filling**: for each cell with no ground point, take the
|
|
**robust lowest return** (min of the 99% of points in the cell) → adds
|
|
*measured* ground where the vendor failed (rock outcrops, clearings,
|
|
forest floor).
|
|
3. **Topographic inpainting** of the remaining gaps (terrain-aware
|
|
interpolation already implemented in `dtm.py:_interpolate_holes`).
|
|
|
|
Expected: **continuous** DTM (0% holes), robust in forest/relief,
|
|
**~10-15 s/tile** instead of 326-355 s. No GPU dependency, no training.
|
|
|
|
## C. AI / ML models (supervised — require labels)
|
|
|
|
Caveat (Qin et al. 2023, *ISPRS J. Photogramm. Remote Sens.*
|
|
202:246-261): **everything is supervised**; the main risk is
|
|
**generalization** — a model trained on one region degrades elsewhere.
|
|
No fully unsupervised DL filter published to date.
|
|
|
|
**Point-based (3D):**
|
|
|
|
| Model | Year | Architecture | Accuracy | Speed (~/km², GPU) |
|
|
|---|---|---|---|---|
|
|
| KPConv / RandLA-Net (Qin, OpenGF) | 2021 | KPConv / RandLA-Net | 97.8% OA, DTM RMSE 0.20 m, ground IoU 95% | 0.5-2.5 min |
|
|
| PFCN (Jin, *IEEE JSTARS* 13:3958) | 2020 | point-FCN | Te 1.73%, Kappa 93.9% | ~1/3 the cost of PointNet++ |
|
|
| Terrain-Net (Li, *Remote Sensing* 14(22):5798) | 2022 | KPConv + self-attention | OA 98%, mIoU 0.933 | parameter-free at transfer |
|
|
| MSVC (Štroner, *Remote Sensing* 17(4):615) | 2025 | 9x9x9 voxel DNN | beats CSF on F-score | — |
|
|
|
|
**Rasterized (directly output the DTM — closest to our need):**
|
|
|
|
| Model | Year | Architecture | Result |
|
|
|---|---|---|---|
|
|
| Precursor (Rizaldy, *ISPRS Annals* IV-2:231) | 2018 | 2D FCN | Te 5.22%, 78x faster |
|
|
| DeepTerRa / ALS2DTM (Lê, *IEEE JSTARS* 15:2778) | 2022 | GAN pix2pix (U-Net) | DTM RMSE < 1 m, filter + interpolation in one pass |
|
|
| DSM2DTM (Bittner, *ISPRS Annals* X-1/W1-2023:925) | 2023 | U-Net (EfficientNet) | non-ground mask + per-pixel ground height |
|
|
|
|
**Training datasets**: OpenGF (Qin et al., CVPRW 2021,
|
|
arXiv:2101.09641 — 47.7 km², 542 M pts); ALS2DTM (Lê et al. 2022,
|
|
arXiv:2206.03778 — 52 km², 1.66 billion pts, urban/forest/mountain).
|
|
|
|
**Costs / obstacles for our case**: (1) labels → to be generated as
|
|
pseudo-labels (high-quality SMRF/PTD output on a representative sample of
|
|
our tiles) or pre-training on OpenGF/ALS2DTM; (2) generalization across the
|
|
diverse terrain of LiDAR HD (plain/forest/mountain/urban); (3)
|
|
infrastructure: checkpoint + GPU inference path in the Docker image.
|
|
|
|
**Best fit if going the AI route**: a **rasterized U-Net (DSM2DTM-style)** —
|
|
rasterize the point cloud into multi-channel grids (elevation, slope,
|
|
curvature, density, return statistics), output a ground mask + ground
|
|
height. 2D = very fast and trivial to deploy on GPU, merges filtering +
|
|
interpolation. KPConv/RandLA-Net is more accurate in pure 3D but heavier to
|
|
deploy.
|
|
|
|
## Synthesis / decision
|
|
|
|
- "Fast" hard constraint + low maintenance → **fast hybrid (B)**
|
|
(~10-40 s/tile, zero training, zero GPU). ← **chosen approach, IMPLEMENTED**
|
|
- Base = IGN pre-classification (fast, ~10 s). `auto` prefers it as soon
|
|
as ≥ 20% of points are classified as ground (threshold lowered from 30%
|
|
to 20%, since the DTM is subsequently completed — see below).
|
|
- **This gap-filling note is superseded**: gap filling in the DTM is no
|
|
longer a distance-based `fillnodata` pass over small holes. It is now
|
|
a morphological closing bounded to the point envelope
|
|
(`_fill_small_gaps` in `dtm.py`): the closing radius follows the local
|
|
point spacing (measured over 5 m, staged at 1/1.5/2/3 m), nothing is
|
|
extended beyond measured pixels, and islands under 1 m² are removed.
|
|
Large holes (dense forest, steep relief where ground is
|
|
under-classified) still remain as nodata (black in the renders).
|
|
Deliberately no floor at the lowest return: under dense canopy that
|
|
return is vegetation, which would print trees into the DTM.
|
|
- Maximum quality in hard cases (steep + dense), ~1-2 min/tile + GPU +
|
|
training accepted → **rasterized U-Net (C)**. (not implemented)
|
|
- Best geometric filter available in PDAL → **SMRF (A)** (best coverage
|
|
90.4% but 5.4 min/tile). Selectable via `--ground-classification smrf`.
|
|
- Literature's absolute "winner" (fast + robust) → **PTD/PTIN
|
|
(A)**: to be integrated (not in the current PDAL stack).
|
|
|
|
## References
|
|
|
|
- Axelsson (2000), PTIN/PTD, ISPRS Congress.
|
|
- Pingel, Clarke & McBride (2013), SMRF, ISPRS J. P&RS 77:21-30.
|
|
- Zhang et al. (2016), CSF, Remote Sensing 8(6):501.
|
|
- Wack & Wimmer (2002), lowest-return DTM, ISPRS Archives XXXIV/3A.
|
|
- Moudrý et al. (2020), CSF/PTIN/PMF/SMRF comparison, Measurement 150:107047.
|
|
- Cai et al. (2019), CS+PTD, Remote Sensing 11(9):1037.
|
|
- Qin et al. (2021), OpenGF, CVPR Workshops (arXiv:2101.09641).
|
|
- Qin et al. (2023), dataset + evaluation + survey, ISPRS J. P&RS 202:246-261.
|
|
- Lê et al. (2022), DeepTerRa/ALS2DTM, IEEE JSTARS 15:2778 (arXiv:2206.03778).
|
|
- Bittner et al. (2023), DSM2DTM, ISPRS Annals X-1/W1-2023:925.
|
|
- lidR book (PTD/CSF/PMF comparison): https://r-lidar.github.io/lidRbook/gnd.html
|