<div dir="ltr"><div dir="ltr">On Wed, Apr 28, 2021 at 9:34 AM Howard Butler <<a href="mailto:howard@hobu.co" target="_blank">howard@hobu.co</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
> On Apr 27, 2021, at 4:11 PM, Andreas Yankopolus <<a href="mailto:andreas@yank.to" target="_blank">andreas@yank.to</a>> wrote:<br><br>
> Is there previous work in these areas that I can build on with PDAL? I’m also looking at LAStools, which appears to have binaries that could be replicated with PDAL pipelines.<br>
<br>
I like to say that "PDAL is something you can use to build LAStools" about its scope in relation to that product. PDAL isn't pre-canned workflows for attacking a few kinds of LiDAR processing challenges. It's a bunch of building blocks for processing point cloud data in the context of ETL pipelines. <br>
<br>
That said, once constructed, those workflows can be quite valuable. Fancy classification pipelines haven't typically been shared freely, however.</blockquote><div><br></div><div>Your mileage will certainly vary, but one pipeline that was derived from this notebook (<a href="https://github.com/rockestate/point-cloud-processing/blob/master/notebooks/point-cloud-processing.ipynb" target="_blank">https://github.com/rockestate/point-cloud-processing/blob/master/notebooks/point-cloud-processing.ipynb</a>) is shared below. It classifies noise, ground, vegetation, and building returns. In my experience, it does a reasonable job but can still require fine tuning of the parameters.</div><div><br></div><div>[<br>    {<br>        "type": "filters.assign",<br>        "assignment": "Classification[:]=0"<br>    },<br>    {<br>        "type": "filters.elm"<br>    },<br>    {<br>        "type": "filters.smrf",<br>        "where": "Classification != 7"<br>    },<br>    {<br>        "type": "filters.hag_delaunay"<br>    },<br>    {<br>        "type": "filters.outlier",<br>        "multiplier": 16,<br>        "class": 18,<br>        "where": "!(Classification==2 || Classification==7)"<br>    },<br>    {<br>        "type": "filters.approximatecoplanar",<br>        "where": "HeightAboveGround >= 2 && !(Classification==2 || Classification==7 || Classification==18)"<br>    },<br>    {<br>        "type": "filters.outlier",<br>        "class": 18,<br>        "where": "!(Classification==2 || Classification==7 || Classification==18) && Coplanar == 1"<br>    },<br>    {<br>        "type": "filters.assign",<br>        "value": "Classification=6 WHERE (Coplanar == 1 && !(Classification == 7 || Classification==18))"<br>    },<br>    {<br>        "type": "filters.covariancefeatures",<br>        "mode": "normalized",<br>        "feature_set": "Dimensionality",<br>        "knn": 45<br>    },<br>    {<br>        "type": "filters.assign",<br>        "value": "Classification=4 WHERE (!(Classification==2 || Classification==6) && HeightAboveGround >= 3.0 && Planarity < 0.8 && Scattering > 0.1 && Verticality > 0.1)"<br>    }<br>]<br></div></div></div>