open Multiple View Geometry library. Basis for 3D computer vision and Structure from Motion.

Overview

OpenMVG (open Multiple View Geometry)

License Documentation Continuous Integration (Linux/MacOs/Windows) Build Code Quality Chat
GitHub license doc
Wiki
CI local/docker build tutorial Language grade: C/C++
CodeFactor
Join the chat

Our Mission

  • Extend awareness of the power of 3D reconstruction from images/photogrammetry by developing a C++ framework.

Our Vision

  • Simplify reproducible research with easy-to-read and accurate implementation of state of the art and "classic" algorithms.

Our Credo

  • "Keep it simple, keep it maintainable".
    • OpenMVG is designed to be easy to read, learn, modify and use.
    • Thanks to its strict test-driven development and samples, the library allows to build trusted larger systems.

Our codebase and pipeline

OpenMVG provides an end-to-end 3D reconstruction from images framework compounded of libraries, binaries, and pipelines.

  • The libraries provide easy access to features like: images manipulation, features description and matching, feature tracking, camera models, multiple-view-geometry, robust-estimation, structure-from-motion algorithms, ...
  • The binaries solve unit tasks that a pipeline could require: scene initialization, feature detection & matching and structure-from-motion reconstruction, export the reconstructed scene to others Multiple-View-Stereovision framework to compute dense point clouds or textured meshes.
  • The pipelines are created by chaining various binaries to compute image matching relation, solve the Structure from Motion problem (reconstruction, triangulation, localization) and ...

OpenMVG is developed in C++ and runs on Android, iOS, Linux, macOS, and Windows.

Tutorials

More information

Authors

See Authors text file

Contact

openmvg-team[AT]googlegroups.com

Citations

We are recommending citing OpenMVG if you are using the whole library or the adequate paper if you use only a submodule AContrario Ransac [3], AContrario SfM [1], GlobalSfM [4] or Tracks [2]:

@inproceedings{moulon2016openmvg,
  title={Open{MVG}: Open multiple view geometry},
  author={Moulon, Pierre and Monasse, Pascal and Perrot, Romuald and Marlet, Renaud},
  booktitle={International Workshop on Reproducible Research in Pattern Recognition},
  pages={60--74},
  year={2016},
  organization={Springer}
}

[1] Moulon Pierre, Monasse Pascal and Marlet Renaud. ACCV 2012. Adaptive Structure from Motion with a contrario model estimation.

@inproceedings{Moulon2012,
  doi = {10.1007/978-3-642-37447-0_20},
  year  = {2012},
  publisher = {Springer Berlin Heidelberg},
  pages = {257--270},
  author = {Pierre Moulon and Pascal Monasse and Renaud Marlet},
  title = {Adaptive Structure from Motion with a~Contrario Model Estimation},
  booktitle = {Proceedings of the Asian Computer Vision Conference (ACCV 2012)}
}

[2] Moulon Pierre and Monasse Pascal. CVMP 2012. Unordered feature tracking made fast and easy.

@inproceedings{moulon2012unordered,
  title={Unordered feature tracking made fast and easy},
  author={Moulon, Pierre and Monasse, Pascal},
  booktitle={CVMP 2012},
  pages={1},
  year={2012}
}

[3] Moisan Lionel, Moulon Pierre and Monasse Pascal. IPOL 2012. Automatic Homographic Registration of a Pair of Images, with A Contrario Elimination of Outliers.

@article{moisan2012automatic,
  title={Automatic homographic registration of a pair of images, with a contrario elimination of outliers},
  author={Moisan, Lionel and Moulon, Pierre and Monasse, Pascal},
  journal={Image Processing On Line},
  volume={2},
  pages={56--73},
  year={2012}
}

[4] Moulon Pierre, Monasse Pascal, and Marlet Renaud. ICCV 2013. Global Fusion of Relative Motions for Robust, Accurate and Scalable Structure from Motion.

@inproceedings{moulon2013global,
  title={Global fusion of relative motions for robust, accurate and scalable structure from motion},
  author={Moulon, Pierre and Monasse, Pascal and Marlet, Renaud},
  booktitle={Proceedings of the IEEE International Conference on Computer Vision},
  pages={3248--3255},
  year={2013}
}

Acknowledgements

openMVG authors would like to thanks libmv authors for providing an inspiring base to design openMVG. Authors also would like to thanks Mikros Image and LIGM-Imagine laboratory for support and authorization to make this library an opensource project.

