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

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.

Comments
  • 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...........

  • 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?

  • 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

  • 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

  • [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

  • 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
    
  • 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

  • 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...

  • 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.

  • 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).

  • [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
  • 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.

  • openMVG_main_ColHarmonize function crashes even for 3 input images

    openMVG_main_ColHarmonize function crashes even for 3 input images

    Hey, I am facing a problem with openMVG_main_ColHarmonize function . I am running the following script:

    path=$1
    reference_img_id=$2
    
    openMVG_main_SfMInit_ImageListing -i $path/images/ -o $path/matches -k "4375.318988319742;0.0;2736.0;0.0;4375.318988319742;1824.0;0.0;0.0;1.0"
    openMVG_main_ComputeFeatures -i $path/matches/sfm_data.json -o $path/matches 
    openMVG_main_ComputeMatches -i $path/matches/sfm_data.json -o $path/matches/matches.h.bin -p $path/matches/pair.txt
    openMVG_main_ColHarmonize -i $path/matches/sfm_data.json -m $path/matches/matches.h.bin -o $path/output -s 1 -r $reference_img_id 
    

    And the color harmonize function crashes:

    openMVG_main_ColHarmonize: /home/ubuntu/mradul/mvg/openMVG/src/third_party/eigen/Eigen/src/Core/DenseStorage.h:147: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 64>::plain_array() [with T = double; int Size = 256; int MatrixOrArrayOptions = 0]: Assertion `(internal::UIntPtr(eigen_unaligned_array_assert_workaround_gcc47(array)) & (63)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
    run.sh: line 7: 10154 Aborted                 (core dumped) openMVG_main_ColHarmonize -i $path/matches/sfm_data.json -m $path/matches/matches.h.bin -o $path/output -s 1 -r $reference_img_id
    

    Full log is this:

    mradul:~/mradul/color-equalization/global_color_consistency/tech_park$ bash run.sh /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2 1
    INFO: [main_SfMInit_ImageListing.cpp:197]  You called : openMVG_main_SfMInit_ImageListing
    --imageDirectory /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/images/
    --sensorWidthDatabase 
    --outputDirectory /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/matches
    --focal -1
    --intrinsics 4375.318988319742;0.0;2736.0;0.0;4375.318988319742;1824.0;0.0;0.0;1.0
    --camera_model 3
    --group_camera_model 1
    --use_pose_prior 0
    --prior_weights 1.0;1.0;1.0
    --gps_to_xyz_method 0
    INFO: [loggerprogress.hpp:79] [- Listing images -] 100%
    INFO: [main_SfMInit_ImageListing.cpp:478] SfMInit_ImageListing report:
    listed #File(s): 3
    usable #File(s) listed in sfm_data: 3
    usable #Intrinsic(s) listed in sfm_data: 1
    INFO: [main_ComputeFeatures.cpp:121]  You called : 
    openMVG_main_ComputeFeatures
    --input_file /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/matches/sfm_data.json
    --outdir /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/matches
    --describerMethod AKAZE_FLOAT
    --upright 0
    --describerPreset NORMAL
    --force 0
    --numThreads 0
    
    INFO: [loggerprogress.hpp:79] [- EXTRACT FEATURES -] 100%
    INFO: [main_ComputeFeatures.cpp:344] Task done in (s): 0
    INFO: [main_ComputeMatches.cpp:114]  You called : 
    openMVG_main_ComputeMatches
    --input_file /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/matches/sfm_data.json
    --output_file /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/matches/matches.h.bin
    --pair_list /home/ubuntu/mradul/color-equalization/global_color_consistency/tech_park/test2/matches/pair.txt
    Optional parameters:
    --force 0
    --ratio 0.8
    --nearest_matching_method ANNL2
    --cache_size unlimited
    --preemptive_feature_used/count 0 / 200
    INFO: [loggerprogress.hpp:79] [- Regions Loading -] 100%
    INFO: [main_ComputeMatches.cpp:217]  - PUTATIVE MATCHES - 
    INFO: [main_ComputeMatches.cpp:226]      PREVIOUS RESULTS LOADED; #pair: 3
    INFO: [main_ComputeMatches.cpp:366] #Putative pairs: 3
    INFO: [graph_stats.hpp:53] Graph statistics:
            #nodes: 3
            #cc: 1
            #singleton: 0
            Node degree statistics: min: 2, max: 2, mean: 2, median: 2
    Global Color Harmonization
    
    INFO: [colorHarmonizeEngineGlobal.cpp:529] 
    ColorHarmonizationEngineGlobal::CleanGraph() :: => connected Component cardinal: 1
    INFO: [colorHarmonizeEngineGlobal.cpp:589] 
    Cardinal of nodes: 3
    Cardinal of edges: 3
    INFO: [colorHarmonizeEngineGlobal.cpp:195] 
     Remaining cameras after CC filter : 
    3 from a total of 3
    INFO: [colorHarmonizeEngineGlobal.cpp:222] Current edge : EP-00-00012_0342_0033.JPG     EP-00-00012_0342_0034.JPG
    INFO: [colorHarmonizeEngineGlobal.cpp:222] Current edge : EP-00-00012_0342_0033.JPG     EP-00-00012_0342_0035.JPG
    INFO: [colorHarmonizeEngineGlobal.cpp:222] Current edge : EP-00-00012_0342_0034.JPG     EP-00-00012_0342_0035.JPG
    INFO: [colorHarmonizeEngineGlobal.cpp:329] 
     -- 
     SOLVE for color consistency with linear programming
     --
    INFO: [colorHarmonizeEngineGlobal.cpp:376] 
     ColorHarmonization solving on a graph with: 3 edges took (s): 0
    LInfinity fitting error: 
    - for the red channel is: 3.60135 gray level(s)
    - for the green channel is: 3.7 gray level(s)
    - for the blue channel is: 5.14727 gray level(s)
    INFO: [colorHarmonizeEngineGlobal.cpp:384] 
    
    Found solution_r:
    0.986486 -6.18243 1 0 1.01363 1.72703 3.60135 INFO: [colorHarmonizeEngineGlobal.cpp:387] 
    
    Found solution_g:
    0.971429 -4.75714 1 0 1.00151 3.01792 3.7 INFO: [colorHarmonizeEngineGlobal.cpp:390] 
    
    Found solution_b:
    0.94859 -0.765734 1 0 0.958957 7.92708 5.14727 INFO: [colorHarmonizeEngineGlobal.cpp:393] 
    
    There is :
    3 images to transform.
    openMVG_main_ColHarmonize: /home/ubuntu/mradul/mvg/openMVG/src/third_party/eigen/Eigen/src/Core/DenseStorage.h:147: Eigen::internal::plain_array<T, Size, MatrixOrArrayOptions, 64>::plain_array() [with T = double; int Size = 256; int MatrixOrArrayOptions = 0]: Assertion `(internal::UIntPtr(eigen_unaligned_array_assert_workaround_gcc47(array)) & (63)) == 0 && "this assertion is explained here: " "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" " **** READ THIS WEB PAGE !!! ****"' failed.
    run.sh: line 7:  4602 Aborted                 (core dumped) openMVG_main_ColHarmonize -i $path/matches/sfm_data.json -m $path/matches/matches.h.bin -o $path/output -s 1 -r $reference_img_id
    

    There is just three input colored images with the following pair.txt:

    0 1
    1 2
    2 0
    

    The cleaned graph created is:

    graph 1 {
    node [shape=circle]
     n1 --  n2
     n0 --  n2
     n0 --  n1
    }
    

    For some of the image cases it worked, but for most of the images, it is crashing.

  • collect2: error: ld returned 1 exit status

    collect2: error: ld returned 1 exit status

    I have the following error, I need to find a solution.

    Linking CXX executable ../../Linux-x86_64-RELEASE/openMVG_main_SplitMatchFileIntoMatchFiles /usr/bin/ld: cannot find -llib_clp /usr/bin/ld: cannot find -llib_OsiClpSolver /usr/bin/ld: cannot find -llib_CoinUtils collect2: error: ld returned 1 exit status make[2]: *** [software/SfM/CMakeFiles/openMVG_main_SplitMatchFileIntoMatchFiles.dir/build.make:120: Linux-x86_64-RELEASE/openMVG_main_SplitMatchFileIntoMatchFiles] Error 1 make[1]: *** [CMakeFiles/Makefile2:2069: software/SfM/CMakeFiles/openMVG_main_SplitMatchFileIntoMatchFiles.dir/all] Error 2 make: *** [Makefile:130: all] Error 2

  • The use of POS prior in bundle adjustment

    The use of POS prior in bundle adjustment

    We have noticed that there is a huge difference in time consumption between using the POS prior and not using the POS prior in bundle adjustment . Our experimental results are as follows: 2776 pieces are used for testing, and it takes 861s to use the POS prior, but only 196s to not use the POS prior. The experimental results show that the final accuracy of two experiment is similar, and the final 3D points are about 14000 less, and the number of registered images is also 7 less, which is almost negligible. We also obtained a similar result a on two other datasets with sizes of 5125 and 8123. My question is, what is the purpose of using POS prior in the final bundle adjustment step (I noticed that your code comments explain that this can be more robust, but it seems that there is not much difference between the two).

  • Non-deterministic behavior (Apple vs Ubuntu)

    Non-deterministic behavior (Apple vs Ubuntu)

    Hello,

    To begin with, great respect for fantastic work which is OpenMVG.

    While using SIFT_Anatomy_Image_describer I discovered a discrepancy when it comes to the output it produces - the results are consistent on the same platform, however, they start to differ when running on a different device.

    The problem can be reproduced by running a particular test - openMVG_test_sift which yields slightly different output image (gaussian_octave_*.png) on an M1 Mac and on a generic Ubuntu PC, with the same image on the input.

    I include my Mac/Ubuntu build scripts here: https://github.com/migr8/openmvg-build-scripts/ The README in the root of the repository describes the exact usage. The test.sh script will run this specific test case and print MD5 hash of the output gaussian_octave images - they are different based on different platforms:

    # Ubuntu:
    Image hashes & sizes:
    7237fd0531cf3af860b70070048ef55b  gaussian_octave_0_0.png
    959bbb3f5f6507914bff16129d3c39e1  gaussian_octave_0_1.png
    e959d017a202bd195452843d7a03e871  gaussian_octave_0_2.png
    -rw-rw-r-- 1 dbeef dbeef 68131 cze  7 11:22 gaussian_octave_0_0.png
    -rw-rw-r-- 1 dbeef dbeef 61927 cze  7 11:22 gaussian_octave_0_1.png
    -rw-rw-r-- 1 dbeef dbeef 56697 cze  7 11:22 gaussian_octave_0_2.png
    
    # Mac M1 (Apple Clang):
    Image hashes & sizes:
    7522636b1b967f43e5403d1b46b0c5ee  gaussian_octave_0_0.png
    d78d803126c5425c3c2ebbadcf7236bb  gaussian_octave_0_1.png
    1fa2913d3d41f89f68a3e7fce93602b1  gaussian_octave_0_2.png
    -rw-r--r-- 1 dbeef staff 68133 Jun  7 10:58 gaussian_octave_0_0.png
    -rw-r--r-- 1 dbeef staff 61927 Jun  7 10:58 gaussian_octave_0_1.png
    -rw-r--r-- 1 dbeef staff 56705 Jun  7 10:58 gaussian_octave_0_2.png
    
    # Mac M1 (GNU GCC 12)
    Image hashes & sizes:
    d0467e3aa5b6352889dc43c7ed384d39  gaussian_octave_0_0.png
    ef2c73ecfe0a3cb28888840bbbfc42ad  gaussian_octave_0_1.png
    ae5417914c6fa43630e501e31806f4ae  gaussian_octave_0_2.png
    -rw-r--r-- 1 dbeef staff 68154 Jun  7 11:42 gaussian_octave_0_0.png
    -rw-r--r-- 1 dbeef staff 61929 Jun  7 11:42 gaussian_octave_0_1.png
    -rw-r--r-- 1 dbeef staff 56733 Jun  7 11:42 gaussian_octave_0_2.png
    
    # MacBook Pro 2018 Intel Core i7 (Apple Clang)
    Image hashes & sizes:
    7012158e0075c48553538c765fa71a3a gaussian_octave_0_0.png
    ce810921eac49822a967c48adc43d40f gaussian_octave_0_1.png
    e959d017a202bd195452843d7a03e871 gaussian_octave_0_2.png
    -rw-r--r-- 1 me staff 68135 Jun 7 11:49 gaussian_octave_0_0.png
    -rw-r--r-- 1 me staff 61929 Jun 7 11:49 gaussian_octave_0_1.png
    -rw-r--r-- 1 me staff 56697 Jun 7 11:49 gaussian_octave_0_2.png
    

    I traced similar reports on the OpenMVG issue page:

    https://github.com/openMVG/openMVG/issues/1707 https://github.com/openMVG/openMVG/issues/1966 https://github.com/openMVG/openMVG/issues/471 https://github.com/openMVG/openMVG/issues/1707 https://github.com/openMVG/openMVG/issues/2030 https://github.com/openMVG/openMVG/issues/1928 https://github.com/openMVG/openMVG/issues/1840 https://github.com/openMVG/openMVG/issues/1128

    Most of them conclude that this is due to OMP parallelization. I made sure no OMP is used through:

    • Explicitly disabling OMP when building Ceres
    • Explicitly disabling OMP when building OpenMVG
    • Exporting OMP_NUM_THREADS=1 when running the test

    However, the result is still the same, that is - they differ.

    As a note, contents of the patches directory on the build scripts repo could be upstreamed to the OpenMVG repository - I solved the problem of building on an M1 Mac (running OpenMVG on it right now :)) and even targeting iOS through ios-cmake toolchain file - which solves relevant issues:

    https://github.com/openMVG/openMVG/issues/2024 https://github.com/openMVG/openMVG/issues/1954 https://github.com/openMVG/openMVG/issues/1864 https://github.com/openMVG/openMVG/issues/1820

    In total, I ran OpenMVG on x86_64 Windows, x86_64 Ubuntu, ARM64 Android, ARM64 iOS, ARM64 Mac and x86_64 Mac - all to see how the output differs across the platforms.

    Results are, that ~~all Apple results are consistent~~ (scratch that, see Intel vs ARM Mac above), and all non-Apple results are consistent - which would suggest this has something to do specifically with Apple.

    Another path I explored is compiling OpenMVG on Mac using GCC 12 - different results than using clang, but not the same as on non-Apple devices.

    Also, I tested how setting constant seed through std::srand will affect the test - it does not.

    Regards, Daniel

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

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

