How to Clean Up Classification Errors in Point Clouds

Evie L
Evie L
  • Updated

Introduction

If you already have a classified point cloud dataset but want to ensure there are no errors in the classification, how would you find outliers in FME? This article shows you several methods for achieving clean point cloud classifications. See Re-classifying a Point Cloud in FME to learn how to classify a point cloud.

You can create the workspace yourself or follow along with the completed workspace, which you can download from the Files section of this article.

Files

Step-by-step Instructions

image.png

The image above previews what this method looks like and which transformers it uses. First, make sure you have a point cloud dataset that already has a classification for you to analyze. If you do not have one of your own, you may find the dataset used in this article in the Files section.

This is the recommended method for a point cloud of any size. If you have a smaller dataset or tiled point cloud, see Other Methods for Smaller Datasets for additional methods.

1. Open FME Workbench

Open FME Workbench and click New to create a new workspace.

2. Add the Point Cloud Data

Add a LAS Reader and browse to the dataset or drag and drop the LAS dataset onto the canvas. (D11.las)

3. Filter by Classification Component

Add a PointCloudFilter to the canvas and set the expression to: @Component(classification)==6, and name the output port building

image.png

4. Convert Point Cloud to Raster

Add a NumericRasterizer to the canvas and connect this to the building output port of the PointCloudFilter. In the parameters, set the Resolution Specification to Cell Spacing and X and Y Cell Spacing to 1. Leave the remaining parameters at their default values. 

image.png

5. Evaluate the Raster

Add a RasterExpressionEvaluator transformer to the canvas and connect it to the NumericRasterizer. In the parameters, set the Mode to One Raster and set the Band Expression to: if(A[0]==0,0,100) and the Interpretation to UInt32.

image.png

6. Add a RasterConvolver

Add a RasterConvolver to the canvas and connect this to the output port of the RasterExpressionEvaluator. In the parameters, set the Convolution Filter to User Defined. If you are using your own data, you can customize this to suit your needs. For our example, we will be using these weights and parameters:

  • Size: 3 x 3 
  • Divisor: Sum of Kernel Weights
  • Operation: Sum
  • Weights:
1
1 10 1
1 1 1

image.png

7. Evaluate the Raster (Again)

Add another RasterExpressionEvaluator transformer to the canvas and connect it to the RasterConvolver Output port.  In the parameters, set the Mode to One Raster and set the Band Expression to: if(A[0]<=45,1,0) and the Interpretation to UInt32.

image.png

8. Set Point Cloud Component

Add a PointCloudOnRasterComponentSetter transformer to the canvas. Connect the Output port from the RasterExpressionEvaluator_2 to the Raster input port and connect the PointCloud input port to the building output port from the PointCloudFilter in step 3. 

image.png

In the parameters, set the Components to Set to Custom and Interpolation Type to Bicubic. See the table below for configuration. Leave all other parameters at their default values.

Band         Component   Default Value
0 outlier 0
1    

image.png

9. Filter by Outlier Component

Place a second PointCloudFilter transformer on the canvas and connect it to the PointCloudOnRasterComponentSetter output port. Input this expression: @Component(outlier)==1 and name the output port outlier. The cleaned classified point cloud will exit the <Unfiltered> output port.

image.png

Other Methods for Small Datasets

These are less recommended but are valid options if the first option is not sufficient for your scenario. Before attempting these next methods, consider breaking your data into smaller pieces with transformers such as a Tiler or Sampler.

Method 1: Point Cloud to Points Method

image.png

This method takes your point cloud classification as input and uses these transformers:

The limitation is that, as of the 2022 version of FME, NeighborFinder does not operate in Bulk Mode. It takes each point and compares it to every other point, which can take a lot of computing power depending on the amount of data in your point cloud classification.

Method 2: Vertical Outliers Method

image.png

Similar to the previous method, this uses the same transformers and adds a CoordinateSwapper transformer before and after. This method has the same limitations as the previous method but can also detect vertical outliers. 

A similar method for finding vertical outliers using the CoordinateSwapper transformer is described in this article: Removing Noise in Point Clouds.

Method 3: Point Cloud Clipper Method

image.png

This method takes your point cloud classification as input and uses these transformers:

The limitation of this method is with the Clipper. As of version 14 of the Clipper (FME 2022), clipping point clouds and rasters requires holding the entire feature in memory. This is often solved by using a Tiler transformer beforehand so each Candidate feature is more manageable.

Additional Resources

Data Attribution

The data used here originates from open data made available by the City of Coquitlam, British Columbia. It contains information licensed under the Open Government License - Coquitlam.

Was this article helpful?

We're sorry to hear that.

Please tell us why.

As of January 14th, 2026, comments on knowledge base articles have been closed. To make sure questions don’t get missed and to enable more community support, we’ve moved discussions to the FME Community. If you have a question or a comment about this article, please create a new post or create a support ticket.