OpenMVG (Multiple View Geometry) "open Multiple View Geometry" is a library for computer-vision scientists and especially targeted to the Multiple View Geometry community. It is designed to provide an easy access to the classical problem solvers in Multiple View Geometry and solve them accurately.
The openMVG credo is: "Keep it simple, keep it maintainable". OpenMVG targets readable code that is easy to use and modify by the community.
All the features and modules are unit tested. This test driven development ensures that the code works as it should and enables more consistent repeatability. Furthermore, it makes it easier for the user to understand and learn the given features.
Specifically, this repository is aimed at integrating GPU-oriented features and matchers into the photogrammetry pipeline in order to allow for optimised reconstruction times. Currently, this repository uses CUDA >= 7.0. However, future plans may involve using OpenCL/FPGA descriptors for faster detections and matching.
Current additional descriptors and matchers involve a CUDA implementation of LATCH and a CUDA implementation of a brute force Hamming matcher. To change the parameters of these matchers, there are files located under cudaLATCH's NUM SM parameter and bitMatcher's THRESHOLD parameter. These numbers allow the user to tune exactly how many CUDA SMs are used during the descriptor detection and matching, as well as the threshold for a possible match. WARNING: these numbers are multiplied by 512 to give a maximum amount of keypoints to the CUDA FAST detector.
See BUILD text file
Continuous integration:
See LICENSE MPL2 text file
See Authors text file
See documentation
openMVG authors would like to thanks libmv authors for providing an inspiring base to design openMVG. Authors also would like to thanks Mikros Image [1] and LIGM-Imagine laboratory [2] for support and authorization to make this library an opensource project.
[1] http://www.mikrosimage.eu/ [2] http://imagine.enpc.fr/
openmvg-team[AT]googlegroups.com
If you find the library or some part of it useful, then following publications are relevant:
[3] Moulon Pierre, Monasse Pascal and Marlet Renaud. ACCV 2012. Adaptive Structure from Motion with a contrario model estimation.
[4] Moulon Pierre and Monasse Pascal. CVMP 2012. Unordered feature tracking made fast and easy.
[5] Moisan Lionel, Moulon Pierre and Monasse Pascal. IPOL 2012. Automatic Homographic Registration of a Pair of Images, with A Contrario Elimination of Outliers.
[6] Moulon Pierre, Monasse Pascal and Marlet Renaud. ICCV 2013. Global Fusion of Relative Motions for Robust, Accurate and Scalable Structure from Motion.
[7] Christopher Parker, Matthew Daiter, Kareem Omar, Gil Levi and Tal Hassner. ECCV Workshop 2016. The CUDA LATCH Binary Descriptor: Because Sometimes Faster Means Better, Workshop on Local Features: State of the art, open problems and performance evaluation.
[8] Gil Levi and Tal Hassner. WACV, 2016. LATCH: Learned Arrangements of Three Patch Codes
or cite it as:
@misc{openMVG,
author = "Pierre Moulon and Pascal Monasse and Renaud Marlet and Others",
title = "OpenMVG. An Open Multiple View Geometry library.",
howpublished = "\url{https://github.com/openMVG/openMVG}",
}
as well as (for LATCH):
@inproceedings{Parkeretal2016CLATCH,
title={The {CUDA} {LATCH} Binary Descriptor: Because Sometimes Faster Means Better},
author={Christopher Parker and Matthew Daiter and Kareem Omar and Gil Levi and Tal Hassner},
booktitle={European Conference on Computer Vision (ECCV) workshops},
year={2016},
url = {http://www.openu.ac.il/home/hassner/projects/LATCH}
}
and
@inproceedings{LeviHassner2016LATCH,
title={{LATCH:} Learned Arrangements of Three Patch Codes},
author={Gil Levi and Tal Hassner},
booktitle={Winter Conference on Applications of Computer Vision ({WACV})},
year={2016},
organization={IEEE},
url = {http://www.openu.ac.il/home/hassner/projects/LATCH}
}