Skip to content

Clean a point cloud

Raw LiDAR data almost never lands ready for analysis. This workflow covers the five operations you'll reach for most often: transform, crop, erase, filter, and resample. Apply them in roughly that order.

Checking a hidden object shows it

Transform, Crop, Erase, Filter, Resample, Compute Normals and Cross-section act on the objects checked in their panel, not on what happens to be visible. So that you always see what a tool is about to change, checking a hidden scan or mesh shows it for as long as it stays checked. It is hidden again when you uncheck it or the tool closes (applying included). Objects that were already visible are left alone.

Transform (move, rotate and scale)

Use Transform (in the tool column) to move, rotate and scale point clouds and meshes in world space — most often to bring data to the origin, level a tilted scan, or line it up with another cloud before registration.

Choosing what to transform

The panel opens with an Objects list of every point cloud and mesh in the scene, each with a checkbox. The ones you had selected in the Scans and Meshes panes start checked; if nothing was selected, nothing is checked and you tick what you want to move. The transform applies to every checked object at once, as a group, so a cloud and the mesh built from it can be moved together. The button is available whenever the scene holds a cloud or a mesh — you do not need to select anything first.

Once the panel is open, only the checkboxes decide what moves: clicking rows in the Scans or Meshes panes does not change it. Unchecking an object takes it out of the operation (it snaps back); checking one mid-edit applies the current values to it straight away.

Setting the transform

The numbers are relative, and the same values apply to every checked object:

  • Move by — X / Y / Z in meters.
  • Rotate by (°) — X / Y / Z in degrees.
  • Scale by (×) — X / Y / Z factors. The lock (on by default) keeps the three equal; unlock it to stretch one axis. Factors must be positive, so scaling cannot mirror an object.

Everything turns and scales about the scene origin (see below), shown at the top of the panel. The order is fixed: scale along the world axes first, then rotate, then move. The translation arrows and rotation rings drawn at the scene origin move all checked objects together, and keep a fixed size on screen whether you are looking at a whole survey or zoomed into one branch. Every change updates the viewport live before you commit it:

  • Type exact values in the panel.
  • Drag the gizmo's arrows to move along an axis, or its colored rings to rotate about an axis.
  • Use the Blender-style shortcuts: press T to move, R to rotate or S to scale, optionally lock an axis with X / Y / Z, type a distance (angle in degrees, or factor), then click (or Enter) to set it. With a cloud selected, the key also opens the Transform tool if it isn't open yet. Unlike the gizmo, the gesture works from wherever the cursor is, so it's handy when the scene origin is off screen. See Keyboard shortcuts.

Rotation and scale work about the scene origin. There is always one: until you place it yourself it sits at the center of the loaded scene, marked in the viewport by a red-and-white ring. Move it first when you need to pivot around a specific point — Center on selection puts it on the selected clouds' own center, which spins or scales them in place.

Stretching a scan along one axis

A non-uniform scale (different X / Y / Z factors) on a point cloud distorts its scan geometry: beam angles, recorded ranges and trajectory lever arms no longer match the points. The panel warns you when this applies. Leaf Area Density and Backfill Misses on that scan are no longer physically meaningful afterward. A uniform scale keeps the scan consistent (recorded ranges are scaled with it).

Nothing is applied until you decide:

  • Apply applies the transform to every checked object. The panel stays open with the same objects checked and the values back to zero, so you can go straight on to the next change — move another scan by a different amount, or a mesh after a cloud — without reopening the tool. Apply is grayed out while there is nothing to apply, so a lit button means there are changes waiting. The pending values belong to whatever is checked — apply them before checking a different object, or that object takes them on too.
  • Cancel discards the changes you haven't applied yet and closes the panel — the objects snap back to where the last Apply left them. With nothing pending the button reads Close.
  • Reset Move / Reset Rotation / Reset Scale return those values to zero (or 1) without closing, so you can start over.
  • Closing with the ✕ while you have unsaved changes asks whether to Apply or Discard first.

While the panel is open the other tools are locked, so you always finish (or cancel) a change before doing anything else — a half-entered transform can never leak into a later step.

Meshes keep their transform as position / rotation / scale, and applying it is undoable (⌘Z / Ctrl+Z) like any other mesh edit. One case changes the mesh itself: a non-uniform scale on a mesh that is already rotated would shear it, which position / rotation / scale cannot express, so the stretch is baked into the mesh's vertices (still undoable; the panel says when this will happen). Voxel grids and generated plants cannot be sheared this way — Apply is disabled with the reason shown — and a voxel grid can only be rotated about Z. To type an exact absolute position, rotation or size for one mesh, or to use Fit to Scans and grid subdivisions, use the transform button on that mesh's row in the Meshes pane.