Jun 16, 2022
ROS wrapper for real-time incremental event-based vision motion estimation by dispersion minimisation
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

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

May 24, 2022
Mobile Robot Programming Toolkit (MRPT) provides C++ libraries aimed at researchers in mobile robotics and computer vision
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

Jun 22, 2022
Pixel-Perfect Structure-from-Motion with Featuremetric Refinement (ICCV 2021, Oral)
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

Jun 15, 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

Jun 1, 2022
Tandem - [CoRL 21'] TANDEM: Tracking and Dense Mapping in Real-time using Deep Multi-view Stereo
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

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

Jun 17, 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

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

May 8, 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.

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.

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

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 学习世

Feb 20, 2022
A tiny C++11 library for reading BVH motion capture data
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/

May 23, 2022
A method to estimate 3D hand gestures from 3D body motion input in body languages.
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

May 31, 2022
Extracts high-precision mouse/pointer motion data on Windows. Good for drawing software!
Extracts high-precision mouse/pointer motion data on Windows. Good for drawing software!

window_mouse_queue This is a wrapper for GetMouseMovePointsEx function that allows to extract high-precision mouse/pointer motion data on Windows. Goo

Feb 21, 2022
Stochastic Scene-Aware Motion Prediction
Stochastic Scene-Aware Motion Prediction

Stochastic Scene-Aware Motion Prediction [Project Page] [Paper] Description This repository contains the runtime Unity code for SAMP. For the training

May 4, 2022