Skip to main content
Photogrammetry

Point Cloud Classification: Ground, Vegetation & Buildings

Classify drone point clouds into ground/vegetation/buildings with Metashape, LAStools, PDAL, CloudCompare, ArcGIS Pro. Tool decision framework.

Eric By — M.S. Geography (GIS spec.), FAA Part 107
Point Cloud Classification: Ground, Vegetation & Buildings

You finish a flight, run Metashape through dense cloud generation, and export a LAZ file with 80 million points. Every rooftop, every tree crown, every gravel access road, and every piece of equipment parked on the pad is mixed together in a single undifferentiated mass of XYZ coordinates. You need a bare-earth DTM for cut/fill volumes, but vegetation is in the way.

Point cloud classification photogrammetry is the process of assigning semantic labels — ground, vegetation, buildings — to individual points in a drone-derived dense cloud. Once classified, you can filter to ground-only points and interpolate an accurate DTM. Skip this step and your “terrain model” is actually a surface model of whatever happens to be sitting on the ground.

This article covers how classification works, why photogrammetry behaves differently from LiDAR, what each major tool actually does under the hood, and when photogrammetry classification is good enough versus when you need to rent a LiDAR sensor.


ASPRS Class Codes: The Standard Labels

Every LAS and LAZ file stores a class code integer on each point. The American Society for Photogrammetry and Remote Sensing (ASPRS) defines the standard codebook in the LAS 1.4 specification. These codes are universal across tools — a class-2 point from Metashape means the same thing as a class-2 point in ArcGIS Pro or PDAL.

The codes you will work with on most projects:

CodeClass NamePractical Meaning
0Never ClassifiedRaw, unprocessed
1UnassignedProcessed, no class assigned yet
2GroundBare earth — used for DTM interpolation
3Low VegetationUnder ~20 in (0.5 m) — grass, crops
4Medium Vegetation~20 in–6.6 ft (0.5–2 m) — shrubs
5High VegetationOver 6.6 ft (2 m) — trees
6BuildingRoof surfaces, structures
7Low Point / NoiseBelow-ground outliers, sensor error
9WaterLake and river surfaces
17Bridge DeckBridge surfaces, separated from ground
18High NoiseAirborne returns, birds

Vegetation height thresholds (classes 3, 4, 5) are measured from the classified ground surface — which is why you must classify ground first before vegetation classification is meaningful. When a fresh Metashape dense cloud exports, every point is typically class 1 (Unassigned). Some Pix4D exports are class 0. Either way, you are running classification yourself in post.


How Photogrammetry Differs from LiDAR for Classification

Understanding this single difference will save you from delivering unusable DTMs.

Canopy Penetration: The Hard Limit

LiDAR fires active laser pulses. A single pulse can produce multiple returns: first return off the canopy, intermediate returns through gaps in foliage, and a last return from the ground. In forested terrain with reasonable canopy gaps, 10–30% of pulses reach bare earth — enough to interpolate a DTM.

Photogrammetry works from reflected light and image matching. Structure from Motion (SfM) and multi-view stereo reconstruction create points only where cameras can see a surface. Under any vegetation — even tall grass — photogrammetry cannot reconstruct what is hidden from the camera lens. The ground beneath a tree canopy is simply absent from a photogrammetry point cloud. The nearest points are the crown surface.

Any DTM generated from photogrammetry in vegetated terrain is not a terrain model. It is a surface model of whatever is on top.

Density and Edge Noise

Photogrammetry at typical drone survey overlap (75/75 or 80/75) produces 100–1,000+ points per square foot — denser than most drone LiDAR systems. That density advantage disappears under canopy because all those points are at the canopy surface.

Photogrammetry clouds also carry more noise along object edges — where image matching is geometrically ambiguous — and in low-texture areas like water, asphalt, and uniform painted rooftops. LiDAR transitions more cleanly at building edges. For photogrammetry clouds, a noise-filtering pass before ground classification is not optional on production work.