Apply bakes the transform into a point cloud's geometry

Clicking Apply writes the move, rotation and scale into the cloud's actual point coordinates rather than keeping a display-only offset. This is what guarantees that every later tool — triangulation, leaf area density, skeletons, QSM, export — operates on the cloud where and how you placed it.

Consequences worth knowing:

  • Everything tied to the scan's world position moves with it: the recorded scanner origin (and, for a moving-platform scan, the whole trajectory and its per-pose orientation), the sky/miss points, per-pulse beam origins, and the miss overlay. Stored normals are re-oriented too. So a transformed scan stays internally consistent — the scanner still sits in the right place relative to its points, which is what LAD and triangulation depend on.
  • Like applying a crop or a filter, an applied transform is a permanent edit to the working copy — it is not on the undo stack. (Undo after an Apply that moved both reverts the meshes only.) Your source file on disk is never modified.
  • Applying is fast, including a rotation or scale. The points themselves move straight away, so every tool sees the cloud where you put it immediately. What is not redone straight away is the display index a streamed cloud is drawn from: rebuilding that would take far longer than the move itself, so the viewer simply draws the existing index in its new position. You will not see a difference.

The erase brush and the label brush still rebuild the index on a rotated or scaled cloud before they apply, because they select points using the view you drew them in. The first of those afterward shows an Updating display… indicator while it catches up, then applies normally. Crop does not need to wait.

The toolbar also has a one-click Move to Origin that centers the cloud's bounding box at (0, 0, 0) without rotating it.

Setting the scene origin

Set Scene Origin (the crosshair button in the top View Controls box, next to the command-search icon / Tools → Pre-processing → Set Scene Origin) moves the pivot point, like CloudCompare's. It's a scene control rather than an analysis tool, so it sits with the view controls. The origin is the rotation (and scale) center for the Transform tool and the rotation center for the camera: a left-drag in the viewport turns the whole view about it, so panning no longer changes what you rotate around. Zoom is not tied to it — the scroll wheel flies toward whatever is under your cursor — so the origin only decides what you circle. Moving the origin does not move the camera: the view stays exactly where it is, it just pivots somewhere else. Use Zoom to origin in the panel if you do want the camera to go there.

With no placement of your own, the origin sits laterally at the center of the loaded scene but vertically at its base — on the ground rather than halfway up — which is usually the point you want to circle.

Both of those are measured robustly, ignoring the outermost few percent of points, so far strays cannot drag the pivot off the data. This matters most on a terrestrial scan, which typically carries a thin halo of very distant returns (a treeline hundreds of meters off, atmospheric hits, the odd artifact) spread unevenly to one side. Those points define the raw bounding box while contributing nothing you want to look at, and a pivot at its center can end up a kilometer from the cloud — at which range even a small orbit drag sweeps the whole scene out of view.

Scan projects start at the scanner instead. If the first thing you load into an empty scene records where the instrument stood — a RIEGL project, a Helios XML with <origin> tags, an E57 with poses — the origin starts at the average of those scanner positions rather than at the middle of the bounding box. For a multi-station plot that is the better pivot: the bounding box is defined by whatever the beams happened to reach (sky returns, a distant treeline, one stray outlier), while the stations bracket the thing you came to look at. The panel says so while that placement is in force, and Reset to scene center drops it. Scans imported later, into a scene that already has content, never move the origin — only the first load seeds it.

That ground level is measured robustly, so a handful of erroneous returns below the terrain (multipath, birds, scanner artifacts) will not drag it down: it ignores the lowest 0.5% of points rather than taking the single lowest one. The ground grid uses the same estimate.

A red-and-white ring marker (a 3D cursor) shows the origin in the scene, at a constant size no matter how far you zoom. Click the ring to select it: an X/Y/Z arrow gizmo appears, and dragging an arrow slides the origin along that axis. Click anywhere else in the viewport (or press Esc) to put the gizmo away. (Opening the panel arms Pick in viewport, which takes over viewport clicks — click that button once to turn it off if you want to grab the marker instead.) The marker only appears once something is loaded, so it never sits on top of the empty-viewport import prompt.

