3

I want to classify (and separate) houses from trees (high vegetation) in point cloud data using PDAL.

I use height filter for this purpose. Our high Vegetation lies in the range between 5 and 10 meters. So, I apply filter of range 5m to 10m.

The filter output gives me few houses and all of trees.

I think we can differentiate these remaining tree from houses using tree canopy width; however, is there any filter which can differentiate trees from houses?

Here is my filter details:

{
  "pipeline":[
    "./ground_non_ground.las",
    {
      "type":"filters.hag"
    },
    {
      "type":"filters.ferry",
      "dimensions":"HeightAboveGround = Z"
    },
    {
      "type":"filters.range",
      "limits":"Z[5:10]"
    },
    {
      "type":"writers.las",
      "filename":"./tree.las"
    }
  ]
}
2

There are two additional options to identify trees from canopy height models. Both of these options will identify (mostly) trees, which you can then use as a mask to isolate buildings.

4

First, for the answers proposed here, you probably do not want to use the ferry filter to push HeightAboveGround to Z, at least not prior to segmentation, as the act of normalizing heights involves subtracting an interpolated estimate of the ground elevation from each return. Something planar in the original X, Y, Z space may no longer be planar in the transformed X, Y, HeightAboveGround space. If you really need this to occur for downstream processing, I'd suggest holding off until the end of the pipeline.

Two options in the PDAL toolbox are:

  • filters.approximatecoplanar
  • filters.estimaterank

Neither of these is a full-fledged building/vegetation segmentation solution, but may serve as valuable building blocks.

PDAL's approximatecoplanar filter may be helpful -- it is just one of the processing steps used in "Real-Time Detection of Planar Regions in Unorganized Point Clouds" by Limberger and Oliveira. Try adding the following to your pipeline following the existing range filter.

{
  "type":"filters.approximatecoplanar",
  "knn":8,
  "thresh1":25,
  "thresh2":6
},

You will have a new dimension called Coplanar, where 0 indicates that a point is not likely part of a planar patch (e.g., vegetation) and 1 indicates that it is perhaps part of a planar patch (e.g., roof). You'll need to either 1) pick another output format that supports the Coplanar dimension, or 2) insert another range filter to select only Coplanar=0 or Coplanar=1.

The estimaterank filter is similar in nature. There you will get a new dimension Rank, where Rank=2 indicates planar features and Rank=3 would be more indicative of vegetation. Again, you'll need to choose how to deal with your new dimension as the LAS writer will drop unknown fields like Rank.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.