Skip to content

Absolute DSM

For georeferenced inputs, DepthWizard can output an absolute DSM: elevation above a named vertical datum. The model predicts only height above ground, so the terrain has to come from somewhere else. Source: Model_Traning/v5/geo/.

vertical datum (geoid EGM96 / EGM2008, or WGS84 ellipsoid)nDSMheight above groundDTMbare earthDSMtop surfaceProductsDTM · terrainnDSM · structuresnDSM · vegetationDSM outlineDSM = DTM + nDSMthe model predicts nDSM
Absolute DSM = terrain (DTM) + predicted height above ground (nDSM).

Free global elevation models such as SRTM and Copernicus GLO-30 have about 30 m cells, and they are surface models: each cell already includes the buildings and trees inside it, averaged. Adding the predicted nDSM on top counts those structures twice.

DEM + nDSM (naive)30 m DEM already contains the tower+ nDSM 30 m165.0 mtruth 135.0 mDTM + nDSM (DepthWizard)DTM fitted through ground pixels onlynDSM 30 m134.4 mtruth 135.0 mbuilding height counted twiceground-only terrain, building counted once
Synthetic check: a 30 m tower whose true top is at 135.0 m.
SceneTruthDEM + nDSMDTM + nDSM (ours)
Synthetic 30 m tower135.0165.0134.4

Elevation at the structure top, metres. Source: Research-Paper/main.tex Table V

--dsm-mode dem_anchored. The idea: the final DSM, averaged over each DEM cell, should equal the DEM, because that is what the DEM measures. The fine detail inside each cell comes from the prediction.

  • A averages to about 30 m cells, and U interpolates bilinearly back to pixels.
  • The second term is the high-frequency part of the prediction, which has zero mean over each cell.
  • X is a coarse field solved iteratively (Tobler’s pycnophylactic method) so that every 30 m cell of D averages exactly to the DEM.
  • λ = detail_gain (default 1.0) scales how much predicted detail is added.

This never double counts: building mass already present in the DEM is redistributed onto the building footprint instead of being added again.

With absolute enabled on a georeferenced input, a job writes dtm_m.tif and dsm_m.tif next to ndsm_m.tif. Each carries a compound CRS (horizontal EPSG + vertical datum), and meta.json records the vertical_datum.