The official implementation of our CVPR 2021 paper - Hybrid Rotation Averaging: A Fast and Robust Rotation Averaging Approach

Overview

Graph Optimizer   Build Status License

This repo contains the official implementation of our CVPR 2021 paper - Hybrid Rotation Averaging: A Fast and Robust Rotation Averaging Approach. This library contains not only rotation averaging solvers, but also some popular methods in 3D vision, such as translation averaging, clustering, etc. The library is designed to deal with large scale optimization problems, and is easy to extend. Feel free to contribute to this project.

1. Features

  • A library which solves the optimization problems in 3D vision.
  • A template-based graph module which is easy to extend and to manipulate graph structures.
  • Rotation averaging solvers achieves state-of-the-art.
  • Translation averaging solvers (LUD, BATA).
  • Clustering methods (coming soon).
  • Bundle adjustment (needs more time to prepare).

2. Compilation

The library is compiled and tested on Ubuntu 16.04. We would like to support more platforms in the future.

2.1 Basic Requirements

This project requires Eigen 3.2. And Ceres 1.14.0 is currently used for stable conversions between different rotation representations (I'm managing on removing this dependency). You can install all the dependencies through the ./scripts/dependencies.sh.

bash ./scripts/dependencies.sh

2.3 Build GraphOptim

cd GraphOptim
mkdir build && cd build
cmake ..
make -j8

3. Running Examples

3.1 Rotation Averaging

./build/bin/rotation_estimator --g2o_filename=../../data/synthetic/20_2.g2o

You can also try other g2o files.

3.2 Translation Averaging

The translation averaging methods are decoupled from another project, and are not fully tested.

./build/bin/position_estimator --g2o_filename=../../data/synthetic/20_2.g2o

Contact

If you have any questions, contact me by [email protected].

You might also like...
ICRA 2021 - Robust Place Recognition using an Imaging Lidar

Robust Place Recognition using an Imaging Lidar A place recognition package using high-resolution imaging lidar. For best performance, a lidar equippe

Source Code for SIGGRAPH Asia 2021 Paper "Ensemble Denoising for Monte Carlo Renderings"

Ensemble Denoising Source Code for SIGGRAPH Asia 2021 Paper Ensemble Denoising for Monte Carlo Renderings. Paper | Code | Talk Slides Dependencies A C

Source Code for SIGGRAPH Asia 2021 Paper "Ensemble Denoising for Monte Carlo Renderings"

Ensemble Denoising Source Code for SIGGRAPH Asia 2021 Paper Ensemble Denoising for Monte Carlo Renderings. Paper | Code | Talk Slides Dependencies A C

the code of paper
the code of paper "Optimizing Global Injectivity for Constrained Parameterization" (SIGGRAPH Asia 2021)

Optimizing Global Injectivity for Constrained Parameterization Xingyi Du, Danny M. Kaufman, Qingnan Zhou, Shahar Kovalsky, Yajie Yan, Noam Aigerman, T

Fast and robust template matching with majority neighbour similarity and annulus projection transformation
Fast and robust template matching with majority neighbour similarity and annulus projection transformation

A-MNS_TemplateMatching This is the official code for the PatternRecognition2020 paper: Fast and robust template matching with majority neighbour simil

New ultra super robust and fast programming language, fully supportable by G++ and Clang

Cplusplusplus New ultra super robust and fast programming language, fully supportable by G++ and Clang How to use: Just write #include C+++.h in you

Fast and robust certifiable relative pose estimation

Fast and Robust Relative Pose Estimation for Calibrated Cameras This repository contains the code for the relative pose estimation between two central

Fast and robust face tracking addon for openFrameworks based on YOLO5Face

ofxFaceTracker3 Working in progress Fast and robust face tracking addon for openFrameworks based on YOLO5Face and ONNX Runtime. Features Fast and robu

A framework for generic hybrid two-party computation and private inference with neural networks

MOTION2NX -- A Framework for Generic Hybrid Two-Party Computation and Private Inference with Neural Networks This software is an extension of the MOTI

Comments
  • Inputs of Translation Averaging Need Absolute Rotation of Each View and Relative Pose of Piar Views

    Inputs of Translation Averaging Need Absolute Rotation of Each View and Relative Pose of Piar Views

    Hi, Thanks your great work! There is a bug in your code: Description: Inputs of Translation Averaging Need Absolute Rotation of Each View and Relative Pose of View Pair , But in examples/position_estimator.cc: 56 view_graph.ReadG2OFile(g2o_filename); you only convey relative rotation and relative translation.

    So, the following codes need to be corrected:

    edge.cc:
    replace : // node_t src = kInvalidNodeId; // node_t dst = kInvalidNodeId; with: ImageNode src; ImageNode dst; and correct construction fun correspondingly, view_graph.cc: ViewGraph::ReadG2OFile, add absolute rotation to edge.src and edge.dst. graph.inl: correct AddEdge and AddNodes etc. and some test functions.

    opened by qingchenwuhou 2
  • rotation_estimator  std::bad_alloc

    rotation_estimator std::bad_alloc

    @AIBluefisher HI,when I run the rotation_estimator ,the error like this: ./build/bin/rotation_estimator --g2o_filename=./data/synthetic/20_2.g2o I0120 19:03:26.052269 18845 hybrid_rotation_estimator.cc:94] Estimating Rotations Using LagrangeDual terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc Aborted (core dumped) also when I run the ./lagrange_dual_rotation_estimator_test dual_rotation_estimator_test Running main() from gtest_main.cc [==========] Running 15 tests from 1 test case. [----------] Global test environment set-up. [----------] 15 tests from LagrangeDualRotationAveragingTest [ RUN ] LagrangeDualRotationAveragingTest.smallTestNoNoise WARNING: Logging before InitGoogleLogging() is written to STDERR I0120 19:07:51.680837 19045 lagrange_dual_rotation_estimator_test.cc:88] Estimating Global Orientations using Lagrange Dual... free(): invalid pointer Aborted (core dumped)

    opened by coder12333444 1
  • OpenMVG related code in this repo

    OpenMVG related code in this repo

    Thank you for releasing the code related to your paper.

    I noticed that there are multiple files that are coming from OpenMVG code repository.

    | Topic | This Repo | OpenMVG | |-|-|-| | SVG | https://github.com/AIBluefisher/GraphOptim/blob/main/src/graph/svg_drawer.h | https://github.com/openMVG/openMVG/blob/develop/src/third_party/vectorGraphics/svgDrawer.hpp | |triplet| https://github.com/AIBluefisher/GraphOptim/blob/main/src/graph/triplet_extractor.h| https://github.com/openMVG/openMVG/blob/develop/src/openMVG/graph/triplet_finder.hpp | |ColorGradient|https://github.com/AIBluefisher/GraphOptim/blob/main/src/graph/color_gradient.h|https://github.com/openMVG/openMVG/blob/develop/src/openMVG/graphics/color_gradient.hpp| |l1 solver|https://github.com/AIBluefisher/GraphOptim/blob/main/src/solver/l1_solver.h|https://github.com/openMVG/openMVG/blob/develop/src/openMVG/numeric/l1_solver_admm.hpp| ...

    There are also other files that have the same issue https://github.com/AIBluefisher/GraphOptim/blob/main/src/util/alignment.h ...

    There is also code from other repositories like THeiaSfM here https://github.com/sweeneychris/TheiaSfM/blob/master/src/theia/sfm/global_pose_estimation/least_unsquared_deviation_position_estimator.h https://github.com/AIBluefisher/GraphOptim/blob/main/src/translation_averaging/lud_position_estimator.h

    Please keep the initial copyright notice and respect the work that has been done by the open-source community before you. Changing the name of the file is not enough to claim ownership of it.

    I appreciate that you see the direct value of OpenMVG code and are leveraging it for other work, but the opensource community can thrive better if we support each other, and keep initial copyrights and licenses in the file we are reusing.

    cc @laurentkneip

    opened by pmoulon 1
