[GIS] CHM (Canopy height model) = DSM (Digital surface model) – DTM (Digital terrain model)

building-heightscanopy-height-modeldemphotogrammetry

I want to create a canopy height model (CHM) which has the height of objects (trees, building, etc.) from DSM and DTM. Below is the step by step procedures which I did so far.

  1. I use open source s2p software to generate DSM from stereo pleiades images. According to the offical webpage of s2p, the output DSM's height is ellipsoid height. And the spatial resolution of stereo images and DSM is 50 cm.

  2. I use python elevation package to download DTM (the website only said it's DEM but not specifically said it's DSM or DTM, so I assume that it's DTM). According to the website of the elevation package, the DTMs are obtained from SRTM which in theory should be geoid. And the spatial resolution of DTM is 30 m.

  3. Now I have both DSM and DTM. I subtracted DSM by DTM and got CHM (I fixed the problem of two models having different spatial resolutions by resampling the DTM).

  4. According to the graph below, I expect that the pixel value of the street height should be 0 or closed to 0.
    enter image description here

  5. However, the result is not what I expected.
    The pixel value 36 is the height of a point on the center blue triangle which is the ground (not trees or building), which is not 0 or closed to 0.
    enter image description here

Here are my questions:

  1. Is my idea of creating CHM correct?
  2. If 1. is correct, which step could be wrong? I think there might be two potentional problem. First, the accuracy of two DSM and DTM are not clear. However, I don't think they will influence the result too much. Second, the DSM and DTM are not on the same reference system.
  3. If 2. is correct, how do I convert ellipsoid height to geoid height and vice versa in a given area? (I don't think it's even possible though.)

Best Answer

Your idea is correct, however you might incur into some practical issues. The first is that the DTM and the stereos you are using seem to have a different height reference system. For example, as you suggest, one might use ellipsoidic heights, the other geoidic heights.

While it is possible to convert ellipsoidic <-> geoidic heights using geoid models, if the sample area is not too extended, a practical / acceptable approach could be to zero the ground difference using some points which are clearly on flat, horizontal areas. Your choice of a road is a sensible one.

In your specific case, this would mean that you subtract additional 36 meters (or whatever height units you are using) from the difference and obtain a model which measures exactly 0 on the road.

Looking at the picture is seems however that if you zero the model on the road, some other points (on flat and horizontal areas) might still be off. In that case converting the height model would be the only correct way to handle the problem.

Related Question