In the Scene Origin panel you can:

  • Pick in viewport — click-to-place. This is already armed when the panel opens, so you can just click a point straight away; it snaps to the surface of whichever visible cloud, mesh or QSM you click (it doesn't need to be selected, and clicking a mesh places the origin on it rather than selecting it), or drops onto the scene's ground level if you click past all of them. (The view does not move when you pick.) Placing a point disarms it, and the button toggles it off and on again by hand.
  • Type exact X / Y / Z world coordinates.
  • Center on selection — snap the origin to the middle of the selected cloud(s).
  • Snap to scanner — put the origin exactly on a scanner position. Choose the scan from the Scanner position dropdown above the button. Only scans that record where the instrument stood are listed; when nothing in the scene does (a plain XYZ / LAS / PLY import records no pose), the dropdown and the button are grayed out.
  • Reset to scene center — drop your placement and return the origin to its default: laterally the middle of the loaded scene, vertically its base. This also clears a scanner-average placement seeded at import.

The origin returns to that default when you start a new scene (File → New).

To hide the marker (and its gizmo) without moving the pivot, uncheck Origin marker in the Display panel in the lower-right corner, where it sits with the other viewport toggles.

Crop

Use Crop (scissors icon) to keep only points inside (or outside) a region. Three shapes are supported — a 3D Box, a screen-space Rect(angle), and a freeform Polygon lasso — and the same region applies to every scan you check in the panel. The same tool, shapes and modes also cut meshes — see Cropping meshes.

  1. Click Crop. The panel lists every point cloud in the scene under Scans, each with a checkbox. The scans you had selected in the Scans pane start checked; if nothing was selected, nothing is checked — tick the scans to crop (the button works without a selection). Once the panel is open only the checkboxes decide what gets cropped: clicking rows in the Scans pane changes nothing. The first time, a green box appears around the union of the checked scans' bounding boxes (or around the first scans you check); after that, Crop reopens in the shape you last used — see below.
  2. In the panel choose Box, Rect, or Polygon at the top, then a Mode below it: Keep Inside (default), Keep Outside, or Segment. The first two discard the points you don't keep; Segment keeps both halves as separate clouds (see below).
  3. Shape the region (see below).
  4. Click Apply at the bottom of the panel. A Cropping… indicator appears while the crop is processed, and the removed points stay hidden the whole time (in Segment mode nothing is hidden, since both halves are kept). Click the × in the panel header to dismiss without applying.

Crop remembers the shape and mode you last picked. Reopen it after closing or applying and it comes back as you left it — Polygon with Keep Outside, say, with the lasso already armed — so a repeated crop across several clouds needs no re-picking. The region itself is not kept (a Box starts from the checked scans' bounds, a Rect or Polygon is drawn fresh), nor is Keep original cloud, which always starts unticked. File → New returns Crop to Box / Keep Inside.

When more than one scan is checked, the Apply button reads "Apply crop to N scans" and each scan gets its own cropped result — identities are preserved. Reset Crop Box fits the box to the checked scans. The scans are cropped one after another, so the indicator names the scan it is on and shows overall progress — Cropping plot_north.laz (3 of 8)… — rather than a bare Cropping… for the whole run. Its × cancels the whole run: scans already cropped stay cropped, and the rest are left untouched.

Applying is immediate; the display catches up on its own

A crop takes effect as soon as you click Apply, however large the scan. The points are gone from that moment — every tool, every export and every measurement sees the cropped cloud straight away.

What takes longer is the display index a streamed cloud is drawn from, which has to be rebuilt to match. That runs in the background behind an Updating display… indicator, and until it finishes the viewer simply hides the cropped-away points instead. You can keep working — crop another scan, run a tool, export — while it does. Its × dismisses the rebuild; nothing is lost if you do, because the cropped result is already what you see and what every tool reads.

Preview detail while cropping

For large (LOD-streamed) scans, the live crop preview renders at reduced point density so it stays responsive while you position the box — you may see the displayed density change as you move or zoom. This affects only the preview; Apply re-crops the scan at full resolution.

Box mode

Two ways to shape the box:

  • Type dimensions / center in the panel for an exact axis-aligned box.
  • Click "Draw box in viewport" then click two opposite corners. Each corner lands on the surface under the cursor — click a tree and the corner lands at that tree — falling back to the ground plane where the click misses the cloud. After the first click a marker shows where it landed and a live preview box follows the cursor until you click the second corner. The current box is hidden while you draw so it can't obscure what you're aiming at, and the camera is locked between the two clicks so an orbit can't be mistaken for a corner. The box's Z extent auto-spans the data; refine with the dimension / center fields afterwards. Esc cancels and restores the previous box.

Box mode is axis-aligned. For a region that isn't square to the axes, use Rect or Polygon instead.

Cropping out the ground

For TLS scans of a single plant, raise the box's lower Z bound to the level of the lowest branch (adjust the Z center / dimension fields). With Keep Inside selected, this removes the ground in one step — much faster than filtering by height.

Rect mode

Rect mode is a screen-space rectangle — the quick, any-view counterpart to Box. Unlike the world-space box, it works from any camera angle.

  1. Pick Rect in the panel. The view does not change: you aim the rectangle through the same perspective view you were already looking through. The camera is held while you drag.
  2. Click-drag in the viewport from one corner to the opposite corner. A dashed preview rectangle follows the cursor; release to commit it. (The floating panels can't take the pointer — see the note under Polygon mode.)
  3. On release an outline of the region appears and the cloud redraws with the cropped-away points hidden, the same live preview described under Polygon mode.
  4. Orbit, pan and zoom freely to check the selection from other angles.
  5. Click Apply in the panel, or use Redraw rectangle to start over. Esc clears the rectangle and leaves Crop open, ready for another one; a second Esc (with nothing drawn) exits Crop.

The rectangle cuts exactly what was on screen when you released the drag: everything that appeared inside it from that viewpoint. In 3D that region is a wedge that starts at the camera and widens with distance — its cross-section is a rectangle that grows with depth, not a constant slab. For a cut with a fixed footprint, use Box.

Once the rectangle is set, the view is free. The outline is drawn in the scene as that wedge, clipped to the depth of the scans being cropped: from the angle you drew it, it is the rectangle you dragged; from any other angle you see the volume that will be cut. The selection is fixed at the moment you released the drag and does not follow the camera.

Polygon mode

Polygon mode is a screen-space lasso — useful when the region you want isn't a tidy box.

  1. Pick Polygon in the panel. The view does not change: you aim the lasso through the same perspective view you were already looking through. The camera is held while you place vertices.
  2. Click in the viewport to add vertices. Right-click or Backspace removes the last vertex.
  3. Double-click the last vertex, or press Enter, to close the polygon. An outline of the region appears (green for keep, red for remove), and the cloud itself redraws with the cropped-away points hidden — so you see the actual result before committing to it.
  4. Orbit, pan and zoom freely to check the selection from other angles.
  5. Click Apply in the panel, or use Redraw polygon to start over. Esc clears the polygon and leaves Crop open, ready for another one; a second Esc (with nothing drawn) exits Crop.

The lasso cuts exactly what was on screen when you closed it: everything that appeared inside the outline from that viewpoint. In 3D that region is a cone that starts at the camera and widens with distance: a lasso that hugs a near branch takes in a wider patch of whatever lies far behind it.

Once the polygon is closed, the view is free. The outline is drawn in the scene as that cone, clipped to the depth of the scans being cropped: from the angle you drew it, it is the ring you traced; from any other angle you see the volume that will be cut. The selection is fixed at the moment you closed the polygon and does not follow the camera.

Unlike Box mode, the polygon and rectangle previews keep the cloud at full detail — only the points the crop removes disappear. If the rest of the cloud visibly thins out, that's a bug, not the crop.

Why Box previews look sparser

Box mode draws its preview with a GPU clip volume, which forces the graphics card to process points it then throws away — the cost climbs steeply when you shrink the box onto a dense region. To stay responsive, Box mode previews at a reduced point density (a quarter of your Settings → Display point budget, never below the minimum viewable density). Rect and Polygon don't use a clip volume, so they pay no such cost and preview at your full budget.

The reduction is display-only: Apply always re-runs at full resolution, so the saved cloud is unaffected either way. If Box previews are too sparse for you to aim with, raise Display point budget in Settings — the crop preview scales with it.

Panels block the draw

The floating panels (Crop, the scan/mesh stack on the right, Display, and any toast) sit over the viewport, so they take the click before the lasso or rectangle can. Vertices can't land on a panel, a drag can't start on one, and the preview line stops at the panel's edge (turning amber, with a ⊘ at the cursor) instead of following the pointer underneath it. Only the panels themselves block — the empty space around them in the right-hand column is ordinary viewport you can draw through.

The panels stay clickable while you draw — that's the trade. To reach scene behind them, orbit or pan the view first, or collapse the panels (the Display bubble collapses from its header; the crop panel's × exits Crop). A rectangle drag released over a panel still commits, at the clamped edge point.

Segment mode (keep both halves)

Keep Inside and Keep Outside discard the points you don't keep. Segment instead splits each checked scan in two: the original scan keeps the in-region points (the same set Keep Inside would keep), and a new "… (segment)" cloud is added to the scene holding the cropped-out points. No points are lost. It works with all three shapes — Box, Rect, and Polygon.

The new cloud is given its own color from the scan palette, the same as any newly created scan, so the two halves are immediately distinguishable in the viewport — the "… (segment)" name tells you where it came from. Recolor or rename it from the scan list like any other scan. It's handy for separating a plant from its ground, or splitting one scan into named regions without re-importing.

The whole cloud stays visible in Segment mode

Keep Inside and Keep Outside hide the points they are about to discard, so the preview shows you what will survive. Segment discards nothing — both halves become clouds — so it leaves the entire cloud on screen and draws only the region outline to show where the split will fall. Switching between the modes turns that culling on and off.

Cropping meshes

When the scene holds a mesh, the Crop panel shows a second checked list, Meshes, under Scans. Tick the meshes to cut; the ones selected in the Meshes pane start checked. Scans and meshes can be checked together, and one region then cuts all of them — handy for trimming a cloud and the surface triangulated from it to the same plot. The button is available with only a mesh in the scene, and the Apply button names what it will cut ("Apply crop to 1 scan + 2 meshes").

With a mesh checked, Draw box in viewport lands each corner on the mesh surface under the cursor, the same way it lands on a scan's points.

Everything about the region works as it does for a cloud: Box, Rect and Polygon; Keep Inside, Keep Outside and Segment (the original mesh keeps the in-region triangles and a new "… (segment)" mesh gets the rest); and Keep originals, which leaves the source mesh whole and hidden and puts the result in a new "… (cropped)" mesh. A new mesh keeps its source's position, rotation, scale, color mode and opacity. The checked meshes preview the cut live, exactly as Apply will make it. A mesh is cropped where it is drawn — its position, rotation and scale are taken into account.

Three things differ from a cloud:

  • A mesh is cut along triangle edges. Triangles are never split: each one stays on the side its center falls on. On a triangulated scan, whose triangles are a few millimeters across, the edge follows the region closely. On a mesh built from a few large triangles (a ground plane, a low-polygon import) the edge is visibly stepped, and a triangle can reach past the region. Keeping triangles whole is what lets a cropped mesh keep everything recorded per triangle — its source scan, voxel cell, and the edge lengths behind the triangle filter — so leaf-angle plots and a leaf-area-density run that reuses the mesh still work on it.
  • A mesh crop can be undone. ⌘/Ctrl+Z restores every mesh cut by that Apply, in one step, whichever mode was used. (A destructive cloud crop cannot be undone; if scans and meshes were cropped together, undo brings back the meshes only.)
  • A crop never empties a mesh. If the region would remove every triangle, the mesh is left as it was and a message says so — delete it from the Meshes pane if that is what you wanted.

Some meshes are listed but can't be checked; hovering the row says why:

Mesh Why it can't be cropped
Voxel grid It is a box of cells, not a surface — resize it with its transform
Generated plant It is rebuilt from its parameters (age, morph), which would undo the crop
DEM (DTM / DSM / CHM) It keeps an elevation raster behind the surface — crop the point cloud and regenerate the DEM
Fitted crown Its metrics describe the whole shape

A cropped mesh that came from a triangulation keeps its Filter controls: the cut is made in the full candidate set, so loosening Lmax or the aspect limit afterwards cannot bring cropped-away triangles back.

Keep original cloud

By default a crop replaces the scan: the points outside the kept set are discarded, and because the cropped points become the new ground truth the apply also clears that scan's undo history — ⌘/Ctrl+Z will not bring them back.

Tick Keep original cloud to crop non-destructively. The source scan stays in the scene untouched (just hidden, so the viewport looks the same as a normal crop) and the kept points are added as a new "… (cropped)" cloud, which takes its own color from the scan palette. Click the eye icon next to the original to show it again.

Because nothing is destroyed, a retained crop is undoable — one ⌘/Ctrl+Z removes the new cloud and leaves the original exactly as it was. The new cloud also inherits the scanner origin, so origin-dependent analyses (Backfill Misses, Helios triangulation, Leaf Area Density) still work on it.

The option is unavailable in Segment mode, which already keeps every point across its two output clouds.

Which to use

Use Keep original cloud when you're isolating a region for analysis and may want to go back to the full scan — cropping one tree out of a plot, say. Use a plain crop when you're cleaning a scan down to what you actually want to keep and the discarded points are just noise.

How edits are applied (the in-memory model)

When you import a point cloud, Phytograph reads the file once and holds the points in memory as the working copy — the source of truth for every edit. Crop, erase, filter, and segment all operate on that in-memory copy; the file is never re-read. Crops, filters and erases take effect instantly as a visibility mask, and the displayed octree is rebuilt from the in-memory points in the background. Either way nothing touches the original file on disk — your edits live in the session until you Export.

Export edited clouds you want to keep

Because edits live in the session and never touch the source file, an edited cloud cannot be rebuilt from that file. Phytograph caches the displayed octree on disk, but that cache can be cleared (by the OS, by an app update, or when the backend restarts). If it goes missing for a cloud you have edited, Phytograph tells you the cloud is unavailable rather than silently rebuilding it from the original file — which would restore points you deleted and undo transforms you applied. Export any edited cloud you need to keep.

Erase

Use Erase Brush (eraser icon) for irregular regions a box can't capture — stray points, noise behind the plant, isolated outliers.

The brush is a square stamp that cuts straight through the cloud along your view direction — like the rectangle/polygon crop, but a pre-shaped square you paint freely. It shows a live preview of what it removes; nothing is deleted until you apply.

  1. Click Erase Brush to open the tool. The panel lists every point cloud in the scene under Clouds; the ones you had selected in the Scans pane start checked, and if nothing was selected nothing is checked — tick the clouds to erase (the button works without a selection). The view stays interactive — orbit/pan/zoom to frame the angle you want to erase from.
  2. Click Start Erasing in the panel (or press E) to turn erase mode on. This freezes the viewport so every stamp shares the same view, and a square brush follows your cursor (orange → red).
  3. Click on the cloud to stamp a square, or click-drag to paint a strip of squares. The points behind each square disappear in the live preview — and because the square extrudes through the whole cloud, it removes points at every depth behind it, not just the near surface.
  4. Press E (or the button) again to turn erase mode off without closing the tool — the view unfreezes so you can reorient, then turn erase back on and keep stamping. Painted strokes are kept across toggles.
  5. Click Apply Erase to delete the painted points, or Clear Strokes to discard the preview. The point count drops immediately — the erase is applied as an instant visibility mask, with no waiting.

Adjust brush size (in screen pixels) with the slider; because the brush is screen-space, its size stays constant on screen regardless of the cloud's distance.

Several clouds at once. Because each square cuts straight through the scene, one stroke erases from every checked cloud behind it — handy for clearing a region where overlapping scans of the same plot all carry the same noise. Unchecked clouds are never touched, even where they sit right behind the brush, and clicking rows in the Scans pane while the tool is open changes nothing. (A cloud held entirely in memory rather than streamed — rare, e.g. some stitched results — uses a different, per-point brush and can only be erased on its own; checking it unchecks the others. Its row is marked alone.)

Erase composes: each apply removes the painted union from the current point set, so you can apply, reorient, and stamp again to clear points hidden behind a surface. Because deletes are masked (not yet written to a new octree), they're cheap and reversible:

  • Undo last deletion restores the most recent erase (on each checked cloud that has one).
  • Permanently apply deletions bakes the survivors of every checked cloud into a fresh octree, one cloud after another — the one slower step, and the point at which the deletions become permanent (no longer undoable). While it runs the button reads Applying deletions… and a progress pill appears at the top of the viewer; canceling it leaves your pending deletions exactly as they were. You only need this to free the deleted points' memory; until then the masked result is already what every other operation (triangulate, skeleton, segment, export) sees. Skip it on a scan you will estimate leaf area density from: LAD uses the deleted points outside its voxel grid to keep a crop from biasing the result, and applying deletions removes them (re-running Backfill Misses afterwards recovers them).

How erase works

Erase is instant because it sets a per-point visibility mask on the in-memory cloud rather than rebuilding anything — the deleted points vanish on the GPU the moment you apply. While erase mode is on, the view is projected orthographically so the square extrudes as a straight prism and the cleared region matches the brush outline exactly rather than flaring into a perspective trapezoid. Since the test is in screen space the stamp is depth-independent: it removes every point behind the square, not just the near surface — reorient and paint again to clear points it was shielding. Permanently apply deletions is what actually rebuilds the octree from the survivors.

Filter

Use Filter Points (filter icon) to keep only points whose values fall within a range — useful when the file carries intensity, classification, or custom scalars. This works for large, octree-backed clouds too: their imported scalar attributes (the same ones offered in the Color by picker) appear in the filter field list alongside X, Y, and Z.

The panel opens with a Scans list of every point cloud in the scene. The scans you had selected in the Scans pane start checked; if nothing was selected, nothing is checked — tick the scans to filter (the button works without a selection). Once the panel is open only the checkboxes decide what gets filtered: clicking rows in the Scans pane changes nothing.

To set a filter:

  1. Pick a field from the dropdown (X, Y, Z, intensity, or any scalar).
  2. Set the criterion:
    • Continuous fields (intensity, height, deviation, …) show min and max inputs — points in the inclusive range are "in range". The range takes effect immediately.
    • Integer fields (target index, target count, row/column index) are counters, so their range reads as whole numbers and the inputs step by 1.
    • Class fields — ground_class (from Segment ground) and tree_instance (from Segment trees) — are categorical, so instead of a range you get a checkbox per class (Ground, Non-ground, or Tree 1…N). Tick the classes to keep; the checkbox next to the Keep classes heading ticks or clears the whole set at once. This is the natural way to isolate, say, just the non-ground points after a ground classification.
  3. Repeat for other fields to stack filters — they compose with AND, so only points passing every active filter are "in range".

A field only counts as filtered once it actually excludes something. Leave a field at its full range — or tick every class — and it stays out of the Active Filters list, loses its (active) marker in the dropdown, and contributes nothing to the commit. So if the commit buttons are showing, at least one field really will remove points.

Then choose how to commit (there is no separate Apply step):

  • Filter (remove points) — permanently deletes the out-of-range points, keeping only the in-range ones. This cannot be undone, and nothing in the panel brings the points back — Reset Filter Criteria only clears the criteria you set up above. Use Segment instead if you might want the excluded points later.
  • Segment (split into two clouds) — keeps the in-range points on the original cloud and adds the out-of-range points as a second cloud (<name> (filtered out)), given its own color from the scan palette so the two halves are distinguishable in the viewport. Nothing is discarded; the two clouds together equal the original. Handy for separating, say, a canopy from the rest by height without losing the rest.

If a filter excludes every point, you're offered the chance to delete the cloud instead.

Filtering several scans at once

Check more than one scan and both commits act on all of them. The panel says how many scans it will filter, and the field list narrows to the fields every checked scan has — so a criterion you set can never quietly apply to only some of them. The criteria you enter for the first checked scan are reused for the rest; a scan the criteria wouldn't change is skipped rather than needlessly rebuilt. The live preview draws on every checked scan the commit will filter, not just the first.

Live preview

The viewport previews the filter as you type, for small (in-memory) clouds and large octree-backed ones alike: points the criteria exclude are hidden immediately, with no backend round-trip and nothing altered on disk. Widen the range and they come straight back. Nothing is removed until you press one of the commit buttons.

On a large cloud the preview covers the points currently loaded at the displayed level of detail, so treat it as a preview of the shape of the result. That's why the panel reports a percentage kept rather than a point count — the proportion holds up at any level of detail, whereas an exact count only comes from the commit itself.

Committing on a large cloud

Committing applies the filter to the in-memory points (the file is not re-read) and returns as soon as the points are removed; the excluded points stay hidden by the same mask that drew the preview while the displayed octree is rebuilt from the survivors in the background. On a large plot a progress pill appears at the top of the viewport while the commit runs and the commit button reads Filtering… — there's no need to click it again. Cancel on the pill stops the work for real and leaves the cloud untouched, so you can adjust the selection and retry. A second filter composes on the first result, never re-admitting points an earlier filter removed.

The class list reflects what's left

After a filter, re-opening the panel shows only the classes the cloud still contains — filter to Tree 3 and Tree 3 is the only class listed. So an unchanged list is a genuine signal that nothing was removed.

Remove noise (stray points)

Scans pick up returns that aren't surface: dust, rain, insects, a bird through the beam, or a pulse that clipped an edge and landed in mid-air. The Noise section at the top of the Filter panel finds them.

It works in two steps, and the first one deletes nothing:

  1. Click Detect noise. The cloud is classified into noise_class (Clean / Noise), recolored so the flagged points stand out in red, and the panel reports how many were flagged and what share of the cloud that is.
  2. Look at the red points. If they're where you expect stray points to be, commit with the panel's usual buttons: Filter (remove points) to delete them, or Segment (split into two clouds) to move them into a <name> (filtered out) cloud you can inspect and delete later.

Detect only writes a label, so re-running it with different settings simply overwrites the previous result — there's nothing to undo.

Detecting noise on several scans at once

Like the commit buttons, Detect noise acts on every checked scan — the button says how many, and each scan gets its own noise_class column. In Auto mode the parameters are derived from each scan's own point spacing, so scans of differing density are each judged on their own terms. The scans are done one after another, with the current one named beneath the Cancel button; canceling stops the whole run and keeps the results of the scans already finished. The result box reports the first selected scan's numbers (it is the scan whose criteria the panel edits) while the notification carries the total across the selection — click a single scan to see its own figures. If one scan fails the rest still run, and the failure names the scan.

Choosing a method

Method What it flags Use it when
Isolated points (default) Points with fewer than N other returns within r meters Almost always. It asks a local, physical question, so it's safe on fine twigs and gives the same answer however often you run it.
Sparse voxels Points in a grid cell holding too few returns The cloud is too large for the other two to be quick. It's coarser — it can clip the last point of a thin branch.
Statistical (SOR) Points whose mean distance to their k nearest neighbors is unusually large You need to catch a tight clump of stray points that the other methods leave alone, because the clump's members support each other.

Statistical (SOR) gets more aggressive each time you run it

SOR's threshold is computed from the whole cloud, so it's set by whatever the most extreme points in it happen to be. While obvious flyers are present they hold the threshold high and fine structure is safe; once you've removed them, the threshold collapses onto the next most unusual points — which on a plant is the twigs and leaf tips.

Measured on our test tree: a first SOR pass took only the 25 stray points, but a second pass over the cleaned cloud took 264 of its 360 twig points and reported it as noise removed. This is why the default is Isolated points and why SOR is marked advanced. If you use it, run it once, and check the red points before removing them.

Parameters

Leave Auto parameters ticked and the settings are derived from the cloud's own point spacing; after a detection run the boxes show what it chose, so you can see whether the number is sensible for your scan. Untick it to set them yourself — for Isolated points, the radius is a real distance you can compare against your scan resolution ("my twigs have returns every centimeter, so 5 cm is generous").

Auto parameters cost a pass over the cloud

Deriving the settings means measuring the cloud's point spacing, which is the same neighbor search Isolated points and Statistical (SOR) do anyway — so for those two it's effectively free. For Sparse voxels it isn't: that method is the fast one precisely because it does no neighbor search, and auto-sizing its grid puts one back. On a very large cloud — the case you reached for Sparse voxels to handle — untick Auto parameters and type a cell size, and the run skips the measurement entirely.

If a run flags more than 20% of the cloud the result box turns red and Filter (remove points) asks for confirmation first, since real scanner noise is typically 0.1–3%. That threshold is a backstop, not a guarantee — a bad radius can lose fine structure while staying under it, which is what the red preview is for.

What it doesn't do

  • Sky/miss points (from a structured scan) are never flagged and never removed — they're rays that hit nothing, and Leaf Area Density needs them.
  • Mixed/edge returns — the faint veil hanging off every leaf edge, where the beam straddled a boundary — aren't isolated, so no density method catches them. If your scanner records a deviation or reflectance column, filter on that field instead (it's in the field dropdown above): those attributes measure the return's quality directly. Note a deviation cut preferentially removes small-object returns, which helps for branch modeling but hurts leaf-area work.
  • Registration error — doubled surfaces from a bad alignment aren't noise. Fix the registration.

Denoise before you merge, not after

Point density varies between scan positions, and every method here reads density. Running it per scan before stitching gives a cleaner answer than running it once on the merged result.

Resample

Use Resample Point Cloud (scatter icon) when a cloud is too dense to work with comfortably, or when you want a sparser version for export. It works on every point cloud, streamed or not.

  1. Click Resample Point Cloud. The panel lists every point cloud under Clouds; the ones you had selected in the Scans pane start checked, and if nothing was selected nothing is checked — tick the clouds to thin.
  2. Pick a Method:
    • Random keeps a random fraction of the points — type a Keep fraction between 0.001 and 1.0, or use the presets (50%, 25%, 10%, 5%, 1%). The density pattern is unchanged: near the scanner stays denser than far away.
    • Even spacing keeps one point per cube of the Point spacing you give (in meters) — the measured point nearest each cube's center, never an average, so every kept point carries its original attributes. This evens out density, thinning the crowded areas near the scanner far more than the sparse ones.
  3. The panel shows the result before you commit — 60,000 → 15,000 points, summed over the checked clouds.
  4. Click Resample N clouds (permanent). Each cloud is thinned in turn and its display rebuilt, with a progress indicator you can cancel.

Sky/miss points (the returns that hit nothing) are never dropped, so Leaf Area Density on a resampled scan still has its full transmission record. Like a filter or crop, a resample is a permanent edit to the working copy — it is not on the undo stack. Your source file on disk is never modified.

Even spacing doesn't remove noise

It keeps one point per occupied cube, so an isolated stray point survives at full weight while dense structure is thinned. To remove noise, use Remove noise above.

A typical cleaning order

  1. Transform — translate and rotate the cloud level and centered.
  2. Crop — remove the ground and far-field noise with a single box.
  3. Remove noise — take out the stray points a box can't isolate. Do this per scan, before registering or stitching.
  4. Filter — drop low-intensity returns if intensity is reliable.
  5. Erase — clean up stragglers a box couldn't reach.
  6. Resample — only if needed for performance.

Save (Export → .ply) at each milestone if you want backup checkpoints.