Source code of 3D Registration with Maximal Cliques.
In this paper, we present a 3D registration method with maximal cliques (MAC). The key insight is to loosen the previous maximum clique constraint, and mine more local consensus information in a graph for accurate pose hypotheses generation: 1) A compatibility graph is constructed to render the affinity relationship between initial correspondences. 2) We search for maximal cliques in the graph, each of which represents a consensus set. We perform node-guided clique selection then, where each node corresponds to the maximal clique with the greatest graph weight. 3) Transformation hypotheses are computed for the selected cliques by the SVD algorithm and the best hypothesis is used to perform registration. Extensive experiments on U3M, 3DMatch, 3DLoMatch and KITTI demonstrate that MAC effectively increases registration accuracy, outperforms various state-of-the-art methods and boosts the performance of deep-learned methods. MAC combined with deep-learned methods achieves stateof-the-art registration recall of 95.7% / 78.9% on 3DMatch / 3DLoMatch.
The repository contains a set of subfolders:
Linux
- source code for Linux platform.Windows
- source code for Windows platform.Python_implement
- python implementation of basic MAC.demo
- test point clouds.
MAC depends on PCL (>= 1.10.1
, version 1.10.1
is recommended) and igraph(=0.9.9
). Please install these libraries first.
To build MAC, you need CMake (>= 3.23
) and, of course, a compiler that supports >= C++11
. The code in this repository has been tested on Windows (MSVC =2022
x64
), and Linux (GCC =10.4.0
). Machines nowadays typically provide higher support, so you should be able to build MAC on almost all platforms.
Please refer to Compiling on Windows for details.
Please refer to Compiling on Linux for details.
We provide a simple demo in python, please refer to Python_implement for details.
--help
list all usages.--demo
run the demo.
--output_path
output path for saving results.--input_path
input data path.--dataset_name
[3dmatch/3dlomatch/KITTI/ETH/U3M] dataset name.--descriptor
[fpfh/fcgf/spinnet/predator] descriptor name.--start_index
(begin from 0) run from given index.
--no_logs
forbid generation of log files.
All tested datasets can be found at this link
Benchmark | RR(%) | RE(°) | TE(cm) |
---|---|---|---|
3DMatch+FPFH+MAC | 84.10 | 1.96 | 6.18 |
3DMatch+FCGF+MAC | 93.72 | 1.89 | 6.03 |
3DLoMatch+FPFH+MAC | 40.88 | 3.66 | 9.45 |
3DLoMatch+FCGF+MAC | 59.85 | 3.50 | 9.75 |
Benchmark | RR(%) | RE(°) | TE(cm) |
---|---|---|---|
FPFH+MAC | 99.46 | 0.40 | 8.46 |
FCGF+MAC | 97.84 | 0.34 | 19.34 |
If you find this code useful for your work or use it in your project, please consider citing:
@inproceedings{zhang20233d,
title={3D Registration with Maximal Cliques},
author={Zhang, Xiyu and Yang, Jiaqi and Zhang, Shikun and Zhang, Yanning},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={17745--17754},
year={2023}
}