DTM Accuracy by Terrain Type

Peer-reviewed benchmarks give you a practical baseline for setting client expectations:

  • Open flat terrain, less than 8 in vegetation: Photogrammetry DTM RMSE ~5–7 in with RTK/PPK and GCPs. LiDAR achieves ~4–5 in. The gap is small. Photogrammetry is acceptable.
  • Rolling terrain with low grass, less than 12 in: Photogrammetry RMSE ~6–10 in. Parameter tuning required.
  • Medium vegetation, more than 24 in tall: Photogrammetry RMSE degrades to ~14 in. LiDAR holds ~4 in. That is a 3x gap. Not reliable for survey-grade deliverables.
  • Dense shrubs or crops, 1–6 ft tall: RMSE can exceed 18 in. Large areas will have no real ground points.
  • Tree canopy: Zero usable ground points from photogrammetry. Do not attempt.
Bar chart comparing photogrammetry vs LiDAR DTM RMSE across four terrain/vegetation categories: open flat, rolling low grass, medium vegetation over 24 inches, and tree canopy
Photogrammetry matches LiDAR on open terrain. The gap widens to 3x under medium vegetation and becomes absolute under canopy — where photogrammetry returns zero usable ground points.

The honest rule: if you fly the site and can see dirt in the imagery, classification will work. If you see green, you need LiDAR — or you need to document the limitation explicitly in your deliverable.


Tool-by-Tool Walkthrough

Flowchart showing point cloud classification workflow from drone flight through tool selection (Metashape, LAStools, PDAL, CloudCompare, ArcGIS Pro) to DTM output, with decision branch for open vs vegetated sites
Classification workflow from raw dense cloud to DTM. Tool choice depends on what you already have, what the deliverable requires, and whether you need commercial-grade building detection.

Metashape — Built-In ATIN Classification

Metashape’s ground classifier uses an Adaptive Triangulated Irregular Network (ATIN) algorithm — not CSF. This matters because the parameter names only make sense in an ATIN context.

The algorithm works in two stages. First, it divides the cloud into grid cells and finds the lowest point in each cell to build a coarse seed TIN. Then it iteratively adds more points to the ground class if they satisfy two conditions: within Max Distance of the current TIN surface, and the angle between the TIN face and the candidate point is within Max Angle.

Key parameters and how to tune them:

ParameterDefaultWhen to Adjust
Max Angle (°)15Increase to 20–30° for steep terrain
Max Distance (m)1.0Increase for rough, uneven terrain
Max Terrain Slope (°)45Lower to reduce vegetation bleeding into ground class
Cell Size (m)50Set to match the largest gap with no ground — e.g., a large building footprint
Erosion Radius (m)0Set to 1–2 m to reduce building/tree stump artifacts

The workflow: Tools → Point Cloud → Classify Ground Points. After running, inspect in 3D view with ground points highlighted. Then Model → Build DEM, Source: Point Cloud, Classes: Ground (class 2).

Common issues on photogrammetry data: tall grass bleeding into the ground class (increase Max Terrain Slope or tighten Max Distance), and building walls classified as ground (set Erosion Radius to 2 m).

CloudCompare — CSF Plugin (Free)

CloudCompare ships with the Cloth Simulation Filter (CSF) as a bundled plugin. This is the most accessible free option for ground classification.

CSF is a physics simulation: the point cloud is flipped upside down, a virtual cloth is dropped onto the inverted surface, and gravity plus internal spring tension causes the cloth to settle against the terrain. Points within a set distance of the settled cloth are ground; everything else is non-ground.

Key parameters:

ParameterDefaultWhat It Controls
Cloth Resolution0.5 mGrid spacing — smaller captures finer terrain detail
Classification Threshold0.5 mDistance cutoff: points within this distance = ground
Rigidness2 (Medium)Cloth stiffness: 1=rugged terrain, 2=default, 3=flat only
Slope ProcessingOnLeave enabled for photogrammetry
Post-processingOnFills density gaps in cloth

