https://github.com/meyerls/aruco-estimator
Automatic Scale Factor Estimation of 3D Reconstruction in COLMAP Utilizing Aruco Marker
https://github.com/meyerls/aruco-estimator
3d-reconstruction ambiguity-resolver aruco aruco-markers colmap computer-vision ground-control-point opencv python scale-ambiguity
Last synced: 3 months ago
JSON representation
Automatic Scale Factor Estimation of 3D Reconstruction in COLMAP Utilizing Aruco Marker
- Host: GitHub
- URL: https://github.com/meyerls/aruco-estimator
- Owner: meyerls
- License: mit
- Created: 2022-06-06T14:40:55.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-08-30T13:56:21.000Z (4 months ago)
- Last Synced: 2025-08-30T14:33:19.765Z (4 months ago)
- Topics: 3d-reconstruction, ambiguity-resolver, aruco, aruco-markers, colmap, computer-vision, ground-control-point, opencv, python, scale-ambiguity
- Language: Python
- Homepage:
- Size: 55.8 MB
- Stars: 51
- Watchers: 1
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Automatic Registration Estimation Based on ArUco Markers
## About
This project automatically computes the correct scale and registration of 3D reconstructions generated with [COLMAP](https://colmap.github.io/) by placing one or more ArUco markers in the scene. This module does not perform the reconstruction task itself so a colmap installation isn't needed.
## Installation
This repository is tested on Python 3.6+ and can be installed from PyPI:
```bash
pip install aruco-estimator
```
or
```
pip install git+https://github.com/meyerls/aruco-estimator
```
## Usage
### Test Data
Download and extract the test dataset:
```bash
wget -O door.zip "https://faubox.rrze.uni-erlangen.de/dl/fiUNWMmsaEAavXHfjqxfyXU9/door.zip"
unzip door.zip
```
### Registration
Test the registration functionality with the example project:
```bash
aruco-estimator register ./door --target-id 7 --dict-type 4 --show --aruco-size 0.15
```
### Merging
### Scripting
Test the registration functionality with the example project:
```bash
aruco-estimator align .data/_park .data/_alley--target-id 7 --dict-type 4 --show --aruco-size 0.15
```
``` python
from aruco_estimator.sfm.colmap import COLMAPProject
from aruco_estimator.utils import get_transformation_between_clouds,get_corners_at_origin
import cv2
project = COLMAPProject('./door', )
/sparse/0
target_id = 7
aruco_size = .15
aruco_results = project.detect_markers(dict_type=cv2.aruco.DICT_4X4_50)
# Get 3D corners for normalization
target_corners_3d = aruco_results[target_id]
print(target_corners_3d)
# Calculate 4x4 transform with scaling so tag is at the origin
transform = get_transformation_between_clouds(target_corners_3d, get_corners_at_origin(side_length=aruco_size))
# Apply normalization to the project
print("Normalizing poses and 3D points...")
project.transform(transform)
project.save("./transformed_output/")
```
### Dense Clouds
Current Script expects {project_dir}/fused.ply for dense cloud alignment and viz
## Known Limitations
- Only SIMPLE_RADIAL and PINHOLE camera models are supported
- Aruco boards are not uniquely supported
- Pose estimation is not robust to false detections; ransac would be beneficial
## Roadmap
- [ ] Update README with multi tag examples
- [ ] Support april tags
- [ ] Implement the merge by tag tool
- [ ] Support for additional camera models
- [ ] Geo-referencing of ArUco markers with Earth coordinate system using GPS or RT
## Troubleshooting
### OpenCV ArUco Module Issues
If cv2 doesn't detect the ArUco marker module, try reinstalling OpenCV:
```bash
pip uninstall opencv-python opencv-python-headless
pip install opencv-python opencv-contrib-python
```
## Acknowledgements
- Code for reading binary COLMAP data is partly borrowed from [COLMAP Utility Scripts](https://github.com/uzh-rpg/colmap_utils) by [uzh-rpg](https://github.com/uzh-rpg)
- Thanks to [Baptiste](https://github.com/Baptiste-AIST) for providing the wooden block reconstruction data from [[1](https://robocip-aist.github.io/sii_nerf_scans/)]
## References
[1] Erich, F., Bourreau, B., *Neural Scanning: Rendering and determining geometry of household objects using Neural Radiance Fields*. [sii_nerf_scans](https://robocip-aist.github.io/sii_nerf_scans/). 2022
## Citation
If this work helps with your research, please cite:
```bibtex
@inproceedings{meyer2023cherrypicker,
title={CherryPicker: Semantic skeletonization and topological reconstruction of cherry trees},
author={Meyer, Lukas and Gilson, Andreas and Scholz, Oliver and Stamminger, Marc},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={6244--6253},
year={2023}
}
```