# TCF
**Repository Path**: wasku/TCF
## Basic Information
- **Project Name**: TCF
- **Description**: 一个好用的ransac
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-10-23
- **Last Updated**: 2024-10-23
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
TCF (Two-stage Consensus Filtering)
TCF is a 3D correspondence-based point cloud registration method. It has been submitted to IEEE RAL. It elevates RANSAC to SOTA speed and accuracy. Firstly, one-point RANSAC obtains a consensus set based on length consistency. Subsequently, two-point RANSAC refines the set via angle consistency. Then, three-point RANSAC computes a coarse pose and removes outliers based on transformed correspondence’s distances. Drawing on optimizations from one-point and two-point RANSAC, three-point RANSAC requires only a few iterations. Eventually, an iterative reweighted least squares (IRLS) is applied to yield the optimal pose.

(a) Overall framework

(b) Outlier Removal
## Dependencies
- **CMake**
- **PCL** (Point Cloud Library)
- **Eigen ≥ 3.4** (for slicing matrix)
- **nlohmann_json** (for reading config files)
## File and data structure
### Configure files
```bash
config
│ ├── config_eth.json
│ └── config_kitti.json
```
### Data structure
```bash
data
├── ETH_TLS
│ └── facade
│ ├── s1_v0.1_sor.pcd
│ ├── s2_v0.1_sor.pcd
│ ├── s2_s1_top3.match
│ ├── s2-s1.pose
│ └── ...
├── KITTI
│ └── 09
│ ├── 210_v0.3.pcd
│ ├── 191_v0.3.pcd
│ ├── 210_191_top3.match
│ ├── 210-191.pose
│ └── ...
```
- **xx.json**: Contains paths for source point cloud, target point cloud, initial correspondences, and ground truth pose.
- **xx.pcd**: Source and target point cloud.
- **A_B_top3.match**: A correspondence file where A is source (left 3 columns) and B is target (right 3 columns).
- **xx.pose**: The 4*4 groundtruth pose from A to B
**Note:** Source and target point clouds are used to calculate resolution and estimate noise level, enabling **a genralized method without manual parameter adjustments**. If not available, values can be set manually, but correspondences remain necessary.
## How to use?
### Complie and run Demo
```bash
mkdir build && cd build
cmake ..
make -j8
./demo
```
### Run other data
To test with different data, simply update the data path in the config file.