Classification gives every point a label saying what it represents — ground, vegetation, building, water, noise — stored as a single number in the point record using theASPRS class codes. Class 2 is ground, class 6 is building, and so on.
The critical thing to understand is what classification isnot. It is not measured. The sensor recorded a range and an angle; nothing in that says whether the beam struck a roof or a pavement. Classification is a judgement added afterwards, almost always by an algorithm, and the file records the conclusion without recording the confidence. A file asserting class 2 is telling you what some software decided, and that is all.
The only real clue: context
Consider one point, alone: an X, a Y, a Z, maybe an intensity. Is it ground? The question has no answer. A point at 43.2 m elevation could be a pavement in a high street or the roof of a single-storey building in a valley. Nothing in the record distinguishes them.
Now consider the same point with its surroundings. If points nearby are all at similar heights and the surface varies gently over fifty metres, it is ground. If it belongs to a flat patch sitting four metres above everything around it, ending in an abrupt edge, it is a roof.
Every classification algorithm is an attempt to formalise that second paragraph. They differ in how they measure context and what they assume about landscapes, but none escapes the fact that the information lives between points rather than in them.
Ground comes first
Classification is not a single pass that sorts points into bins. It is a sequence, and ground is nearly always the first real step — because most other classes are defined relative to the ground.
"Building" does not mean flat; it means flat and above the terrain. "High vegetation" means foliage above a height threshold, and a threshold needs a reference. Neither definition can be evaluated until you know where the ground is at that spot. This is also why an error in the ground surface propagates: a roof mistaken for terrain raises the local ground, and every point above it is then measured against the wrong baseline.
The usual order:
- Remove gross noise. Points far below or far above anything plausible, which would otherwise anchor the ground surface in the wrong place. A single low outlier can drag a wide area down.
- Find the ground. Build a terrain surface from the lowest credible points, admitting or rejecting each point according to how it sits relative to that surface.Creating a DTMcovers the algorithm families in detail.
- Normalise heights. Replace each point's absolute elevation with its height above ground. This is the step that makes everything afterwards tractable — a building on a hillside and a building in a valley now look identical, and a single threshold works across the whole site.
- Separate the above-ground classes using geometry, return structure and colour.
Step 3 is quietly the most valuable idea here. Before normalisation, terrain relief swamps every other signal: on a site with thirty metres of slope, absolute elevation says nothing about what a point is. After it, a number that was meaningless becomes the single most informative feature available.
The features available
| Feature | What it distinguishes | Caveat |
|---|---|---|
| Height above ground | Everything from everything. The primary feature after normalisation. | Only as good as the ground surface it is measured from. |
| Local roughness | Vegetation (rough, scattered in depth) from roofs and ground (smooth, planar). | Fails on rough roofs, flat-topped hedges and complex roof furniture. |
| Planarity | Buildings, which are made of flat pieces meeting at sharp angles. | Needs enough points on the plane. Small or complex roofs are marginal. |
| Return structure | Vegetation very strongly. A pulse that produced later returns passed through something. | Absent from photogrammetry, and frequently zeroed in exported LiDAR. |
| Connected component size | Real objects from clusters of noise; buildings from isolated clutter. | Expensive to compute on large clouds. |
| Colour (RGB) | Vegetation, which is measurably greener than almost everything else. | Only present if imagery was draped. Shadowed foliage loses its green bias, and a colour cast can turn a whole survey green. |
| Intensity | Sometimes water, sometimes road surfaces. | Uncalibrated and not comparable between flight lines. Weak evidence. |
Why return structure matters so much
Of everything in that table, return information is the most powerful single feature — and it is worth understanding why, because its absence changes the whole problem.
If a pulse produced three returns and this point is the first, then something was behind it: the beam passed through. Solid surfaces do not let beams through. That one fact separates canopy from roof almost for free, and it is why classifying airborne LiDAR over woodland is tractable at all.
A photogrammetric point cloudhas none of it. Every point is reconstructed from images, so every point is a first and only return, and the strongest discriminator is simply gone. Such classifiers must lean much harder on geometry and colour — which is exactly the trade-off theclassifier on this site is built around, since it targets that case.
How each class is actually found
Ground — a surface built from the lowest credible points, with each point tested against it. The persistent difficulty is that the settings which preserve a cliff also preserve a warehouse roof.
Vegetation — rough, three-dimensional and distributed in depth rather than concentrated on a plane. Where returns exist, multi-return pulses are strong evidence. Where colour exists, a green bias is strong evidence. Height above ground then splits it into low, medium and high (classes 3, 4 and 5), by thresholds that are pure convention rather than physics.
Buildings — planar patches, above ground, large enough to be structural, usually with sharp boundaries. The hard parts are distinguishing a flat roof from flat terrain when the roof is large, and deciding what to do with the things attached to roofs: plant, ducting, skylights, aerials.
Noise — points with no plausible neighbours. Low noise (class 7) sits below the real surface, from multipath and sensor artefacts; high noise (class 18) sits above everything real, typically birds, insects, haze or cloud.
Water — often not classified automatically at all. Water absorbs most of the beam, so it appears as an absence rather than a surface, and producers frequently delineate it from imagery or existing vector data instead of from the points.
Why it is never certain
It is worth being blunt about this, because vendor material rarely is.
Every production ground filter is a heuristic. It encodes a reasonable belief about what landscapes look like, and it is wrong wherever a landscape disagrees. There is no ground truth inside the file to appeal to, so an algorithm cannot know it has erred — it will classify a warehouse roof as terrain with exactly the same silence as it classifies a car park correctly.
The cases that reliably cause trouble:
- Large flat roofs. At fifty metres across, a roof looks like terrain by every local measure.
- Dense low vegetation. Scrub and long grass return echoes that merge with the ground, leaving the surface systematically high.
- Steep and broken terrain. Tolerances loose enough for a cliff are loose enough for a building.
- Bridges and elevated structures. Genuinely ambiguous; different specifications give opposite answers.
- Sparse ground under canopy. Few points, so the surface is largely interpolated and individual errors carry far.
- Everything else above ground. Vehicles, fences, poles, machinery. A well-built classifier leaves these unclassified rather than forcing them into a class they do not belong to.
Machine-learning classifiers have become common and shift the failure modes rather than removing them: they generalise well to data resembling their training set and can fail in less predictable ways on data that does not. They are still producing an estimate, and it still needs checking.
Checking a classification
Since the output carries no confidence value, quality assurance is visual and statistical. A practical routine:
- Open the file and colour by classification. Each class gets its own colour, so the structure of the decision is immediately visible.
- Look from a low angle. This matters more than anything else here. From directly above, a roof classified as ground looks completely normal. In profile it is obvious.
- Go to the hard cases deliberately: the largest flat roofs, the densest woodland, the steepest slope, any bridge, and the water margins.
- Check the class histogram. Thestatistics panel gives an exact count per class. Compare the proportions against what the site actually looks like — a wooded catchment reporting 90% ground has classified canopy as earth.
- Check for empty classes. A file over a city with no class 6 was never building-classified, whatever else it contains.
Classifying a file here
Run automatic classification in your browser. Ground is written as class 2, vegetation as 3, 4 and 5 by height above ground, and buildings as 6. The file never leaves your machine.
What it does, specifically, and what it does not:
- Ground extraction uses a Simple Morphological Filter(Pingel, Clarke & McBride, 2013), which tests the increment each window step removes rather than an absolute height threshold — chosen because that is what separates a wide roof from steep ground.
- It is built for photogrammetric clouds with no return information, and uses RGB colour where the cloud carries it.
- Anything above ground that is neither roof nor foliage — vehicles, fences, poles, machinery — is leftunclassified on purpose, rather than guessed at.
- It does not classify water, bridges, wires or any of the higher ASPRS classes.
Then check the result, using the routine above. An automatic classification is a strong first pass, and treating it as a finished answer is how a warehouse roof ends up in a flood model.
For filtering by the classes once they exist, seeremoving vegetation from a point cloud.