Workflow: load your LAZ, select the cloud, Plugins → CSF Filter, set parameters, run. For survey delivery with standard ASPRS codes, you will need to reclassify or push the result through LAStools or PDAL to write class-2 codes. For visual QA or one-off work, CloudCompare CSF is fine as-is.

LAStools — Production Pipeline

LAStools (rapidlasso GmbH) is the industry-standard toolkit for production classification. The standard three-step workflow:

Step 1 — lasground classifies ground vs. non-ground using the Axelsson progressive TIN densification algorithm. For photogrammetric clouds, tune the -bulge parameter. Use -nature preset for natural terrain, -town for urban areas:

lasground -i survey.laz -o survey_ground.laz -nature

Step 2 — lasheight computes height above ground for every non-ground point. Required before vegetation heights can be determined:

lasheight -i survey_ground.laz -o survey_height.laz

Step 3 — lasclassify assigns buildings (class 6) and high vegetation (class 5) among elevated non-ground points. Minimum reliable density for building detection: ~2 points/m² — photogrammetry routinely delivers 100–1,000+:

lasclassify -i survey_height.laz -o survey_classified.laz

Licensing. LAStools is not open source. lasground, lasclassify, and lasheight require a commercial license for paid or government work. Without a license, outputs are degraded. Verify current pricing at rapidlasso.de before building a deliverable workflow around it.

ArcGIS Pro — Classify LAS Ground

ArcGIS Pro’s Classify LAS Ground tool (3D Analyst extension) offers four detection methods: Standard, Conservative, Aggressive, and Recover Ridges. Standard is the right starting point for most photogrammetry inputs. After running Standard, use Recover Ridges to pick up ridge lines the initial pass missed.

Classify LAS By Height provides vegetation height classification (classes 3/4/5) after ground is established, analogous to the lasheight + lasclassify pipeline in LAStools.

ArcGIS Pro also supports deep learning-based classification via Classify a Point Cloud with Deep Learning. For complex urban scenes, deep learning outperforms rule-based methods. Requires 3D Analyst extension — confirm your client’s licensing before specifying this workflow.

See also: AI Point Cloud Processing for a full breakdown of deep learning classification options.

PDAL — Open-Source Scripted Pipelines

PDAL (Point Data Abstraction Library) is a BSD-licensed command-line and Python library for point cloud processing. For ground classification, the recommended filter is filters.smrf. A complete pipeline:

{
  "pipeline": [
    "input.laz",
    {
      "type": "filters.outlier",
      "method": "statistical",
      "mean_k": 12,
      "multiplier": 2.2
    },
    {
      "type": "filters.smrf",
      "ignore": "Classification[7:7]",
      "slope": 0.2,
      "window": 16,
      "threshold": 0.45,
      "scalar": 1.2
    },
    {
      "type": "filters.range",
      "limits": "Classification[2:2]"
    },
    "ground_only.laz"
  ]
}

Run it with:

pdal pipeline classify_ground.json

PDAL is free, cross-platform, and integrates cleanly with Python and ODM/WebODM post-processing scripts. Steeper learning curve than Metashape or CloudCompare, but the right tool for automated batch work.


Decision Framework: Which Tool to Use

Use Metashape’s built-in classifier if:

  • Your project is already running through Metashape
  • The site is open or lightly vegetated (less than 30% canopy cover)
  • You need ground-only classification for DTM generation
  • You do not need formal building or vegetation class codes in the deliverable

Use CloudCompare + CSF if:

  • You need a free option for QA or one-off classification
  • You want to visually verify ground separation before committing to a pipeline
  • You do not need ASPRS-coded output for delivery

Use LAStools if:

  • You need complete classification: ground, vegetation, and buildings
  • You are running production volume with batch automation
  • Your deliverable specifies LiDAR Base Specification-compliant class codes
  • You have a commercial license

