You just finished a handheld LiDAR scan of a building interior. The SLAM algorithm spit out a point cloud file — maybe E57, maybe LAS — and now you're staring at it thinking, "What do I do with this?" The scan has noise, ghost points from reflective surfaces, and areas where multiple scan passes overlap. You need a floor plan for the architect, a 3D mesh for the client, and a volume calculation for the contractor. And you need it by Friday.
CloudCompare handles all of that. It's free, open-source, runs on Windows/macOS/Linux, and processes point clouds in the hundreds of millions without choking. This guide walks through the complete workflow: importing raw handheld scan data, cleaning it up, registering multiple scan positions, generating deliverables, and a few advanced tricks that save real time on the job.
Why CloudCompare for Handheld LiDAR Data
Most handheld LiDAR scanners — Livox Mid-360, Livox M360, SLAM-based scanners like the RS10, or DIY rigs using Raspberry Pi and a 3D LiDAR — output data in standard formats like E57, LAS, or PLY. That data needs cleaning before it's useful. CloudCompare reads all these formats natively, runs on standard hardware (a mid-range laptop with a discrete GPU is fine), and has a plugin ecosystem covering everything from ground segmentation to automatic classification.
A few things that matter specifically for handheld LiDAR:
- Octree-based rendering — CloudCompare uses a spatial partitioning structure that lets it load and navigate point clouds with 100M+ points without turning your RAM into a bottleneck. Handheld SLAM scans from devices outputting 200kHz+ can generate massive files after a long scan session.
- Multi-station merge — If you walked through a building in multiple passes, CloudCompare can align and merge those scans using ICP registration.
- Format flexibility — E57 preserves intensity and color, LAS stores geographic coordinates, PLY is lightweight and universal. CloudCompare handles the conversion between them.
Download it from cloudcompare.org. The installer includes all core functionality; plugins install separately through the built-in plugin manager.
Importing Your Handheld Scan Data
Supported Formats
The format your scanner outputs depends on the software you used during capture:
| Format | Strengths | Best For |
|---|---|---|
| E57 | Stores intensity, color, and metadata; handles multiple scan positions | Survey-grade deliverables |
| LAS/LAZ | Industry standard for airborne and terrestrial LiDAR; compressed LAZ saves ~50% disk | GIS workflows |
| PLY | Simple, universal; no metadata overhead | Quick visualization |
| PTX | Leica-specific but widely compatible | Leica scanner interop |
For most handheld SLAM workflows, E57 is the go-to — it preserves scan metadata and handles the dense point clouds these systems produce.
Step-by-Step Import
- File → Open (or drag and drop the file into the viewer)
- CloudCompare auto-detects the format and loads the point cloud
- Check the DB Tree panel (left side) — your cloud appears there with a point count
For large files (500MB+), CloudCompare may take 30–60 seconds to build the octree on first load. This only happens once per session. If your system is struggling:
- Subsample during import: File → Open → check "Subsample" and set a max point count (e.g., 5M points for a quick overview, then load full resolution when needed)
- Use 64-bit CloudCompare: The 32-bit build caps at ~2GB RAM usage
Handling Multiple Scan Positions
Handheld scanners sometimes save multiple scan "stations" in a single E57 file. CloudCompare loads each as a separate entity in the DB Tree. If your SLAM software already aligned everything into one global coordinate frame (which is typical for FAST-LIO2, R3LIVE, or Point-LIO), these stations should already overlap correctly. If not, you'll align them manually in a later step.
Cleaning Up the Point Cloud
This is where most of your time goes. Raw handheld scan data almost always needs three things: noise removal, ghost point elimination, and unwanted-area clipping.
Noise Filtering
Two filters matter here, and they solve different problems:
Statistical Outlier Removal (SOR) removes isolated points that don't have enough neighbors within a given radius. It's the first filter to run on any raw scan.
- Edit → Scalars → Noise filter (or search "SOR" in the toolbar)
- Set the number of neighbors (typically 6–8) and the standard deviation multiplier (typically 1.0–2.0)
- Preview the result before applying — the filtered points highlight in red
Run SOR once. If ghost points remain, run it again with tighter parameters (fewer neighbors, lower multiplier).
Radius Outlier Removal removes points that have fewer than X neighbors within a fixed distance. It's useful when SOR leaves behind small clusters of noise (common near reflective glass or metal surfaces).
- Edit → Clean → Radius
- Set the radius (adjust based on your point density — for a 360° LiDAR at 0.18° angular resolution, 2–5cm works well) and the minimum neighbor count (typically 2–3)
Clipping Unwanted Regions
You almost never want the entire point cloud. You need to crop out:
- The ceiling (unless you're documenting overhead MEP)
- The floor (if you only need walls)
- Areas outside the scan area (handheld scans pick up things through windows)
Manual clipping box: Edit → Segment → Clip Box. Draw a box around the area you want to keep. The Clipping Box tool lets you adjust each face independently with the visible constraint handles.
Interactive segment: Edit → Segment → Segment (manual). Draw a polygon on the screen to select points. This is slower but more precise for irregular boundaries.
Ground Segmentation (CSF Filter)
The Cloth Simulation Filter (CSF) separates ground points from non-ground points by simulating a cloth draped over the point cloud. It works well for outdoor scans and large interior spaces.
- Install the CSF plugin (Plugins → Browse plugins → search "CSF")
- Edit → Segment → CSF Filter
- Adjust the cloth resolution and threshold — default parameters work for most handheld scans
CSF creates two output clouds: ground points and non-ground points. Export them separately if you need both.
Ghost Point Removal
Handheld LiDAR near glass windows, polished floors, or mirrors produces "ghost" points — reflections that appear behind the reflective surface. These show up as thin duplicate surfaces slightly offset from the real surface.
There's no automatic fix for this. The manual approach:
- Use the "pick point" tool to identify ghost surfaces
- Use Segment → Manual to select and delete the ghost layer
- For large reflective areas, consider applying a clip box that excludes the ghost region, then manually patching with points from adjacent scans
Registering Multiple Scan Positions
If your SLAM software didn't merge everything into one coordinate frame, or if you ran multiple independent scan passes, CloudCompare's registration tools align them.
Rough Alignment
Start by roughly positioning the clouds so they overlap visually. Use:
- Edit → Align → Align (Bounding Box Centers) — for clouds that are already close
- Edit → Align → Align (Manual) — pick 4+ corresponding point pairs between the two clouds
Fine Registration (ICP)
Iterative Closest Point (ICP) refines the alignment by minimizing the distance between overlapping points.
- Select both clouds in the DB Tree (Ctrl+click)
- Edit → Align → Register (ICP)
- Set the parameters:
- Overlap percentage: 20–50% (how much the two scans overlap)
- Number of iterations: 10,000+ (more iterations = finer result)
- Random sampling limit: 50,000 points per iteration (balances speed and accuracy)
- Click Register
ICP works best when the clouds are already close. If the initial alignment is poor, ICP can get stuck in a local minimum and produce a bad result. Always rough-align first.
Checking Registration Quality
After ICP, check the overlap:
- Select both registered clouds
- Edit → Clouds → Compute Cloud/Cloud Distances
- View the result: a color-mapped display where green = close match, red = poor alignment
- The distance statistics (mean, RMS, max) tell you how good the registration is. For handheld SLAM data, sub-centimeter RMS is achievable; anything under 2cm RMS is usable for most deliverables
Once satisfied, merge the clouds: Edit → Merge
Generating Deliverables
Floor Plans and 2D Projections
Architects and contractors often need a 2D floor plan. CloudCompare generates these by projecting the point cloud onto a horizontal plane:
- Select your cleaned cloud
- Edit → Segments → Rasterize
- Set the projection direction (Z-axis for a horizontal floor plan)
- Choose output: grid, image, or ASCII
- Export the rasterized result
For a cleaner floor plan, first crop the cloud to wall height only (e.g., 0.5m to 2.5m above floor level) using a Clip Box before rasterizing. This removes ceiling and floor clutter.
3D Mesh Generation
Converting a point cloud to a mesh is necessary for visualization in tools like Blender, Unity, or Unreal Engine, and for export to OBJ/FBX formats.
Poisson Reconstruction produces smooth, watertight meshes but can oversmooth sharp edges:
- Edit → Mesh → Poisson Reconstruction
- Set the octree depth (higher = more detail, but slower and more memory). Depth 9–11 is typical for handheld scans
- The output mesh appears in the DB Tree
Greedy Projection Triangulation preserves sharp edges better but requires clean, noise-free input:
- Compute normals first: Edit → Normals → Compute Normals
- Edit → Mesh → Greedy Projection Triangulation
For architectural scans with lots of sharp corners, Greedy Projection usually produces better results. For organic or curved surfaces (rock faces, terrain), Poisson works better.
Run mesh smoothing afterward (Edit → Mesh → Smooth) to remove triangle artifacts — but don't over-smooth or you'll lose detail.
Volume Calculations
For excavation, stockpile, or fill/dirt work:
- Load two clouds (before and after, or the cloud and a reference plane)
- Edit → Compute Cloud/Cloud Distances → or use Edit → Volume → 2.5D Volume Calculation
- Set the projection plane and grid step
- CloudCompare outputs cut/fill volumes and a color-coded height difference map
Measurement Tools
CloudCompare has built-in tools for measuring distances, areas, and cross-sections directly on the point cloud:
- Point-to-point distance: Edit → Measure → Point-to-Point
- Point-to-cloud distance: Select a point and a cloud, then Edit → Measure → Distance to Cloud
- Section/Profile extraction: Edit → Segment → Profile — draw a line across the cloud, and CloudCompare extracts a cross-section profile you can export as a polyline
Exporting
Choose the right export format for your downstream workflow:
| Deliverable | Best Export Format |
|---|---|
| Architectural floor plan | DXF, SVG, or rasterized PNG |
| 3D visualization | OBJ or FBX (with textures) |
| GIS / Surveying | E57 or LAS (preserves coordinates) |
| Web sharing | 3D Tiles or Potree format (via plugins) |
| General-purpose | PLY (binary, uncompressed) |
Advanced Techniques Worth Knowing
Color and Scalar Field Visualization
Raw handheld LiDAR data typically includes an intensity channel (how much laser energy reflected back). CloudCompare can visualize this, or you can apply color by:
- Height/elevation: Display → Set Unique → Scalar Field → select "Coord. Z" — colors points by height (blue = low, red = high)
- Intensity: If your scan includes intensity data, it shows up as a scalar field
- Deviation from reference: After computing Cloud/Cloud Distances, the deviation values create a natural heat map
These visualizations help you spot issues (alignment errors, noise, missing areas) that are hard to see in the default white-point display.
Automatic Point Cloud Classification
The 3DMASC plugin (3D Machine Learning for Automatic Semantic Classification) classifies points into categories: ground, vegetation, buildings, vehicles, etc.
- Install 3DMASC via Plugins → Browse plugins
- You'll need training data — the plugin includes sample datasets
- Select your cloud, run the classifier, and it labels each point
This is useful for outdoor scans where you need to separate ground from vegetation from structures. For indoor handheld scans, the CSF filter for ground segmentation is usually sufficient.
Change Detection (Cloud vs. Cloud Comparison)
If you have two scans of the same area taken at different times (e.g., monitoring crack propagation in a structure, or tracking construction progress):
- Register both clouds (ICP)
- Select both → Edit → Compute Cloud/Cloud Distances
- The resulting scalar field colors each point by its distance to the nearest point in the other cloud
- Use the scalar field histogram to set thresholds — points beyond a threshold are flagged as "changed"
This is a fast way to generate deformation reports without third-party software.
Batch Processing with Python Plugin
CloudCompare has a Python plugin that lets you script repetitive tasks. If you're processing 50 scans from a survey project with the same cleaning pipeline (SOR filter → clip box → mesh generation → export), scripting it saves hours:
- Install the Python plugin (Plugins → Browse plugins → "Python")
- Open the Python console (Plugins → Python Console)
- Write a script that loads each file, applies your pipeline, and exports the result
The CloudCompare wiki has sample Python scripts for common workflows.
Quick Reference: CloudCompare Workflow for Handheld LiDAR
| Step | Tool/Menu | What It Does |
|---|---|---|
| Import | File → Open | Load E57, LAS, PLY, or other formats |
| Noise removal | Edit → Scalars → Noise filter (SOR) | Remove isolated outliers |
| Ghost cleanup | Edit → Segment → Manual | Delete ghost points from reflections |
| Area clipping | Edit → Segment → Clip Box | Keep only the region of interest |
| Ground separation | Plugins → CSF Filter | Split ground from non-ground |
| Registration | Edit → Align → Register (ICP) | Align multiple scan positions |
| Merge | Edit → Merge | Combine aligned clouds |
| Mesh generation | Edit → Mesh → Poisson / Greedy Projection | Convert points to triangles |
| Volume calculation | Edit → Volume → 2.5D Volume | Calculate cut/fill volumes |
| Measure | Edit → Measure → Point-to-Point / Distance | Distance, area, profiles |
| Export | File → Save | Output to target format |
What CloudCompare Doesn't Do
A few common tasks require other tools:
- BIM modeling from point clouds: CloudCompare exports meshes and floor plans, but generating a Revit/IFC model requires Revit with PointSense or Autodesk ReCap
- Automated Scan-to-BIM: For automated feature extraction (walls, doors, windows), tools like Cintoo or Autodesk Tandem are more specialized
- Web-based point cloud viewing: Use Potree for browser-based visualization of massive datasets
CloudCompare handles the point cloud processing. For the next step in your workflow — Scan-to-BIM conversion or accuracy assessment — you'll combine it with other tools in the chain.
Getting Started
Download CloudCompare from cloudcompare.org. The latest stable version (2.13.x as of mid-2026) includes GPU-accelerated rendering and improved plugin support. It runs on any modern laptop with 8GB+ RAM; 16GB is comfortable for files over 50M points.
Grab a sample handheld LiDAR scan (many are available on OpenTopography or the CloudCompare forum), load it up, and walk through the SOR → Clip → Mesh pipeline. The interface takes about an hour to feel comfortable. The workflow becomes muscle memory after two or three projects.
📖 Related Reading
-
Handheld LiDAR Scan-to-BIM: From Point Cloud to Revit Model
Step-by-step guide converting LiDAR scans into BIM models.
-
Point Cloud Accuracy with Handheld LiDAR: What to Expect
Understanding accuracy, precision, and error sources in handheld scanning.
-
AGV/AMR LiDAR Selection Guide (2026)
How to pick the right LiDAR sensor for your mobile robot.
-
Urban Renewal Survey: M360 LiDAR Measurement Practice
How M360 transforms old-city renovation with fast 3D scanning.
Need a Handheld LiDAR Scanner?
Check the M360 3D LiDAR — 5cm blind zone, 70°×360° FOV, IP67, ideal for handheld SLAM scanning.
View M360 Specs → Contact Us →🛒 M360 3D LiDAR: 5cm blind zone | 70°×360° FOV | IP67 | <4.5W | Dual echo optional
View full parameter comparison →
© 2026 SmartBotParts. All rights reserved.
CloudCompare is free, open-source software available at cloudcompare.org. Version references in this article are based on CloudCompare 2.13.x. Feature availability may vary with newer versions. Always verify plugin compatibility with your specific CloudCompare build.