Owner
Chenyu
Not a coder!
Chenyu
The repository contains our dataset and C++ implementation of the CVPR 2022 paper, Geometric Structure Preserving Warp for Natural Image Stitching.

Geometric Structure Preserving Warp for Natural Image Stitching This repository contains our dataset and C++ implementation of the CVPR 2022 paper, Ge

null 18 Nov 18, 2022
Python and C++ implementation of "MarkerPose: Robust real-time planar target tracking for accurate stereo pose estimation". Accepted at LXCV Workshop @ CVPR 2021.

MarkerPose: Robust Real-time Planar Target Tracking for Accurate Stereo Pose Estimation This is a PyTorch and LibTorch implementation of MarkerPose: a

Jhacson Meza 47 Nov 18, 2022
This is the code of our paper An Efficient Training Approach for Very Large Scale Face Recognition or F²C for simplicity.

Fast Face Classification (F²C) This is the code of our paper An Efficient Training Approach for Very Large Scale Face Recognition or F²C for simplicit

null 33 Jun 27, 2021
Official PyTorch Code of GrooMeD-NMS: Grouped Mathematically Differentiable NMS for Monocular 3D Object Detection (CVPR 2021)

GrooMeD-NMS: Grouped Mathematically Differentiable NMS for Monocular 3D Object Detection GrooMeD-NMS: Grouped Mathematically Differentiable NMS for Mo

Abhinav Kumar 76 Nov 6, 2022
HybridPose: 6D Object Pose Estimation under Hybrid Representation (CVPR 2020)

HybridPose: 6D Object Pose Estimation under Hybrid Representations This repository contains authors' implementation of HybridPose: 6D Object Pose Esti

SONG, Chen 358 Nov 22, 2022
The official implementation of the research paper "DAG Amendment for Inverse Control of Parametric Shapes"

DAG Amendment for Inverse Control of Parametric Shapes This repository is the official Blender implementation of the paper "DAG Amendment for Inverse

Elie Michel 155 Sep 21, 2022
[CVPR 2021] NormalFusion: Real-Time Acquisition of Surface Normals for High-Resolution RGB-D Scanning

NormalFusion: Real-Time Acquisition of Surface Normals for High-Resolution RGB-D Scanning Project Page | Paper | Supplemental material #1 | Supplement

KAIST VCLAB 48 Jul 14, 2022
DeepI2P - Image-to-Point Cloud Registration via Deep Classification. CVPR 2021

#DeepI2P: Image-to-Point Cloud Registration via Deep Classification Summary Video PyTorch implementation for our CVPR 2021 paper DeepI2P. DeepI2P solv

Li Jiaxin 136 Nov 17, 2022
NLP-based perching trajectory generation presented in our paper "Perception-Aware Perching on Powerlines with Multirotors".

Perception-Aware Perching on Powerlines with Multirotors This repo contains the code for the NLP-based perching trajectory generation presented in our

null 23 Nov 21, 2022