Use ArcGIS Pro if:

  • Your final deliverable workflow lives inside ArcGIS Pro anyway
  • Your client or agency requires an Esri-based workflow

Use PDAL if:

  • You are building a scripted, automated pipeline
  • You need open-source only (no commercial license budget)
  • You are integrating with ODM, WebODM, or Python processing scripts

When photogrammetry classification is not sufficient:

  • Any significant tree canopy exists over the survey area
  • Deliverable spec requires survey-grade vertical accuracy below 3-inch RMSE
  • Project involves flood modeling, stormwater design, or coastal elevation
  • USGS 3DEP-compliant deliverable is required

For a detailed comparison of when to choose LiDAR over photogrammetry entirely, see LiDAR vs. Photogrammetry.


Accuracy Expectations: What to Document and Deliver

Set these expectations with clients before you fly, not after you process.

On a cleared construction site or agricultural field with less than 8 inches of vegetation, RTK/PPK photogrammetry with GCPs will produce a DTM with RMSE around 5–7 inches. That is adequate for stockpile volumes, cut/fill estimates, and 1-foot contour intervals. On rolling terrain with low grass, RMSE typically runs 6–10 inches — adequate for 2-foot contours and general drainage analysis, but requiring visual QA of the ground mask.

Once vegetation exceeds 24 inches in height, RMSE climbs toward 14 inches and higher. At that point you are interpolating across large areas with no real ground data underneath. Document it explicitly rather than delivering a DTM that looks authoritative but is not.

For checkpoint validation, use a minimum of five independent check points (not GCPs used in processing) spread across the site, including areas near vegetation and structure edges. Record: total points classified as ground, what percentage of the cloud that represents, RMSE at checkpoints, and known areas of limitation.


Frequently Asked Questions

What ASPRS class code is ground in a LAS file?

Class 2. This is universal across all tools and the ASPRS LAS 1.4 specification. When filtering for DTM generation, filter for Classification == 2. Low vegetation is class 3, medium vegetation class 4, high vegetation class 5, buildings class 6.

Does Metashape use CSF for ground classification?

No. Metashape uses an ATIN (Adaptive Triangulated Irregular Network) algorithm. CSF is available as a third-party Python script, but the native classifier is ATIN. Confusing the two leads to tuning the wrong parameters — Max Angle and Max Distance are ATIN parameters, not CSF parameters.

Can I get a usable DTM from photogrammetry under trees?

No. Photogrammetry cannot see through canopy. Every point under a tree crown is on the canopy surface, not the ground. For any project with significant tree cover, you need LiDAR. There is no workaround.

Do I need a license to use LAStools for client work?

Yes. lasground, lasheight, and lasclassify all require a commercial license for paid or government work. Without a license, outputs are degraded with injected noise and point-count caps. PDAL is a free alternative that handles the same classification tasks with no licensing restrictions.

What is the difference between a DTM and a DSM?

A DSM (Digital Surface Model) represents the top surface of everything — canopy, buildings, vehicles. A DTM (Digital Terrain Model) represents bare earth only. Classification is the step that separates the two: classify ground points (class 2), then interpolate the DTM from ground-only.

How do I classify a photogrammetry point cloud in PDAL without ArcGIS or Metashape?

Use filters.smrf in a PDAL JSON pipeline. Run a filters.outlier pass first to clean up photogrammetry edge noise, then run SMRF with slope: 0.2, window: 16, threshold: 0.45. PDAL is free, cross-platform, and handles batch processing well.

Eric

Written by Eric

M.S. Geography (GIS specialization) from St. Cloud State University, FAA Part 107. Pacific Northwest-based; active public-sector Blue UAS operator. Geospatial background covering spatial data, remote sensing, and coordinate systems — applied to drone mapping workflows and deliverables.

About Eric →