Can a €500 consumer 360° camera replace a €40,000 terrestrial laser scanner for forest inventory? This project builds the full pipeline to find out — and gets within ~1cm of TLS accuracy on tree diameter.
Developed for SLU (Swedish University of Agricultural Sciences), as part of Project Course in Machine Vision (VT26), Umeå University.
| Sparse Point Cloud | Dense Point Cloud | segmentation |
|---|---|---|
![]() |
![]() |
![]() |
Forest inventory today relies heavily on manual field measurement and expensive Terrestrial Laser Scanning (TLS). This project explores whether a cheap consumer 360° camera (Insta360 X4), combined with open-source Structure-from-Motion, can produce forest measurements — tree position, diameter at breast height (DBH) — accurate enough to be useful.
Short answer: yes, with the right calibration. The raw reconstruction overestimated tree diameter by ~33% on average. After a simple scale-correction step (using one or a few manually measured reference trees), that error dropped to ~10%, landing within a few centimetres of professional TLS results.
This was a 10-person, 6-week Scrum project split into sub-teams. I worked on data-preparation and 3D reconstruction, the part of the pipeline responsible for turning raw 360° footage into a geo-registered point cloud ready for measurement.
Other sub-teams worked on 3D segmentation/DBH extraction, 2D image analysis (species classification), and variable extraction — see credits below for the full breakdown.
Insta360 X4 video (.insv)
│
▼
Frame extraction (FFmpeg, 2 FPS)
│
▼
Equirectangular → 6× cubemap perspective views (custom Python)
│
▼
GPS sync: GPX trajectory → local ENU coordinates
│
▼
COLMAP rig-aware SfM (sequential + cross-direction matching)
│
▼
Geo-registered sparse point cloud ──► model_aligner (GPS scale/orientation)
│
▼
Dense reconstruction (MVS) ──► 3DFin segmentation ──► DBH extraction
Stack: Python 3.12 · COLMAP 4.0.3 (CUDA) · FFmpeg · NumPy/OpenCV · pyproj/gpxpy · CloudCompare · 3DFin · Gaussian Splatting (Brush)
Diameter-at-breast-height (DBH) accuracy against manually measured ground truth, n=9 trees:
| Method | MAE (cm) | RMSE (cm) | MAPE (%) |
|---|---|---|---|
| TLS (reference) | 0.84 | 1.14 | 3.75 |
| 360° — raw | 6.46 | 7.01 | 33.48 |
| 360° — scale-corrected (5 trees) | 1.68 | 1.91 | 10.57 |
| 360° — scale-corrected (1 tree) | 1.68 | 2.20 | 12.07 |
Key finding: most of the error in the raw 360° reconstruction came from a systematic global scale bias (likely from inaccurate consumer GPS), not from the reconstruction quality itself. A single calibration tree recovers most of the accuracy — a 5-tree calibration is only marginally more robust. Remaining errors concentrate on the smallest stems (<15cm DBH), where segmentation becomes harder regardless of method.
We also ran systematic experiments across camera settings — FOV (90° vs 120°), frame rate (2 vs 5 FPS), matching strategy (sequential vs exhaustive), and view configuration (4-way vs 6-way cubemap) — to characterize what actually improves reconstruction quality.
Course: Project course in Machine Vision (VT26) · Umeå University, in partnership with SLU