Issues
  • Compiling OpenMVG with Cmake and Visual Studio 12 2013 win 64

    Compiling OpenMVG with Cmake and Visual Studio 12 2013 win 64

    Hi.... I am trying to compile OpenMVG in Cmake 3.3.0 on windows 7 64-bit . i am new to cmake.after installing GIT-2.5.1-64bit.exe(dont know wht it does) when i configure the OpenMVG-master/src in cmake it says......
    -some BLAS LIBRARY NOTFOUND -some COIN LIBRARY NOTFOUND -some ILOG LIBRARY NOTFOUND and others....... Mosek not found

    below is the completed genereted list.

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// The C compiler identification is MSVC 18.0.40629.0 The CXX compiler identification is MSVC 18.0.40629.0 Check for working C compiler using: Visual Studio 12 2013 Win64 Check for working C compiler using: Visual Studio 12 2013 Win64 -- works Detecting C compiler ABI info Detecting C compiler ABI info - done Check for working CXX compiler using: Visual Studio 12 2013 Win64 Check for working CXX compiler using: Visual Studio 12 2013 Win64 -- works Detecting CXX compiler ABI info Detecting CXX compiler ABI info - done Detecting CXX compile features Detecting CXX compile features - done target changed from "" to "auto" Detected CPU: sandy-bridge Performing Test check_c_compiler_flag__arch_AVX Performing Test check_c_compiler_flag__arch_AVX - Success Performing Test check_cxx_compiler_flag__arch_AVX Performing Test check_cxx_compiler_flag__arch_AVX - Success Checking for C++11 compiler Checking for C++11 compiler - available CMake Warning (dev) at cmakeFindModules/CXX11.cmake:21 (if): Policy CMP0054 is not set: Only interpret if() arguments as variables or keywords when unquoted. Run "cmake --help-policy CMP0054" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

    Quoted variables like "MSVC" will no longer be dereferenced when the policy is set to NEW. Since the policy is not set the OLD behavior will be used. Call Stack (most recent call first): CMakeLists.txt:70 (enable_cxx11) This warning is for project developers. Use -Wno-dev to suppress it.

    Looking for C++ include thread Looking for C++ include thread - found Looking for C++ include chrono Looking for C++ include chrono - found Try OpenMP C flag = [/openmp] Performing Test OpenMP_FLAG_DETECTED Performing Test OpenMP_FLAG_DETECTED - Success Try OpenMP CXX flag = [/openmp] Performing Test OpenMP_FLAG_DETECTED Performing Test OpenMP_FLAG_DETECTED - Success Found OpenMP: /openmp
    -- Did not find MOSEK header -- Did not find MOSEK library Could not find mosek library on this machine. Eigen 3.2.4 found (include: E:/Proj Dent/Experiment Programms/CmakeOpenMVG/openMVG-master/src/third_party/eigen) CERES NOT FOUND Found PythonInterp: C:/Python34/python.exe (found version "3.4.1") Could NOT find Wget (missing: WGET_EXECUTABLE) Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) Could NOT find Ghostscript (missing: GHOSTSCRIPT_EXECUTABLE) Could NOT find GLPK (missing: GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_PROPER_VERSION_FOUND) (Required is at least version "4.33") Could NOT find ILOG (missing: ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR) Could NOT find COIN (missing: COIN_INCLUDE_DIR COIN_CBC_LIBRARY COIN_CBC_SOLVER_LIBRARY COIN_CGL_LIBRARY COIN_CLP_LIBRARY COIN_COIN_UTILS_LIBRARY COIN_OSI_LIBRARY COIN_OSI_CBC_LIBRARY COIN_OSI_CLP_LIBRARY) Could NOT find SOPLEX (missing: SOPLEX_LIBRARY SOPLEX_INCLUDE_DIR) Looking for sys/types.h Looking for sys/types.h - found Looking for stdint.h Looking for stdint.h - found Looking for stddef.h Looking for stddef.h - found Check size of long long Check size of long long - done Looking for include file pthread.h Looking for include file pthread.h - not found Found Threads: TRUE
    Looking for stdlib.h Looking for stdlib.h - found Looking for assert.h Looking for assert.h - found Looking for fcntl.h Looking for fcntl.h - found Looking for io.h Looking for io.h - found Looking for jbg_newlen Looking for jbg_newlen - not found Looking for mmap Looking for mmap - not found Looking for search.h Looking for search.h - found Looking for string.h Looking for string.h - found Looking for unistd.h Looking for unistd.h - not found Eigen 3.2.4 found (include: E:/Proj Dent/Experiment Programms/CmakeOpenMVG/openMVG-master/src/third_party/eigen) -- Found Eigen version 3.2.4: E:/Proj Dent/Experiment Programms/CmakeOpenMVG/openMVG-master/src/third_party/eigen

    =============================================================== Disabling the use of Eigen as a sparse linear algebra library. This does not affect the covariance estimation algorithm which can still use the EIGEN_SPARSE_QR algorithm.

    A library with BLAS API not found. Please specify library location. LAPACK requires BLAS -- Did not find LAPACK library, disabling LAPACK support. -- Did not find BLAS library, disabling LAPACK support. -- Building without SuiteSparse. -- Google Flags disabled; no tests or tools will be built! -- Compiling minimal glog substitute into Ceres. -- Using minimal glog substitute (include): internal/ceres/miniglog -- Building with OpenMP. Looking for C++ include unordered_map Looking for C++ include unordered_map - found Performing Test HAVE_UNORDERED_MAP_IN_STD_NAMESPACE Performing Test HAVE_UNORDERED_MAP_IN_STD_NAMESPACE - Success -- Found unordered_map/set in std namespace. Looking for C++ include memory Looking for C++ include memory - found Performing Test HAVE_SHARED_PTR_IN_STD_NAMESPACE Performing Test HAVE_SHARED_PTR_IN_STD_NAMESPACE - Success -- Found shared_ptr in std namespace using header. -- Building Ceres as a static library. Creating configured Ceres config.h output directory: E:/Proj Dent/Experiment Programms/CmakeOpenMVG/openMVG-masterBINARY/third_party/ceres-solver/config/ceres/internal Enabling CERES_NO_LAPACK in Ceres config.h Enabling CERES_NO_SUITESPARSE in Ceres config.h Enabling CERES_USE_OPENMP in Ceres config.h Enabling CERES_STD_UNORDERED_MAP in Ceres config.h -- Do not build any example. CMake Warning (dev) at third_party/flann/CMakeLists.txt:18 (if): Policy CMP0054 is not set: Only interpret if() arguments as variables or keywords when unquoted. Run "cmake --help-policy CMP0054" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

    Quoted variables like "MSVC" will no longer be dereferenced when the policy is set to NEW. Since the policy is not set the OLD behavior will be used. This warning is for project developers. Use -Wno-dev to suppress it.

    CMake Warning (dev) at third_party/flann/CMakeLists.txt:22 (if): Policy CMP0054 is not set: Only interpret if() arguments as variables or keywords when unquoted. Run "cmake --help-policy CMP0054" for policy details. Use the cmake_policy command to set the policy and suppress this warning.

    Quoted variables like "MSVC" will no longer be dereferenced when the policy is set to NEW. Since the policy is not set the OLD behavior will be used. This warning is for project developers. Use -Wno-dev to suppress it.

    Configured Eigen 3.2.4

    Could NOT find Sphinx (missing: SPHINX_EXECUTABLE) Sphinx need to be installed to generate the documentation Configuring done //////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// after generating .... I open the openMVG.sln file in Visual Studio 2013 and then set openMVG_main_SfMInit_ImageListing as startup project and then Build solution as Release....

    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////// with errors and warnings it only build 63 and skipped 2 and nothing will work....... ///////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    Plz help me out...........

    opened by mridul2100 62
  • Question: Automatically Scale

    Question: Automatically Scale

    Hi @pmoulon . Is there a way to automatically scale the model? (either with openMVG or openMVS) Currently, I keep a checkerboard next to the object and use that as baseline to scale the model manually in meshlab. Is there anyway by which the model can get scaled automatically?

    opened by Ntweat 53
  • main_ComputeFeatures.cpp

    main_ComputeFeatures.cpp

    Hi,

    I'm a new programmer. I have a silly question.

    How can I run main_ComputeFeatures.cpp separately? What is the input of the .cpp? How do I configure this so that it can run? Do I need to run it in cmd?

    Thanks

    opened by zhaoziyi006 51
  • How do I install openMVG in Windows?

    How do I install openMVG in Windows?

    Hi guys, I am quite new in programming, so I barely know things so I apologise in advance if my question sounds silly :).

    But, what the best way to install the openMVG in windows OS? I have installed VS 15 but I have no clue what to do next.

    I really appreciate your help and thank in advance.

    Cheers, Stavros

    question 
    opened by Stav2se 43
  • [geodesy] Add a geodesy module to OpenMVG

    [geodesy] Add a geodesy module to OpenMVG

    Will provide a basic coordinates for GPS registration.

    Add ability to read and use EXIF GPS data

    • [x] Add basic function to convert WGS84 lat,lon,alt from/to ECEF X,Y,Z value
    • [x] Deal with EasxyExif uninitialized GPS (long,lat,alt) values (https://github.com/openMVG/openMVG/commit/f558720e37bb43fcfbbc32a034d93fc714b47487#commitcomment-17338526)
      • Enhance EasyExif library:
        • Since 0 is a valid value, use a tag to mark the GPS value as uninitialized (infinity)
    • [x] Add an unit test for checking existence and validity of GPS data
    • [x] Add a sample to show how to parse GPS (lat, long, alt) EXIF metadata & compute XYZ positions & export the resulting positions as a PLY points file.

    Fix usage of large XYZ coordinates

    • [x] Fix SfM_Data PLY logging (force fixed notation and change the precision to fit float precision). Avoid quantification effect when data are registered (since they can have large value once they are in a geodesy coordinates system)

    Add a binary to perform the SfM_Data rigid registration to GPS metadata

    The registration is performed by computing a 3D similarity:

    • [x] from all points
    • [x] thanks to a robust estimation method, to be robust to outlier GPS measure.

    Pose center positions can be read from:

    • [x] image EXIF metadata
    • [x] from the View pose priors

    Navigation prior

    • add a new view type with prior data
      • [x] translation
      • rotation -> this feature will be delayed since using many translation will align rotations too.
    • [x] Implement the usage of navigation prior in the BA
      • [x] Add unit test to test BA with navigation prior

    Enhance image matching time

    • [x] Add a new binary that can generate a matching pair file for main_ComputeMatches.
      • Add a -G mode to use the GPS pose center prior and a neighbor value to limit the number of pair to compare for putative matches (particularly useful with UAV like scene that have a single height flight-plane).

    Documentation

    • [x] Add new documentation for the geodesy module

    • [x] merge to main develop branch

    enhancement 
    opened by pmoulon 40
  • Couldn't build OpenMVG on Mac

    Couldn't build OpenMVG on Mac

    Hello all,

    I am trying to build OpenMVG after following the build instruction for Mac OS. However it failed with the following compilation messages. It seems that OpenMp is not found. However, I have downloaded both gcc and llvm and changed the environment variables to point to the correct lib and include directories. I have tried to compile (with both clang and gcc compilers) using some simplest code with OpenMp lines and it compiles and works file. However if I build OpenMVG using:

    cmake -DCMAKE_CXX_COMPILER=g++-7 -DCMAKE_BUILD_TYPE=RELEASE -DOpenMVG_BUILD_TESTS=ON -DOpenMVG_BUILD_EXAMPLES=ON -fopenmp . ../openMVG/src/
    

    it fails and the compilation messages are as follows. Any ideas for why it isn't working? I have been stuck for a little while... Thanks a lot for your help!

    -- Checking for C++11 compiler
    -- Checking for C++11 compiler - available
    -- Try OpenMP C flag = [ ]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-fopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-fopenmp=libomp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [/openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-Qopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-xopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [+Oopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-qsmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-mp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Could NOT find OpenMP (missing:  OpenMP_C_FLAGS) 
    -- Eigen 3.3.4 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/third_party/eigen)
    -- Flann 1.8.4 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/third_party/flann/src/cpp/flann)
    -- CoinUtils 2.10.13 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/dependencies/osi_clp/CoinUtils/src)
    -- Clp 1.16.10 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/dependencies/osi_clp/Clp/src)
    -- Osi 0.107.8 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/dependencies/osi_clp/Osi/src/Osi)
    -- Lemon 1.3 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/third_party/lemon/lemon)
    -- Could NOT find Wget (missing:  WGET_EXECUTABLE) 
    -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
    -- Could NOT find Ghostscript (missing:  GHOSTSCRIPT_EXECUTABLE) 
    -- Could NOT find GLPK (missing:  GLPK_LIBRARY GLPK_INCLUDE_DIR GLPK_PROPER_VERSION_FOUND) (Required is at least version "4.33")
    -- Could NOT find ILOG (missing:  ILOG_CPLEX_LIBRARY ILOG_CPLEX_INCLUDE_DIR) 
    -- Could NOT find COIN (missing:  COIN_INCLUDE_DIR COIN_CBC_LIBRARY COIN_CBC_SOLVER_LIBRARY COIN_CGL_LIBRARY COIN_CLP_LIBRARY COIN_COIN_UTILS_LIBRARY COIN_OSI_LIBRARY COIN_OSI_CBC_LIBRARY COIN_OSI_CLP_LIBRARY) 
    -- Could NOT find SOPLEX (missing:  SOPLEX_LIBRARY SOPLEX_INCLUDE_DIR) 
    
       ===============================================================
       Ceres-solver configuration.
       ===============================================================
    -- Detected Ceres version: 1.13.0 from /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/third_party/ceres-solver/include/ceres/version.h
    -- Eigen 3.3.4 found (include: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/third_party/eigen)
    -- Found Eigen version 3.3.4: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG/src/third_party/eigen
    
       ===============================================================
       Disabling the use of Eigen as a sparse linear algebra library.
       This does not affect the covariance estimation algorithm 
       which can still use the EIGEN_SPARSE_QR algorithm.
       ===============================================================
    
    -- A library with BLAS API found.
    -- Found LAPACK library: /System/Library/Frameworks/Accelerate.framework;/System/Library/Frameworks/Accelerate.framework
    -- Found BLAS library: /System/Library/Frameworks/Accelerate.framework
    -- Building without SuiteSparse.
    -- Found CXSparse in: ../cxsparse/Include, building with CXSparse.
    -- Google Flags disabled; no tests or tools will be built!
    -- Compiling minimal glog substitute into Ceres.
    -- Using minimal glog substitute (include): internal/ceres/miniglog
    -- Building without OpenMP (disabling multithreading).
    -- Looking for C++ include unordered_map
    -- Looking for C++ include unordered_map - found
    -- Performing Test HAVE_UNORDERED_MAP_IN_STD_NAMESPACE
    -- Performing Test HAVE_UNORDERED_MAP_IN_STD_NAMESPACE - Success
    -- Found unordered_map/set in std namespace.
    -- Looking for C++ include memory
    -- Looking for C++ include memory - found
    -- Performing Test HAVE_SHARED_PTR_IN_STD_NAMESPACE
    -- Performing Test HAVE_SHARED_PTR_IN_STD_NAMESPACE - Success
    -- Found shared_ptr in std namespace using <memory> header.
    -- Building Ceres as a static library.
    -- Enabling CERES_NO_SUITESPARSE in Ceres config.h
    -- Enabling CERES_NO_THREADS in Ceres config.h
    -- Enabling CERES_STD_UNORDERED_MAP in Ceres config.h
    -- Do not build any example.
       ===============================================================
       Ceres-solver configuration end.
       ===============================================================
    -- Try OpenMP C flag = [-fopenmp=libomp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [ ]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-fopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [/openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-Qopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-openmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-xopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [+Oopenmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-qsmp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Try OpenMP C flag = [-mp]
    -- Performing Test OpenMP_FLAG_DETECTED
    -- Performing Test OpenMP_FLAG_DETECTED - Failed
    -- Could NOT find OpenMP (missing:  OpenMP_C_FLAGS) 
    CMake Warning at third_party/flann/CMakeLists.txt:75 (message):
      OpenMP NOT found
    
    
    CMake Warning at third_party/eigen/CMakeLists.txt:67 (message):
      EIGEN_INCLUDE_INSTALL_DIR is deprecated.  Use INCLUDE_INSTALL_DIR instead.
    
    
    -- 
    -- Configured Eigen 3.3.4
    -- 
    CMake Warning at openMVG_Samples/describe_and_match_GUI/CMakeLists.txt:4 (find_package):
      By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project
      has asked CMake to find a package configuration file provided by
      "Qt5Widgets", but CMake did not find one.
    
      Could not find a package configuration file provided by "Qt5Widgets" with
      any of the following names:
    
        Qt5WidgetsConfig.cmake
        qt5widgets-config.cmake
    
      Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set
      "Qt5Widgets_DIR" to a directory containing one of the above files.  If
      "Qt5Widgets" provides a separate development package or SDK, be sure it has
      been installed.
    
    
    CMake Warning at software/VO/AlternativeVO/CMakeLists.txt:6 (find_package):
      By not providing "FindQt5Widgets.cmake" in CMAKE_MODULE_PATH this project
      has asked CMake to find a package configuration file provided by
      "Qt5Widgets", but CMake did not find one.
    
      Could not find a package configuration file provided by "Qt5Widgets" with
      any of the following names:
    
        Qt5WidgetsConfig.cmake
        qt5widgets-config.cmake
    
      Add the installation prefix of "Qt5Widgets" to CMAKE_PREFIX_PATH or set
      "Qt5Widgets_DIR" to a directory containing one of the above files.  If
      "Qt5Widgets" provides a separate development package or SDK, be sure it has
      been installed.
    
    
    CMake Warning at software/CMakeLists.txt:14 (find_package):
      By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
      asked CMake to find a package configuration file provided by "Qt5", but
      CMake did not find one.
    
      Could not find a package configuration file provided by "Qt5" with any of
      the following names:
    
        Qt5Config.cmake
        qt5-config.cmake
    
      Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
      to a directory containing one of the above files.  If "Qt5" provides a
      separate development package or SDK, be sure it has been installed.
    
    
    ** Qt5 not found, GUI modules will not be build
    -- Could NOT find Sphinx (missing:  SPHINX_EXECUTABLE) 
    Sphinx need to be installed to generate the sphinx documentation
    -- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
    Doxygen need to be installed to generate the doxygen documentation
    
    
    ** OpenMVG version: 1.3.0
    ** Build Shared libs: OFF
    ** Build OpenMVG tests: ON
    ** Build OpenMVG softwares: ON
    ** Build OpenMVG documentation: ON
    ** Build OpenMVG samples applications: ON
    ** Build OpenMVG openGL examples: OFF
    ** Enable code coverage generation: OFF
    ** Enable OpenMP parallelization: ON
    ** Build OpenCV+OpenMVG samples programs: OFF
    ** Use OpenCV SIFT features: OFF
    
    
    -- CEREAL: (internal)
    -- EIGEN: 3.3.4 (internal)
    -- CERES: 1.13.0 (internal)
    -- FLANN: 1.8.4 (internal)
    -- LIBTIFF:  (internal)
    -- LIBPNG:  (internal)
    -- LIBJPEG (internal)
    -- CLP: 1.16.10 (internal)
    -- COINUTILS: 2.10.13 (internal)
    -- OSI: 0.107.8 (internal)
    -- LEMON: 1.3 (internal)
    
    
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /Users/chendavies/Documents/LatchAid/LatchAid/openMVG
    
    opened by cmdavies 36
  • Incremental SfM v2

    Incremental SfM v2

    Implement a new Incremental SfM pipeline (SequentialSfMReconstructionEngine2) with the following features:

    • The reconstruction initialization is done thanks to an abstract interface, SfMSceneInitializer.
    • The triangulation stage considers the entire scene tracks.
    • The resection stage is based on 2d-3D matching confidence.
    • The reconstruction can start from existing camera poses.

    This new engine is easier to read and to customize. This new engine has been designed after reading [1], [2] & [3].

    SequentialSfMReconstructionEngine2 is:

    • fast:

      • Since it localizes images as soon as it can, fewer Bundle Adjustment steps are observed than in SequentialSfMReconstructionEngine.
    • flexible:

      • The engine can extend a partial reconstruction, you can call this engine on the results of any other SfM Engine. For example, you can run GlobalSfM (to obtain the pose of the camera triplets) and then run SequentialSfMReconstructionEngine2 to localize the remaining images.
      • You can now initialize the reconstruction with a n-view reconstruction (Stellar [2]) and provide a very stable seed for the reconstruction.

    For the moment three SfMSceneInitializer are implemented:

    • SfMSceneInitializer
      • Keep the existing poses. -> extend a previous reconstruction.
    • SfMSceneInitializerMaxPair:
      • Initialize a 2-view reconstruction (the relative pose with the most of inliers).
    • SfMSceneInitializerStellar
      • Initialize a stellar reconstruction (a n-view reconstruction with edge connected to a central unique pose: i.e here a 5 pose stellar configuration defined by 4 relative pairs {{0,1}, {0,2}, {0,6}, {0,10}}. see [2])

    Looking forward to the community feedback on this new engine.

    [1] Batched Incremental Structure-from-Motion. Hainan Cui, Shuhan Shen, Xiang Gao, Zhanyi Hu. (3DV 2017). [2] Global Structure-from-Motion by Similarity Averaging. Zhaopeng Cui and Ping Tan. (ICCV2015) [3] Structure-from-Motion Revisited, Schonberger, Johannes Lutz and Frahm, Jan-Michael. (CVPR2016).

    Here is an example of a stellar reconstruction computed from 27 relative pose pairs and 223 relative scales, the Stellar estimation results in 28 images localized to start the SfM process. snapshot00

    enhancement 
    opened by pmoulon 34
  • fatal error: 'type_traits' file not found on Mac OS X 10.8.5 / Xcode 5.1.1

    fatal error: 'type_traits' file not found on Mac OS X 10.8.5 / Xcode 5.1.1

    About a year ago I managed to build openMVG on this same machine without problems, don't know what has changed …

    Before I bang my head trying to figure out the problem I thought I'd ask here first if this is a known issue or my personal problem...

    opened by nyholku 34
  • Is it possible to export feature detection/matching times from OpenMVG?

    Is it possible to export feature detection/matching times from OpenMVG?

    Let's say I've performed matches on features that have been detected using your pipeline. Can I export the runtimes for those matches, or do I need to force a recompute of the matching times? This is for benchmarking.

    enhancement question 
    opened by mdaiter 33
  • openMVG compiled with Visual Studio 2015, 64 bits, crashes for some projects

    openMVG compiled with Visual Studio 2015, 64 bits, crashes for some projects

    For certain (generally larger) projects, openMVG crashes on Windows. The same projects run fine under Linux.

    Compiled with Visual Studio 2015, 64 bits.

    Executable that crashes: openMVG_main_IncrementalSfM -i D:\someproject\matches\sfm_data.json -m D:\someproject\matches -o D:\someproject\reconstruction_sequential

    In release mode, the crash is silent and the executable will run forever using one full core, never finishing the process. In Debug mode, an assertion is violated:

    ---------------------------
    Microsoft Visual C++ Runtime Library
    ---------------------------
    Debug Assertion Failed!
    
    Program: C:\WINDOWS\SYSTEM32\MSVCP140D.DLL
    File: C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xtree
    Line: 262
    
    Expression: map/set iterator not incrementable
    
    For information on how your program can cause an assertion
    failure, see the Visual C++ documentation on asserts.
    
    (Press Retry to debug the application)
    
    ---------------------------
    Abort   Retry   Ignore   
    ---------------------------
    

    These are the relevant stackframes:

    /* STACK FRAMES (most recent first) */
    // FRAME 0: xtree
        _Myiter& operator++()
            {   // preincrement
     #if _ITERATOR_DEBUG_LEVEL == 2
            if (this->_Getcont() == 0
                || this->_Ptr == 0
                || _Mytree::_Isnil(this->_Ptr))
                {   // report error
                _DEBUG_ERROR("map/set iterator not incrementable");
                _SCL_SECURE_OUT_OF_RANGE;     // <-- break
                }
    
    // FRAME 1: xutility
    template<class _BidIt,
        class _Diff> inline
            void _Distance2(_BidIt _First, _BidIt _Last, _Diff& _Off,
                bidirectional_iterator_tag)
        {   // add to _Off distance between bidirectional iterators (redundant)
        for (; _First != _Last; ++_First)             // <-- break
            ++_Off;
        }
    
    // FRAME 2: xutility
    template<class _InIt,
        class _Diff> inline
            void _Distance(_InIt _First, _InIt _Last, _Diff& _Off)
        {   // add to _Off distance between iterators
        _Distance2(_First, _Last, _Off, _Iter_cat(_First));  // <-- break
        }
    
    // FRAME 3: xtree
        size_type count(const key_type& _Keyval) const
            {   // count all elements that match _Keyval
            _Paircc _Ans = equal_range(_Keyval);
            size_type _Num = 0;
            _Distance(_Ans.first, _Ans.second, _Num);
            return (_Num);                        // <-- break
            }
    
    // FRAME 4: sequential_SfM.cpp (L:1120)
              if (sfm_data_.structure.count(trackId) != 0) // <-- break
    
    

    I do not know how I can provide any further information that would help track down this bug. I may not be able to provide the actual source photos due to usage rights, but I might be able to send the openMVG files if that is of any use (it does weigh in at 955 MB though).

    enhancement 
    opened by ShinNoNoir 33
  • [cameras] Add a fish-eye distortion model

    [cameras] Add a fish-eye distortion model

    • [x] Add a simple fish-eye distortion model for a full frame fish-eye
    • [x] Document and write tests for it
    • [x] Push a nice example somewhere => thx to @pyp22 https://github.com/pyp22/datasets/tree/master/fisheye/Perros-Guirec_St_Nicolas%20Church
    enhancement 
    opened by rjanvier 33
  • How to perform SFM when the camera's intrinsics and extrinsics are known?

    How to perform SFM when the camera's intrinsics and extrinsics are known?

    Hello, elder brothers. I have a question to ask. In openmvg, if the internal and external parameters of the camera are not passed in, the scale and position of the generated data are not aligned. On the premise that the camera's intrinsics and extrinsics are known, I pass in the camera's intrinsics and extrinsics through imagelistingfromknownposes, and then use openmvg_ main_ SfM -s "INCREMENTALV2" -S EXISTING_ SFM was performed by pose, but the effect was poor. Many parts were missing, and only some parts were successfully generated; I try to use openmvg_ main_ SFM.exe -s global generates data with good results, but the parameter of -S EXISTING_POSE is not supported in this mode, so its position is not registered with my World coordinate system; My question is: how can I use openmvg_ main_ SFM -s global method achieves good results in SFM, and makes the final generated position match my world coordinate system? I would appreciate it if you could take the time out of your busy schedule to answer my question.

    opened by qq302011 0
  • SfMInit_ImageListing initialised in the wrong order?

    SfMInit_ImageListing initialised in the wrong order?

    I'm processing a dataset at half resolution then running ComputeStructureFromKnownPoses on full resolution features. Half resolution scene looks fine but after ComputeStructureFromKnownPoses it's scattered. It's weird, the id_intrinsic of the first view started at 1 instead of 0 for the downscaled dataset. I've never ran into that issue on any other dataset, what do you think happened?

    Dataset for testing: https://www.mediafire.com/file/ld98qehjvpx74bs/xjrn-0h22.7z/file

    For ComputeStructureFromKnownPoses, which triangulation mode would be best suited for this? Currently using A, as B returns an empty scene.

    opened by 4CJ7T 1
  • Spherical camera

    Spherical camera

    Hi, thanks for providing the excellent tool set.

    Recently, I am interesting in processing spherical images by using openMVG. Thus, I want to know what's the main difference between normal cameras, such as pinhole, and spherical cameras in the SFM workflow.

    Thanks.

    opened by json87 5
  • Data from sfm.json does not match what is exported by openMVG_main_ExportCameraFrustums

    Data from sfm.json does not match what is exported by openMVG_main_ExportCameraFrustums

    @pmoulon Hello.

    I have a problem with the interpretation of the position and rotation of various cameras.

    According to the sfm.data shared in the links below there are 6 cameras pointing to different directions (locating the cameras in the cloud Compare with the data of the extrinsic sfm.json: Each camera was added one by one in the cloud compare with the rotation and center data), however, if I export the frustrum from the sfm.json with the openMVG_main_ExportCameraFrustums.exe executable then the location and rotation of the cameras do not match.

    Could you look at it and give me some suggestion?

    It will be very useful, thank you very much.

    https://drive.google.com/file/d/1BQAG8OhhTVV4wsVGllGZr2nIt17pZ1vj/view?usp=sharing

    opened by Livan89 0
  • Fix inconsistency in spherical Intrinsic_Spherical projection functor

    Fix inconsistency in spherical Intrinsic_Spherical projection functor

    There is an inconsistency between the way spherical projection is computed in the ceres cost functor and the way it's defined in Camera_Spherical.hpp. In the ceres functor the coordinates are shifted by -0.5 (top left is (0,0)) and in the Camera_Spherical.hpp file they are not (top left is (-0.5,-0.5)). Apparently there are some other inconsistencies of this kind in the lib that might need to be addressed.

    opened by rjanvier 0
Releases(v2.0)
  • v2.0(Oct 20, 2021)

    OpenMVG v2.0 "Rainbow Trout" is out

    What's new:

    • 21 PR has been handled.
    • 32 issues/features enhancement has been completed.

    OpenMVG core:

    Logging

    • Centralized LOGGER OPENMVG_LOG_INFO/WARNING/ERROR

    Matching

    • CBIR - Content Based Image Retrieval
      • VLAD global matching image indexing & retrieval enhancement [1,2,3]
      • Pre-Emptive feature matching [4]

    Software

    • One SFM binary to rules them All
      • access to Incremental, IncrementalV2 and Global from a single binary!
    • Add utility to convert matches from .bin to .txt or .txt to .bin
    • Improve OpenMVS interface
    • ComputeStructureFromKnownPoses can now triangulate landmarks in sfm_data files (i.e computed by main_VO)
    • Frustrum display
      • Top face colored
      • Add near/far bounds limits as command line parameters
    • Dataset import
      • Add support of BlendedMVS/MVG dataset

    Third-party

    • Update Eigen to 3.4.0

    Benchmarking

    • Add an image collection matching benchmark binary

    Thank you to @rjanvier, @rperrot,@cdcseacave, @nguyengiang41, @yocabon, @tjdahlke, @cenit, @TongLing916, @csparker247, @Cecilimon, @mitjap, @qingzhengzhuma, @kimoktm, @LWisteria, @flosincapite, @yurivict, @Hiltona99

    [1]"Aggregating local descriptors into compact codes". H. Jegou, F. Perronnin, M. Douze, J. Sanchez, and P. Perez., C. Schmid. PAMI, 2012. [2] "All About VLAD". R. Arandjelovic and A. Zisserman. CVPR 2013. [3] "Revisiting the VLAD image representation". J. Delhumeau, P.H. Gosselin, H. Jégou, P. and Pérez. ACM Multimedia 2013. [4] "Towards Linear-time Incremental Structure from Motion" C. Wu, 3DV 2013

    Source code(tar.gz)
    Source code(zip)
    ReleaseV2.0.Rainbow-Trout.WindowsBinaries_VS2019.zip(41.08 MB)
  • v1.6(May 13, 2020)

    OpenMVG v1.6 "Halibut" is out

    What's new:

    • 24 PR has been handled.
    • 22 issues/features enhancement has been completed.

    OpenMVG core:

    Graphics

    • Add a helper class to manage to draw colors from gradient & heat bar/map #1594
    • Add opacity support in svgStyle #1697

    Multiview

    • Add 3 two-view triangulation routines [1,2] Thx to @rjanvier #1623 #1645
    • Add Upright Essential matrix solver [3] #1718
    • Add relative upright up2p solver [4] Thx to @vlarsson #1721

    Matching

    • Add HNSWL2 matcher [5] @rjanvier #1665

    Software/SfM

    • Add ability to chose Triangulation and Resection/Pose method from command line #1729
    • Add display of view-graph statistics in ComputeMatches #1662
    • ExportToOpenMVS supports now grayscale images @junlinp #1709
    • FrustrumExport top face is now colored @csparker247 #1702

    Build enhancement

    • Fix includes for GCC 9.2 #1666

    Wiki

    • Initiate a wiki https://github.com/openMVG/openMVG/wiki (with tutorials and description of OpenMVG data structures) #1675

    [1] Triangulation: Why Optimize? - BMVC 2019 [2] Closed-Form Optimal Triangulation Based on Angular Errors - ICCV19 [3] Fast and Reliable Minimal Relative Pose Estimation under Planar Motion. Sunglok Choi, Jong-Hwan Kim, 2018 [4] Closed-form solutions to the minimal absolute pose problems with known vertical direction. Zuzana Kukelova, Martin Bujnak, Tomas Pajdla. ACCV 2010 [5] Efficient and robust approximate nearest neighbor search using Hierarchical Navigable Small World graphs Yu. A. Malkov, D. A. Yashunin. 2016

    Source code(tar.gz)
    Source code(zip)
    ReleaseV1.6.Halibut.WindowsBinaries_VS2017.zip(42.85 MB)
  • v1.5(Jul 15, 2019)

    OpenMVG v1.5 “Coho Salmon” is out

    What's new:

    • 21 PR has been handled.
    • 29 issues/features enhancement has been completed.

    OpenMVG core:

    Multiview

    • Add a new P3P solver "Lambda Twist: An Accurate Fast Robust Perspective Three Point (P3P) Solver, ECCV 2018. Thx to @rjanvier & @midjji #1500

    SfM

    • Enhancement to SequentialSfMReconstructionEngine2
      • fix possible infinite loop #1241
      • enhance resection stability #1399
    • Enhanced unit test for robust triangulation #1520

    Software/SfM

    • Add Spherical SfM scene to Cubic SfM Scene converter to allow to use MVS on spherical SfM scene (Thx to @li.guan) #1505

    Tracking

    • add a unit test for union_find #1550

    Clustering (NEW)

    • Add a Kmeans implementation (Llyod) @rperrot #1476

    Build enhancement

    • Fix a CMake build error related to OSI/CLP/COIN (regression) #1463
    • Update Dockerfile to use ubuntu::bionic #1464
    • Fix some CXX Flag transitivity with cmake build system #1176
    • Enhance iOS build support #1300

    Continuous Integration

    • Update Travis.ci to build on macOS 10.13 and 10.14
    • Faster windows CI (no debug build)

    Documentation

    • Update doc for Microsoft vcpkg #1531 (official port! -> vcpkg install openmvg[core,openmp])
    • Update doc for the Docker interface

    UI

    • Fix GCP registration if the numbering is not continuous #1536
    Source code(tar.gz)
    Source code(zip)
    ReleaseV1.5.Coho_Salmon.WindowsBinaries_VS2015.zip(42.73 MB)
  • v1.4(Aug 25, 2018)

    OpenMVG v1.4 “Chinook Salmon” is out

    What's new:

    • 14 PR has been handled.
    • 22 issues/features enhancement has been completed.

    OpenMVG core:

    Matching:

    • Fix SVG matches export when images have different width or height size #1216
    • Use reference instead of a temporary in the function named MatchesPairToMat #1188
    • Create a RegionMatcherFactory #1056

    Multiview:

    • Fix the CVPR 2017 resection solver #1253
    • Add an orthographic essential matrix solver "Two-View Orthographic Epipolar Geometry: Minimal and Optimal Solvers", Magnus Oskarsson, Journal of Mathematical Imaging and Vision, 2017. #1246

    Robust-Estimation:

    • Add a GMS Filter (Grid-based Motion Statistics filter) "GMS: Grid-based Motion Statistics for Fast, Ultra-robust Feature Correspondence, JiaWang Bian and al., CVPR2017 #1049

    SfM:

    • Implement a new Incremental SfM pipeline, SequentialSfMReconstructionEngine2: #1241

      • The reconstruction initialization is done thanks to an abstract interface, SfMSceneInitializer. The reconstruction can now start from 2 to n images (n-uplets or existing poses).
      • The triangulation stage considers the entire scene tracks.
      • The resection stage is based on 2d-3D matching confidence.
      • The reconstruction can start with existing camera poses.
      • This new engine is easier to read and to customize (compact and use more abstraction).
    • Sfm Data Colorization refactoring #1252 #1256

    • Fix a bug in ESfM_Data enum (behavior was a minor impact on control_point usage) #1306

    software/localization:

    • Extend the localization software to support any camera type in the command line #1210

    software/SfM:

    • Add openMVG_main_SfMInit_ImageListingFromKnownPoses to init OpenMVG sfm_data scene (views, intrinsics & poses) from GT dataset #1195:
      • DTUMVS, ETH3D, Kitty, Middlebury, Strecha
    • Remove useless code in IncrementalSfM #1254
    • Add functions to export tracking data to sfm_data landmarks. enhancement #1292
    • Move export2X and exportX binaries to software/SfM/export directory enhancement #1268
    • Move the matcher out of a loop for to be more efficient in main_ListMatchingPairs.cpp #1172

    Build enhancement

    • User modern CMake recommendations #1176 #1146 #1235 #1147 #1221 #1269
    • Fix shared libraries build #1339 #1293 #1286 #1358
    • Enhance build documentation to support external libs build by Microsoft/VCPKG #1327
    • Support Ceres-Solver 2.0 API changes #1323
    • Enhance support of external JPEG, PNG, and TIFF libraries #1266

    Samples

    • Rewrite main_pano_converter.cpp to use the Spherical camera model enhancement #1314

    Continuous Integration

    • Enhance Travis XCode build #1170

    Documentation

    • Improve build and geodesy documentation #1337 #1346 #1251

    UI

    • Fix some minor issues #1224
    Source code(tar.gz)
    Source code(zip)
    ReleaseV1.4.Chinook_Salmon.WindowsBinaries_VS2015.zip(42.17 MB)
  • v1.3(Dec 8, 2017)

    OpenMVG v1.3 “Yellowtail” is out

    What's new:

    OpenMVG core:

    Cameras:

    • Generalization of usage of bearing vectors (normalized camera ray vectors).
    • Allow to use a common interface for essential matrix, triangulation, and resection with know intrinsic data (pinhole, spherical, …).

    Geometry:

    • Add a 3D plane solver.
    • Add a 2D convex hull computation.

    Graph:

    • Faster method to list triplets of a graph.

    Image:

    • Add integral image computation.
    • Fix a memory leak in JPG image header reader (@jby1993).

    Features:

    • Fix a mask filtering bug with AKAZE features.

    Matching:

    • Simplification of the Hamming distance metric code.

    Bundle Adjustment:

    • Fix usage of control points with Spherical cameras (@joeppie).

    Multiview:

    • Faster Fundamental and Essential solvers.
    • E solver is now usable with bearing vectors.
    • Add a P3P solver (faster and more accurate - CVPR 2017).
    • Simplification of the multiple view triangulation module.

    Software:

    • Add a new binary openMVG_main_ChangeLocalOrigin in order to normalize (re-center) GPS scene to be processed by MVS softwares @hcjghr.

    Third party:

    • Update ceres, cereal, eigen, stlplus, easy_exif.

    General enhancement:

    • 15 PR have been handled.
    • 25 issues/features enhancement have been completed.

    SfM:

    • Incremental SfM supports spherical images,
    • Enhanced SfM report (min, mean, max track length is now exported).

    Build/Continuous integration:

    • Enhanced Visual Studio continuous integration (VS2015/2017).
    • Enhanced GCC and CLANG continuous integration.

    UI:

    • Enhanced GUI control for ui_openMVG_control_points_registration @trylle.

    Code Style:

    • Use more C++11 feature.

    Congrats to @rjanvier, @rperrot, @rwiesenfarth, @hcjghr, @joeppie, @jby1993, @whuaegeanse & al. for their valuable contributions!

    Source code(tar.gz)
    Source code(zip)
    ReleaseV1.3.Yellowtail.WindowsBinaries_VS2015.zip(39.69 MB)
  • v1.2(Jul 11, 2017)

    OpenMVG v1.2 “Sockeye Salmon” is out

    What's new:

    OpenMVG core:

    Cameras:

    • Add a spherical camera model

    Matching:

    • Add a super fast AVX2 L2 distance functor for SIFT matching (5x faster).

    Bundle Adjustment:

    • Add support for the spherical camera model.

    Tracks:

    • Fix a track generation bug
    • Add a new fast method to compute common track between various views.

    System:

    • Add a runtime CPUID instruction set detection.

    Software:

    • Fix ComputeFeatures -n option. Fix the multithread feature extraction.
    • Add triangulation of a match file in ComputeStructureFromKnownPoses (now 2 length tracks can be kept).
    • Add a sfm_data scene clustering approach to split the scene in chunks for MVS post-processing.
    • Add an adjacency matches matrix viewer https://github.com/openMVG/openMVG/issues/831.
    • Add new GUI samples (2 view matches, distortion, VO tracking).

    General enhancement:

    • 31 PR have been handled
    • 58 issues/features enhancement have been completed

    Speed:

    • Improve Incremental SfM speed

    Build/Continuous integration:

    • Faster and less memory hungry compilation (2X faster)
    • Add OSX to the tested compilation and running targets
    • Use codacity to detect codestyle error
    • Add compilation time detection of CPU instruction set support for recent CPU
    • Fix AVX/AVX2 VisualStudio enhanced instruction set support
    • Add support for building a Ubuntu Snap package

    Reproducibility:

    • Random number generation is now seeded

    Code Style:

    • Use more C++11 feature
    • Work on minimizing the includes, use forward declarations.

    Congrats to @bjornpiltz & @hugbed & @rjanvier & @rperrot & @srivathsanmurali & al. for their valuable contributions!

    Source code(tar.gz)
    Source code(zip)
  • v1.1(Jan 4, 2017)

    OpenMVG "Otocinclus" v1.1 is out.

    What's new:

    OpenMVG core:

    Features:

    Sfm:

    • Geodesy: Enable usage of GPS position priors for rigid & non rigid registration doc.

    Software:

    • Geodesy: Enhance GCP registration support
    • Enable the usage of a Cache system to handle large dataset on tiny computers {experimental feature} => see the -c option on main_ComputeFeatures and SfM softwares,
    • Add a feature tracking demo (description based or local window based (KTL)).
    • localization: the binary can now localize a collection of images

    Samples:

    • Add a sample that convert a spherical panoramic images into many pinhole images demo.

    General enhancement:

    Build/Continuous integration:

    • Remove tinyThread optional dependency
    • Use FLANN as a header only library
    • Add a uninstall target

    Speed:

    • Improve Incremental SfM speed

    Memory usage:

    • Bundle Adjustment uses twice less memory,
    • GlobalSfM use less memory (avoid storage of normalized feature coordinates).

    Code Style:

    • Use more C++11 feature (type alias)
    • Work on minimising the includes, use forward declarations, clean #ifdef #define

    Publication: OpenMVG: Open Multiple View Geometry Pierre Moulon, Pascal Monasse, Romuald Perrot, Renaud Marlet RRPR 2016: 1st Workshop on Reproducible Research in Pattern Recognition

    Congrats to @rperrot & @mitjap & @hcjghr & @sebastienchappuis & @bjornpiltz for their valuable contributions!

    Thanks to the community for using the project and doing more & more challenging projects!

    Source code(tar.gz)
    Source code(zip)
  • v1.0(Apr 25, 2016)

    OpenMVG "Pangio kuhlii" v1.0 is out.

    What's new:

    OpenMVG core:

    -Geometry module:

    • Enhanced HalfPhane object's intersection (add bounding box to camera frustum intersection)

    - Cameras:

    • Add a FishEye camera model (nice fit for GoPro images).

    - Features:

    • affine detector (MSER/TBMR),
    • support of feature filtering thanks to image mask easy removal of unwanted part (avoid specific image object like removing the car footprint in street mapping sequences)

    - Multiview:

    • faster rotation averaging,
    • enhanced translation averaging (can handle any combination of n-uplet of relative translations). 2-view estimates can be mixed with 3-view and n-view estimates.

    - SfM/Bundle Adjustment:

    • optional usage of Weighted GCP,
    • precise control over which intrinsic parameters will be optimized (ex ADJUST_FOCAL_LENGTH|ADJUST_DISTORTION => will keep principal point fixed).

    General enhancement:

    Build:

    • full support of ARM target (ready to be used on Raspberry & co.),
    • added continuous integration for VISUAL STUDIO thanks to AppVeyor.

    Speed:

    • AC-RANSAC is 20-40% faster thanks to a residual error quantification,
    • multi-threaded computation of features => see -n option on main_ComputeFeatures,
    • faster Incremental & Global SfM pipelines,
    • faster IO for the matches and sfm_data files.

    Memory usage:

    • make some parts use twice less memory than before.

    OpenMVG exporter:

    • OpenMVG provides its own exporter for OpenMVS.

    Documentation:

    • WIP: doxygen documentation

    Congrats to @ORNis & @rperrot & @cdcseacave for their valuable contributions! Thanks to @igorti & @pyp22 for dataset sharing for validation of the FishEye camera model. Thanks to the community for using the project and realizing more & more challenging projects!

    Source code(tar.gz)
    Source code(zip)
    ReleaseV1.0.Pangio.kuhlii.WindowsBinaries_VS2015.zip(11.83 MB)
  • v0.9(Oct 5, 2015)

    OpenMVG "Corydoras sterbai" v0.9 is out.

    It's recommended to checkout the master tree from the Git rather than download this archive (in order to get submodule updates).

    What's new:

    • New features:
      • New Image Localization API:
        • new demo: find image poses inside an existing SfM reconstruction.
      • Matching API:
        • add a generic CascadeHashing implementation that works on arbitrary descriptor type,
      • Ground control point support:
        • QT GUI application & Rigid Registration to GCP.
      • Automatic pair selection for the sequential/incremental pipeline,
      • New Camera Model:
        • Brown-Conrady Radial3+tangential2.
      • OpenMVG2MVE2:
        • new exporter for MVE2.
      • Add a sample for features & description repeatability evaluation.
    • Enhancement:
      • Build:
        • enhanced cmake compilation (cmake report shows third party library version numbers)
        • add ability to use 3rd libraries as external modules,
        • OpenMVG is more easy to install and use in your own projects: Find_package(OpenMVG)
      • Speed:
        • faster Incremental & Global SfM pipelines,
        • faster matching of image collections.
      • Robustness:
        • enhanced stability of the global SfM pipeline

    Thanks to @baritone, @cbalint13, @davidli43, @fcastan, @KevinCain, @LMescheder, @ORNis, @pranny, @pyp22, @rhiestan, @rperrot, @simogasp for testing and feedback.

    Source code(tar.gz)
    Source code(zip)
  • v0.8.1(May 30, 2015)

    OpenMVG "Paracheirodon innesi diamant" V0.8.1 is out.

    It's recommended to checkout the master tree from the Git rather than download this archive.

    What's new:

    • Speed enhancement:
      • Incremental SfM pipeline: Looking for next image to resect is now done in parallel.
      • Matching of image collection: a bit faster thanks to a better usage of parallelism.
    • Logging:
      • If graphviz is installed, view graphs are exported for the Image matching and the Global SfM processes.
    • Connection with 3rd party application:
      • Extended the BAF ASCII output format for easy usage of OpenMVG SfM scene with 3rd party applications
      • Add a software to export undistorted images
    • API:
      • each openMVG module now use it's own namespace "openMVG::module"
      • Remove the deprecated openMVG/bundle_adjustment module
      • Rewrite some samples to fit the new openMVG/sfm and openMVG/cameras modules
    • Build (experimental):
      • (optional) openMVG can now use external Eigen & Ceres libraries.
      • OpenMVG can now be used as a third party library with Find_package(OpenMVG). (Prefer to use a local openMVG installation path: see BUILD)

    Here the complete list of closed issues: https://github.com/openMVG/openMVG/issues?q=milestone%3A%22Putative+0.8.1%22+is%3Aclosed

    Source code(tar.gz)
    Source code(zip)
  • v0.8(May 12, 2015)

    OpenMVG "Paracheirodon simulans" V0.8 is out.

    It's recommended to checkout master tree from the Git rather than download this archive

    What's new:

    • Introduce a SfM data container and a sfm core module.

    The sfm module is highly flexible and can uses:

    • abstract views (image metadata storage),
    • abstract features & descriptors (image descriptions),
    • abstract camera intrinsic interface (Pinhole, PinholeRadial1/3).

    Sequential & Global SfM pipelines:

    • have been rewritten to fit new data structures
    • are now unit tested!
    • export a HTML SfM statistics report.

    The Global SfM pipeline supports now multiple focal groups (Stéphane Flotron).

    • Features/descriptions:
      • OpenMVG AKAZE implementation (Romuald Perrot).
    • Geometry:
      • Robust triangulation from known camera poses,
      • Camera frustum intersections.
    • Ready to use demo & tutorial python scripts for launching OpenMVG SfM pipelines.

    Improved data serialization and code base. Released camera trajectory accuracy evaluation code (regarding dataset with ground truth).

    Source code(tar.gz)
    Source code(zip)
  • v0.7(May 12, 2015)

    OpenMVG Core Modules

    • Multiview: rotation averaging:
      • make L2 and L1 rotation averaging using the same input interface,
      • faster L2 rotation averaging. minor bug fixes.
    • SFM (general) enable MultiThread BA, some code-refactoring.
    • system introduce a timer class.

    Continuous integration Add code coverage to continuous integration: 90% of openMVG core is unit tested -> https://coveralls.io/r/openMVG/openMVG

    Build/CMake

    • Use a new EXIF parsing library,
    • fix for latest Mac OS clang.
    Source code(tar.gz)
    Source code(zip)
  • v0.6(May 12, 2015)

    OpenMVG Core Modules

    • Multiview:
      • Add an implementation of L1 rotation averaging: ICCV2013 "Efficient and Robust Large-Scale Rotation Averaging" Avishek Chatterjee, Venu Madhav Govindu (Indian Institute of Science).
    • Matching:
      • Add support of HAMMING metric for binary descriptors (can be used in BruteForceMatching)
    • SFM (general)
      • Colored calibration point cloud: reconstruction color is now an option
      • Reconstructions can be exported to support CMVS camera clusters computation
      • Make all related SfM serializations to disk faster
      • Improved SfMViewer (added camera cones display and keyboard navigation)
    • GlobalSfM
      • More stability and improved multi-thread usage
      • Rotation averaging can be done thanks to the L1 or L2 back-end

    Continuous integration Move from drone.io to travis.ci (Now GCC and CLANG compilers are tested)

    Build/CMake UnitTest and Samples build can be set to ON or OFF, resulting in faster build if used in external project.

    Source code(tar.gz)
    Source code(zip)
  • v0.5(May 12, 2015)

    Structure from Motion:

    • Improved accuracy of the sequential chain (ACC12),
    • Add a global SfM chain (ICCV13),
    • Improved reconstruction export (visibility information)

    Multiple View Stereovision:

    • Enable large scale dense point cloud computation with project export to CMVS/PMVS.

    Various:

    • 7-dof rigid registration,
    • Add a Linear Programming module and LInfinity norm optimization solver for geometric computer vision problems.

    Paper implementation: “Multiple-View Geometry under the L infty Norm.” Authors: Fredrik KAHL, Richard HARTLEY. IEEE TRANSACTIONS ON PATTERN ANALYSIS AND MACHINE INTELLIGENCE 2008.

    "Virtual Line Descriptor and Semi-Local Graph Matching Method for Reliable Feature Correspondence". Authors: Zhe LIU and Renaud MARLET, BMVC 2012.

    "Global Multiple-View Color Consistency." Authors: Pierre MOULON, Bruno DUISIT and Pascal MONASSE. CVMP 2013.

    "Global Fusion of Relative Motions for Robust, Accurate and Scalable Structure from Motion." Authors: Pierre MOULON, Pascal MONASSE and Renaud MARLET. ICCV 2013.

    Source code(tar.gz)
    Source code(zip)
  • v0.4(May 12, 2015)

    • Move doc from LaTeX to a Sphinx one (ReadTheDocs)
    • Calibration:
      • automatic computation of approximative focal length,
      • automatic detection of image groups that share common intrinsics,
      • estimation of the Brown radial distortion model during SfM,
      • add export to CMPMVS.
    • better cross platform compilation.
    • updated camera and bundle_adjustment wrapper.
    Source code(tar.gz)
    Source code(zip)
Owner
openMVG
openMVG
C-based/Cached/Core Computer Vision Library, A Modern Computer Vision Library

Build Status Travis CI VM: Linux x64: Raspberry Pi 3: Jetson TX2: Backstory I set to build ccv with a minimalism inspiration. That was back in 2010, o

Liu Liu 6.9k Jun 23, 2022
Open Source Computer Vision Library

OpenCV: Open Source Computer Vision Library Resources Homepage: https://opencv.org Courses: https://opencv.org/courses Docs: https://docs.opencv.org/m

OpenCV 62.4k Jun 27, 2022
ROS wrapper for real-time incremental event-based vision motion estimation by dispersion minimisation

event_emin_ros ROS wrapper for real-time incremental event-based vision motion estimation by dispersion minimisation (EventEMin). This code was used t

Imperial College London 2 Jan 10, 2022
Convert ASF/AMC motion capture files to BVH motion capture files.

About amc2bvh is a utility that converts a pair of files, one in the Acclaim Skeleton Format (ASF) and the other in the Acclaim Motion Capture (AMC) f

Tom Copeland 6 Jun 24, 2022
Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer vision

The MRPT project 1. Introduction Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer v

MRPT 1.4k Jun 22, 2022
Pixel-Perfect Structure-from-Motion with Featuremetric Refinement (ICCV 2021, Oral)

Pixel-Perfect Structure-from-Motion Best student paper award @ ICCV 2021 We introduce a framework that improves the accuracy of Structure-from-Motion

Computer Vision and Geometry Lab 667 Jun 28, 2022
Open source modules to interface Metavision Intelligence Suite with event-based vision hardware equipment

Metavision: installation from source This page describes how to compile and install the OpenEB codebase. For more information, refer to our online doc

PROPHESEE 71 Jun 23, 2022
Tandem - [CoRL 21'] TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo

TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo Lukas Koestler1*    Nan Yang1,2*,†    Niclas Zeller2,3    Daniel Cremers1

TUM Computer Vision Group 624 Jun 23, 2022
The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control.

Robotics Library The Robotics Library (RL) is a self-contained C++ library for rigid body kinematics and dynamics, motion planning, and control. It co

Robotics Library 580 Jun 25, 2022
Assignment skeleton for course on Discrete Differential Geometry (15-458/858)

ddg-exercises This repo contains C++ skeleton code for course assignments from Discrete Differential Geometry (15-458/858). For the JavaScript version

Geometry Collective 67 May 24, 2022
Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation"

SSM-VLN Code and Data for our CVPR 2021 paper "Structured Scene Memory for Vision-Language Navigation". Environment Installation Download Room-to-Room

hanqing 32 Jun 24, 2022
Episodic Transformer (E.T.) is a novel attention-based architecture for vision-and-language navigation.

Episodic Transformer (E.T.) is a novel attention-based architecture for vision-and-language navigation. E.T. is based on a multimodal transformer that encodes language inputs and the full episode history of visual observations and actions.

Alex Pashevich 51 Jun 2, 2022
deep learning vision detector/estimator

libopenvision deep learning visualization C library Prerequest ncnn Install openmp vulkan(optional) Build git submodule update --init --recursuve cd b

Prof Syd Xu 2 Feb 8, 2022
Homework of RoboWalker Vision team of USTC for DJI Robomaster competition.

USTC RoboWalker战队 视觉组2022练习作业 “极限犹可突破,至臻亦不可止。” 作业列表 0. 编程基础教程 Hello World 针对没有学过C++/Python、没有太多相关编程经验的新同学的C++ & Python编程入门教程。 0. Git基础教程 Hello Git 学习世

Zhehao Li 4 Feb 20, 2022
A tiny C++11 library for reading BVH motion capture data

bvh11 A tiny C++11 library for reading (and writing) BVH motion capture data. Dependencies C++11 standard library Eigen 3 http://eigen.tuxfamily.org/

Yuki Koyama 32 May 23, 2022
Cartographer is a system that provides real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platforms and sensor configurations.

Cartographer Purpose Cartographer is a system that provides real-time simultaneous localization and mapping (SLAM) in 2D and 3D across multiple platfo

Cartographer 6k Jul 1, 2022
A coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations.

A coupling library for partitioned multi-physics simulations, including, but not restricted to fluid-structure interaction and conjugate heat transfer simulations.

preCICE 426 Jun 29, 2022
A method to estimate 3D hand gestures from 3D body motion input in body languages.

Body2Hands: Learning to Infer 3D Hands from Conversational Gesture Body Dynamics (CVPR 2021) Project page This repository contains a pytorch implement

Facebook Research 79 May 31, 2022