This code provides a unified framework for evaluating the geometric matching confidence between an IFC model and a point cloud. It calculates confidence indices for each element, quantifying how well the BIM model is explained by the point cloud data.
- Icoverage
- Idistance
- Idistribution
I_confidence = I_coverage × I_distance × I_distribution
- Reads IFC and point cloud files (PLY format).
- Filters elements by IFC type.
- Computes and saves confidence metrics for each element.
- Outputs CSV reports, processed point clouds with scalar fields.
- Supports visualization options for debugging and analysis (normals, coverage, distributions, distances).
Install dependencies:
pip install -r requirements.txtpython main.py <input_model_ifc_path> <input_model_pcd_path> [--input_mesh_sampling_size <float>] [--input_pcd_voxel_sampling_size <float>]Arguments:
<input_model_ifc_path>: Path to the IFC file (e.g.,input/Sample.ifc)<input_model_pcd_path>: Path to the point cloud file (e.g.,input/Sample.ply)--input_mesh_sampling_size: (Optional) Mesh sampling size (default: 0.02)--input_pcd_voxel_sampling_size: (Optional) Point cloud voxel sampling size (default: 0.01)
Results are saved in output/<pcd_filename>_bim_<mesh_sampling_size>_scan_<pcd_voxel_sampling_size>/:
- Processed element meshes and point clouds (
objects/subfolder) - Combined point cloud with scalar fields (
combined_pcd_with_scalars.ply) - Confidence report (
<pcd_filename>_confidence_report.csv) - Filtered mesh and point cloud files
- IFC file with confidence metrics (
*_with_confidence.ifc)
Edit the following parameters in main.py to customize analysis:
filtered_element_types: IFC element types to analyze (default:['IfcWall'])delta: Distance threshold for matching (default: 0.05)mesh_sampling_size,pcd_voxel_sampling_size: Sampling densities- Visualization flags:
DRAW_COURSE_MATCHING,DRAW_FINE_MATCHING,DRAW_ELEMENTS,DRAW_NORMALS,DRAW_COVERAGE,DRAW_DISTRIBUTIONS,DRAW_DISTANCES
filtered_element_types = ['IfcWall', 'IfcColumn']Set any DRAW_* flag to True in main.py to enable interactive Open3D visualizations for debugging or analysis (normals, coverage, distributions, distances, etc).
output/
<pcd_filename>_bim_<mesh_sampling_size>_scan_<pcd_voxel_sampling_size>/
combined_pcd_with_scalars.ply
<ifc_filename>_mesh.ply
<pcd_filename>_pcd.ply
<pcd_filename>_visible_mesh_pcd.ply
<pcd_filename>_confidence_report.csv
<ifc_filename>_with_confidence.ifc
objects/
<ElementType>_<ElementName>_mesh.ply
<ElementType>_<ElementName>_pcd.ply
<ElementType>_<ElementName>_visible_mesh_pcd.ply
Released under the Apache 2.0 License (see LICENSE.md).
The work and code were contributed by Ahmet Ersoz and Frédéric Bosché. We would also like to aknowledge initial work conducted by Shirin Malihi.
If you use this work, please cite:
@article{pcd_bim_matching_confidence,
title = {Evaluating confidence in geometric matching between 3D point clouds and BIM models by integrating coverage, distance, and distribution metrics},
journal = {Automation in Construction},
volume = {181},
pages = {106636},
year = {2026},
issn = {0926-5805},
doi = {https://doi.org/10.1016/j.autcon.2025.106636},
url = {https://www.sciencedirect.com/science/article/pii/S0926580525006764},
author = {Ahmet Bahaddin Ersoz and Frédéric Bosché},
}Made with contrib.rocks