Skip to main content
Question

How to find the top of each bump in a DEM or DSM


(FME 2019.2.1.0, WIN64)

Hi,

I have a raster DSM of max tree heights (max elevation heights over eucalypt forest). I would like to place a point on the top of each tree (max z value). The trees are not pointed like pine trees but have rounded tops.

I have attempted to use RasterSegmenter (water shed) with limited success, by using RankCalculator with group on each water shed polygon, and then filtering with rank =1 (1 being the highest ranked pixel in each group). But this relies on the water shed being applied correctly.

I have converted the raster to a point cloud using GeometryCoercer, I can see in a 3D point cloud viewer the tree tops, but I do not know how to go about finding the max z value for each clump of points that represent a tree.

Is it possible to do something like this?

Ben

3 replies

jonas_nelson
Enthusiast
Forum|alt.badge.img+19
  • Enthusiast
  • January 24, 2020

Yes, it is! I have a workspace using a LIDAR LAS pointcloud, where I (very simplified) have done the following:

 

 

1. Use a PointCloudExpressionEvaluator to round the XY coordinates to whole meters (which effectively creates "stacks" of points in a 1x1 m grid). Since you are starting with a raster data already, you might skip this step (and maybe a few of the following too).

 

 

2. Use a PointCloudSorter to sort the stacks in descending order and then extract only the highest point in each stack.

 

 

3. Use a PointCloudCoercer to transform the point cloud into individual point data instead, making it possible to store the z-value as an attribute.

 

 

4. Buffer the points with at least the amount of your raster spacing.

 

 

5. Use a SpatialRelator to create a list for each point, containing the z-value attributes of all neighbouring points (that are within the buffer).

 

 

6. Use a ListRangeExtractor to get the highest z-value from the list (the point itself and all its neighbours).

 

 

7. Use a Tester to find if the point's z-value is the highest. If so, it is a local z-max, and thus a potential treetop.

 

 

 

I am sure someone else might have a much better approach, but this might give you some ideas.

itay
Supporter
Forum|alt.badge.img+17
  • Supporter
  • January 24, 2020

I kind of like @david_r approach on this and it is quite efficient.

https://knowledge.safe.com/questions/98242/find-position-and-value-of-highest-elevation-on-a.html


  • Author
  • January 28, 2020
jonas_nelson wrote:

Yes, it is! I have a workspace using a LIDAR LAS pointcloud, where I (very simplified) have done the following:

 

 

1. Use a PointCloudExpressionEvaluator to round the XY coordinates to whole meters (which effectively creates "stacks" of points in a 1x1 m grid). Since you are starting with a raster data already, you might skip this step (and maybe a few of the following too).

 

 

2. Use a PointCloudSorter to sort the stacks in descending order and then extract only the highest point in each stack.

 

 

3. Use a PointCloudCoercer to transform the point cloud into individual point data instead, making it possible to store the z-value as an attribute.

 

 

4. Buffer the points with at least the amount of your raster spacing.

 

 

5. Use a SpatialRelator to create a list for each point, containing the z-value attributes of all neighbouring points (that are within the buffer).

 

 

6. Use a ListRangeExtractor to get the highest z-value from the list (the point itself and all its neighbours).

 

 

7. Use a Tester to find if the point's z-value is the highest. If so, it is a local z-max, and thus a potential treetop.

 

 

 

I am sure someone else might have a much better approach, but this might give you some ideas.

Thank You @itay and @jonas_nelson, your information was invaluable in arriving at a solution.

I also used information fromt the following post - https://knowledge.safe.com/questions/46491/hi-i-hope-you-can-help-me-i-have-lidar-and-nir-dat.html

 

Ben


Reply


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings