<a id="e3d-sensor-fusion"></a>

# 3D Sensor Fusion

3D sensor fusion is a technique to merge the output of different 3D sensors together. In this case, these are different views of the same object.

Use the class [`EPointCloudMerger`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EPointCloudMerger.html) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EPointCloudMerger.html) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EPointCloudMerger.html):

1. Choose how many sensors to use and position them.
2. Acquire scans of the calibration cube (that must be 3D printed).
3. Use the method [`EPointCloudMerger::Calibrate`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#abdd4006ec23091f0dca9e9f5071d6960) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a83158d3740fae583e46ae4fbe7403ee8) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a4c8e05a52875151e771cc2a960b904e7) to perform the calibration.
4. For each new object:
   1. Acquire the scans of the object.
   2. Use the method [`EPointCloudMerger::Merge`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a6739ce7f766e40a5854c4c79f2b8e5a8) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a2174bb528525e571cbf727ccf893967f) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a9952f6669acc7e0d58951f7939b20112) to merge the scans together.

#### HINT
You can perform all these steps interactively in the C++ and C# `Easy3DMatchPointCloudMerger` samples.

![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_1.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_2a.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_2b.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_3a.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_3b.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_4a.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_4b.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_5a.webp)![image](assets/images/easy3d/easy3dmatch/epointcloudmerger_5b.webp)

<a id="e3d-fusion-cad-model"></a>

## 3D CAD Model

* The calibration cube model is available in the STL file format.
* Download this file from the **eVision** download area in the `Additional Resources` section ([www.euresys.com/Support](https://www.euresys.com/en/Support/Download-area?Series=f97da39d-3c25-404c-aee7-73de1d1867fc)).

![image](assets/images/easy3d/download_files.webp)
* Once downloaded, we recommend using a specialized subcontractor to print the 3D calibration cube as 3D filament printing is not really suitable to produce the cube.

For reference, we worked with a company using Selective Laser Sintering and printing a 10$\times$10$\times$10 cm cube using PA12 material costed 220 €.

![image](assets/images/easy3d/calibration_cube.webp)

<a id="e3d-fusion-dedup"></a>

## Removing duplicate points

A physical point seen by two sensors should not be present two times in the output cloud.

* By default, these points are removed. As this takes most of the processing time, you can disable the process if speed is an issue.
* Set the cloud resolution with the parameter [`EPointCloudMerger::SetMergedCloudResolution`](../../../doxygen_cpp/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a925e3e3c9680d47434ac93e36e2d3662) [<sub>.NET</sub>](../../../doxygen_cs/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#ab53a1586352140885a662086c17e7c93) [<sub>Python</sub>](../../../doxygen_python/classeVision_1_1Easy3D_1_1EPointCloudMerger.html#a82859da1de9751cdfc58cc14b408a2db) to control this process. The parameter value is computed automatically but you can increase it to reduce the size of the output cloud and speed-up the processing.

#### SEE ALSO
Code snippets:

* [Merge point clouds](../../../resources/code_snippets/3d_processing/easy3dmatch/e3dpointcloudmerger.html.md)
