> For the complete documentation index, see [llms.txt](https://docs.phoenixlidar.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.phoenixlidar.com/lidarmill-cloud/workflow/processing-tools/spatial-fuser-pipeline.md).

# Spatial Fuser Pipeline

LiDARMill’s Spatial Fuser Pipeline uses the trajectory data generated by NavLab, combined with LiDAR and imagery data from your system, to generate a calibrated, classified and colorized point cloud. Spatial Fuser can also produce data products in the form of DTM/DSM, Contours, decimated pointclouds and more.&#x20;

{% hint style="info" %}
It is possible to initiate a Spatial Fuser pipeline before the NavLab pipeline finishes processing. Select your "processing" trajectory when creating your pipeline, and LiDARMill will automatically start the Spatial Fuser pipeline when the NavLab pipeline is complete.&#x20;
{% endhint %}

## Video Tutorial

{% embed url="<https://youtu.be/bgIK0jfE5Tc?t=733>" %}

## Select Spatial Fuser Postprocessing

To begin processing your LiDAR data, create a Spatial Fuser Pipeline by navigating to the Pipelines tab. Click the **+** sign in the bottom right corner to add a pipeline. Under **Select Processing**, choose **Spatial Fuser**. LiDARMill indicates the types of input files required, and the type of output file that it will create. Click **Next** to move forward.&#x20;

<figure><img src="/files/N4FcsM53OEqP3SoMaBmM" alt=""><figcaption></figcaption></figure>

## Select Input Files/Artifacts

**Spatial Fuser** requires a trajectory and LiDAR data. It can also utilize Camera data, and ground control points if present. Once you've selected all the files you'd like to use in processing, click **Next**.

<figure><img src="/files/8oVQsppE3KqRhS5WkTGf" alt=""><figcaption></figcaption></figure>

## Configure Parameters&#x20;

### Pipeline settings

Specify the **Pipeline name** and configure the **Dataset type** (Aerial or Mobile) to optimize processing&#x20;

<figure><img src="/files/9zdzCzmBE60uCK5gCDnA" alt=""><figcaption></figcaption></figure>

### Calibration

Used to override the system calibration configured at the time of data acquisition, if needed. Not commonly used.&#x20;

![](/files/zM5VdhPpJaGNBw4YM1ia)

### LiDAR Settings

**Use full LiDAR density:** Settings from the PLP will be overridden for achieving full lidar density (ignoring the PLP's laser-beam selection, frustrums, echo-selection, reflectance-filter and range-filter defined in the LiDAR>Processing tab within SE). Disable this if you want to use settings that were previously defined in the uploaded PLP.

Configure the desired **Downward Field-of-View** in degrees (90 recommended for aerial acquisitions), as well as the desired **LiDAR Range** from sensor (Min/Max in meters), to be included in the generated pointcloud.&#x20;

![](/files/pD6ikC86ZLobgpYvQnSl)

### Flightlines

Configure flighlines containing lidar data which will be included in the generated pointcloud

![](/files/vsv6oBfU0uwuzL8o7cwq)

**Automatically split flightlines:** LiDARMill automatically splits your trajectory into multiple intervals each containing LiDAR data that was captured during straight flightlines of a minimum time duration that the user specifies.

**Manually split flightlines:** Enable this tool and then click the **Compute trajectory flightlines** button to specify which flightlines should be included in the generated pointcloud

![](/files/CXXL4Hax80DlE76jKjLm)

* Specify Autosplit trajectory criteria and then click "compute flightlines".&#x20;

{% hint style="info" %}
Note: You can reconfigure parameters and click "compute flightlines" to recompute autosplit intervals.&#x20;
{% endhint %}

* The red lines indicate the intervals that will be used to generate the pointcloud&#x20;

<figure><img src="/files/e0D7952r0jjWxu0nBjlY" alt=""><figcaption></figcaption></figure>

* Intervals can be deleted by clicking the **X** icon next to the interval
* Click **Save** at the bottom right to finalize selection

Intervals can also be created manually by using the **Create intervals** and **Delete intervals** tools:

<figure><img src="/files/1dRLvNC7UlJavWONqzdg" alt=""><figcaption></figcaption></figure>

To delete intervals, check the **Delete intervals** button, then click on the interval to delete. To create an interval, check the **Create intervals** button and click the interval start and end points along the trajectory.&#x20;

### Optimization

<figure><img src="/files/zsSU9Hhdp87es3ZgVdJL" alt=""><figcaption></figcaption></figure>

* **Trajectory optimization**: Performs strip alignment of the LiDAR data by optimizing the trajectory using [LiDARSnap](/spatialexplorer-8-and-9/user-interface/toolbars/workflow/lidarsnap-v4.md). LiDARSnap will optimize more or less intensively depending on the data set type (aerial or mobile). Aerial data sets are optimized only vertically. Mobile data sets are optimized horizontally and vertically.&#x20;
* **Use GCPs with LS4**: Uses GCPs during trajectory optimization to determine the necessary vertical adjustment.
* **Compare GCPs (check/control points) only against ground classified points**: When point cloud elevations are compared to GCPs, this feature ensures that GCPs residuals are calculated only against ground classified points. This is useful for preventing erroneous vertical shifts, typically caused by point cloud data being present above or below a GCP (high vegetation, reference stations, etc.).
* **Sensor Calibration**:  Boresight optimization tool. Applies an angular correction to LiDAR sensor (roll, pitch, yaw correction) to resolve misalignments from IMU to sensor. Depending on the LiDAR model, an additional mirror tilt angle offset or encoder calibration correction may be calculated and applied.&#x20;
  * In general, it is **NOT recommended to enable sensor calibration**, unless a [specific boresight calibration pattern](/data-acquisition-and-uav-piloting/boresighting-flight-strategy.md) was flown as part of the mission.&#x20;
* **Enable Photos in Turns**: Option to enable/disable photos acquired during turns

### Classification

<figure><img src="/files/ZTTT8LxTUadvSRNlcPTV" alt=""><figcaption></figcaption></figure>

**Classify Ground** classifies ground returns using a progressive TIN densification algorithm. Low points in a region are used to create TIN meshes that represent the ground surface. Additional points can be added to the ground class if they do not exceed either the **Iteration Angle** or **Iteration Distance**, measured in respect to the current ground mesh.

* **Iteration Angle**: For a point to be included in the ground class, the angle between it and the current ground mesh must be smaller than this specified angle.
* **Iteration Distance**: For a point to be included in the ground class, the distance between it and the current ground mesh must be smaller than this specified distance.
* **Max length of building**: Initial sampling stride for low points. This parameter is typically used for large building removal. Set this parameter greater than the size of your largest building, to ensure that roof points are not included in the initial ground mesh.
* **Ground Thickness:** Points within this distance from the final iteration ground surface mesh are classified as ground. To capture all ground returns, set this parameter to your dataset's hard surface precision. The default value of 1 cm works well for capturing points that represent the ground surface mesh.
* **Feature size:** Low point sampling stride. Decrease to search at a higher resolution to classify smaller ground features (climb up small berms or quick changes in elevation). Increase it if the ground classifier over classifies (boulders/vegetation).

**AI Classification (Beta)**: AI classification leverages a neural network to infer point classification. Classification accuracy depends on the type of terrain/geometry and cloud accuracy, but usually classifies around 98% of points correctly. Classifications currently include:

* Unclassified
* Ground
* High vegetation
* Building
* Low point (noise)
* Shield wire
* Transmission Wire
* Transmission Tower
* Wire Structure Connector (insulator)
* Car
* Guy wire
* Fence
* Lamp post

**Classify Moving Objects :** Checks whether points have neighbors from different intervals within a default search radius. This removes moving objects, such as pedestrians and moving vehicles, which will not appear in the same position in different intervals.&#x20;

**Classify Powerlines :** Classifies powerlines using a geometric algorithm (not AI).&#x20;

### LiDAR

It is recommended to use the default parameters populated here. If you acquired data in the incorrect rover profile, however, you could correct for that by editing the parameters here. **RiMTA version** can be changed if significant [MTA noise](/hardware-and-interfaces/lidars/real-time-point-clouds-and-mta-disambiguation.md) is noted with a Riegl system.

<figure><img src="/files/UBuZPgIkqz3BIsL3vvO4" alt=""><figcaption></figcaption></figure>

### Camera&#x20;

<figure><img src="/files/SeeiZLlUEjV2m1vAFAUt" alt=""><figcaption></figcaption></figure>

**Disable:** Camera data will not be used during processing when enabled. This speeds up processing but cloud will not be colorized.&#x20;

**Override Settings:** It is recommended to use the default parameters populated here. If you acquired data in the incorrect rover profile, however, you could correct for that by editing the parameters here.&#x20;

**Calibrate Camera:** Calibrate camera mounting rotation and intrinsics. For camera calibration to succeed, there must be at least 40% overlap between the imagery, and image content should contain mostly manmade features and little vegetation.&#x20;

**Per Exposure Pose Correction:** Optimizes each individual photo's orientation to minimize errors between all photos. Recommended to keep enabled.

### Coordinate Reference Systems

The processing CRS automatically defaults to the configured project CRS:

![](/files/7ODSof4uiMowu5y5xIdB)

### Products

Use this section to select and configure desired output data products:

<figure><img src="/files/nPTKubcVxWtbYMHBYbVW" alt=""><figcaption></figcaption></figure>

#### Tile the point cloud

When enabled, this tool will automatically tile the output dataset into squares with a user specified edge length (Tile size). This is beneficial for large datasets. You can view and download tiled data by clicking on "Select Tiles" next to the Spatial Fuser pipeline.

![Select Tiles Button](/files/-McFmwY2G8Z4Txo6iZlu)

![Tile Selection](/files/-McFn98eCKT515Xvcaku)

#### CloudClean

Fits a mathematical model of a surface to the original points of the point cloud, with the aim of representing the true surface as best as it can, by excluding ranging noise. Point clouds can be produced as follows:

![](/files/WmZnv7dcUBbeRzXrUBtW)

* **Keep original cloud:** Include all points in pointcloud output &#x20;
* **Create smart-decimated cloud:** Given point density, algorithm picks points that are nearest to the computed surface. It then keeps original points from the cloud, but discards the points furthest away from computed surface.

![](/files/hujYi4l3g2z75U3ri6za)

![Profile Cross Section: Original pointcloud (Red) Vs Decimated pointcloud(Green)](/files/DOwU2nUxl0YJ1dhmABgE)

* **Create smart-projected cloud:** Projects every original point to a computed surface. It keeps all the points from the cloud, but moves or 'projects' them to the computed surface.

![](/files/40Z4Sg0RNK6L6kRlw9NC)

![Profile Cross Section: Original pointcloud (Red) Vs Projected pointcloud (Blue)](/files/EaE46UVVYT9pvQqE8rpd)

#### Create compressed Pointclouds

When enabled, this option outputs the generated pointcloud to a compressed LAZ 1.4 file instead of an uncompressed LAS 1.4 file.&#x20;

#### GeoTiff DTM/DSM/CHM

Option to output various products such as Digital Terrain Model (ground classified points only), Digitial Surface Model (Highest hit returns), and Canopy Height Model (Vertical distance offsets from ground model to highest hit returns). The output Geotiff files are georeferenced to the configured LM project CRS.

![DSM](/files/-McFvRrcE3pkMkrbgGKK)

![DTM](/files/-McFvcscPJhxFZfMfNgr)

#### Contours

Export contours of the specified elevation step in SHP/SHX/DBF/PRJ format.&#x20;

![Contours Overlayed on DTM](/files/-McFwWkmhTu7MB3WITso)

#### Gridded Ground pointcloud

This option creates a downsampled pointcloud Digital Terrain Model (Based on ground classified points only, and based on the user specified grid stride).

#### Create Point Cloud Viewer

Creates a web viewer for the point cloud. This viewer URL is sharable and can be distributed to anyone for viewing the cloud. More on the [cloud viewer here](/lidarmill-cloud/workflow/cloud-viewer.md).&#x20;

#### TIN mesh (LandXML)

Creates a TIN surface in LandXML format. Surface is generated at the specified cell size.&#x20;

#### Create Pix4D .dat file

Exports an image metadata file for orthomosaic production. This file contains fields for: lattitude, longitude, elevation, and orientation. Orientation is specified in the omega, phi, kappa convention. This file can be used in Pix4D and Metashape.&#x20;

#### Export Trajectories as CSV

This option is primarily for users with a Mosaic mobile mapping camera, for use in Mosaic Processor software.&#x20;

Click **Finish** to initiate the pipeline.

Once created, view files and artifacts associated with the created pipeline under its **General** tab. When completed, the LAS/LAZ as well as the [Project](https://docs.phoenixlidar.com/reports/project-report) and [Processing](https://docs.phoenixlidar.com/reports/processing-report) Reports can be located here.  Under **Job Runs** check the progress of the Spatial Fuser pipeline.

{% tabs %}
{% tab title="General tab" %}

<figure><img src="/files/CmNHugWEQTt6Ezl0m680" alt=""><figcaption></figcaption></figure>
{% endtab %}

{% tab title="Job Runs tab" %}
![Check the pipeline's progress](/files/-M9JkMT6PgQcb96ukt5U)
{% endtab %}
{% endtabs %}

{% hint style="info" %}
LiDARMill processes your data in the cloud, so you can navigate to another screen within the application, visit another website, or close your browser, and post-processing will continue in the background. LiDARMill will automatically send you an email when processing is complete, if you selected that option when initiating the pipeline.
{% endhint %}
