Code Monkey home page Code Monkey logo

magsac's People

Contributors

akaszynski avatar danini avatar ducha-aiki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

magsac's Issues

Rigid Transformation

Thanks a lot for your great work and code, do you have a plan to add support for rigid transformation estimation?

Best,
Xuyang

Questions about installation

  1. There are pre-compiled wheels for Windows and Linux for Python 3.8 - 3.11 that you can install with: "pip install magsac"
    for this install method, my python version is 3.8.15,but failed, Error reported below:
    ERROR: Could not find a version that satisfies the requirement magsac (from versions: none)
    ERROR: No matching distribution found for magsac
  2. $ git clone https://github.com/danini/magsac --recursive
    $ cd build
    $ cmake ..
    $ make
    for this install method,In the downloaded project directory, I did not find the bulid folder, so I created a new one, and I replaced the ellipsis with the project path. After cmake, a file CMakeCache.txt and a folder CMakeFiles were generated, and then I did not know what to do,I did not see the makefile file.

Compare to A-Contrario model

Interesting paper, Dani, but I'm very surprised you do not compare your method to existing parameter-free RANSAC methods. For example it would be very useful to compare MAGSAC against the very successful method developed by @pmoulon:
P. Moulon, P. Monasse, R. Marlet. Adaptive Structure from Motion with a contrario mode estimation. ACCV 2012

Magsac package for windows10 please

I tried building it for windows10 using VC-2015. But ran in to issues because of gflags.
It would be great if author can release windows package or even package installable via pip .

Pip installation not working

Hi,

Thanks for your great work on magsac. I am trying to install magsac using pip and python 3.8. Per the pip output, I successfully installed pymagsac==0.2.0. I've done this using the command pip3 install -e . as well as the command pip3 install pymagsac==0.2.0. Side note: the command in the github site pip3 install magsac produces the error ERROR: No matching distribution found for magsac

However, when importing in python, I get the following error:
>>> import pymagsac Traceback (most recent call last): File "<stdin>", line 1, in <module> File "magsac/src/pymagsac/__init__.py", line 1, in <module> from .pymagsac import * ModuleNotFoundError: No module named 'pymagsac.pymagsac'

For what it's worth, I was unable to install using python3 ./setup.py install or cmake due to local issues, so I can't say for sure those would have worked for me.

Thanks for your support, apologies if I've missed something obvious!
Chris

make failed

hi @danini

CMAKE( it look fine)
-- The CXX compiler identification is GNU 9.3.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found OpenCV: /home/artcs/anaconda3/envs/pymagsac (found version "3.4.2")
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/artcs/Downloads/magsac-master/build

but when I run make it shows:

[ 10%] Building CXX object CMakeFiles/MAGSAC.dir/include/gamma_values.cpp.o
[ 20%] Building CXX object CMakeFiles/MAGSAC.dir/include/magsac.cpp.o
In file included from /home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/GCoptimization.h:109,
from /home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/estimator.h:37,
from /home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/model.h:39,
from /home/artcs/Downloads/magsac-master/include/magsac.h:6,
from /home/artcs/Downloads/magsac-master/include/magsac.cpp:1:
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h: In member function ‘void Energy<captype, tcaptype, flowtype>::add_term3(Energy<captype, tcaptype, flowtype>::Var, Energy<captype, tcaptype, flowtype>::Var, Energy<captype, tcaptype, flowtype>::Var, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value)’:
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h:262:17: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
262 | register Value pi = (E000 + E011 + E101 + E110) - (E100 + E010 + E001 + E111);
| ^~
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h:263:17: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
263 | register Value delta;
| ^~~~~
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h:264:15: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
264 | register Var u;
| ^
[ 30%] Building CXX object CMakeFiles/MAGSAC.dir/include/model_score.cpp.o
[ 40%] Building CXX object CMakeFiles/MAGSAC.dir/src/main.cpp.o
In file included from /home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/GCoptimization.h:109,
from /home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/estimator.h:37,
from /home/artcs/Downloads/magsac-master/include/magsac_utils.h:8,
from /home/artcs/Downloads/magsac-master/src/main.cpp:15:
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h: In member function ‘void Energy<captype, tcaptype, flowtype>::add_term3(Energy<captype, tcaptype, flowtype>::Var, Energy<captype, tcaptype, flowtype>::Var, Energy<captype, tcaptype, flowtype>::Var, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value, Energy<captype, tcaptype, flowtype>::Value)’:
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h:262:17: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
262 | register Value pi = (E000 + E011 + E101 + E110) - (E100 + E010 + E001 + E111);
| ^~
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h:263:17: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
263 | register Value delta;
| ^~~~~
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/energy.h:264:15: warning: ISO C++17 does not allow ‘register’ storage class specifier [-Wregister]
264 | register Var u;
| ^
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:25:
/home/artcs/Downloads/magsac-master/include/estimators.h: At global scope:
/home/artcs/Downloads/magsac-master/include/estimators.h:83:22: error: ‘Model’ has not been declared
83 | bool isValidModel(Model& model_,
| ^~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:136:30: error: ‘Model’ has not been declared
136 | inline bool applyDegensac(Model& model_, // The input model to be tested
| ^~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h: In member function ‘double magsac::estimator::FundamentalMatrixEstimator<MinimalSolverEngine, NonMinimalSolverEngine>::residualForScoring(const cv::Mat&, const gcransac::Model&) const’:
/home/artcs/Downloads/magsac-master/include/estimators.h:38:22: warning: there are no arguments to ‘squaredSymmetricEpipolarDistance’ that depend on a template parameter, so a declaration of ‘squaredSymmetricEpipolarDistance’ must be available [-fpermissive]
38 | return std::sqrt(squaredSymmetricEpipolarDistance(point
, model
.descriptor));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h: In member function ‘bool magsac::estimator::FundamentalMatrixEstimator<MinimalSolverEngine, NonMinimalSolverEngine>::isValidModel(int&, const cv::Mat&, const std::vector&, const size_t*, double, bool&) const’:
/home/artcs/Downloads/magsac-master/include/estimators.h:96:48: error: request for member ‘descriptor’ in ‘model
’, which is of non-class type ‘int’
96 | const Eigen::Matrix3d &descriptor = model
.descriptor; // The decriptor of the current model
| ^~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:97:36: warning: there are no arguments to ‘sampleSize’ that depend on a template parameter, so a declaration of ‘sampleSize’ must be available [-fpermissive]
97 | constexpr size_t sample_size = sampleSize(); // Size of a minimal sample
| ^~~~~~~~~~
In file included from /home/artcs/anaconda3/envs/pymagsac/include/opencv2/core.hpp:52,
from /home/artcs/Downloads/magsac-master/src/main.cpp:9:
/home/artcs/Downloads/magsac-master/include/estimators.h:100:41: error: ‘minimum_inlier_ratio_in_validity_check’ was not declared in this scope
100 | MAX(sample_size, inliers_.size() * minimum_inlier_ratio_in_validity_check);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:25:
/home/artcs/Downloads/magsac-master/include/estimators.h:108:10: warning: there are no arguments to ‘squaredSymmetricEpipolarDistance’ that depend on a template parameter, so a declaration of ‘squaredSymmetricEpipolarDistance’ must be available [-fpermissive]
108 | if (squaredSymmetricEpipolarDistance(data_.row(idx), descriptor) < squared_threshold)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:122:9: error: ‘use_degensac’ was not declared in this scope
122 | if (use_degensac)
| ^~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h: In member function ‘bool magsac::estimator::FundamentalMatrixEstimator<MinimalSolverEngine, NonMinimalSolverEngine>::applyDegensac(int&, const cv::Mat&, const std::vector&, const size_t*, double, bool&) const’:
/home/artcs/Downloads/magsac-master/include/estimators.h:158:13: error: request for member ‘descriptor’ in ‘model
’, which is of non-class type ‘int’
158 | model
.descriptor.block<3, 3>(0, 0);
| ^~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:176:30: error: request for member ‘descriptor’ in ‘model_’, which is of non-class type ‘int’
176 | epipolar_cross * model_.descriptor;
| ^~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:235:29: warning: there are no arguments to ‘sampleSize’ that depend on a template parameter, so a declaration of ‘sampleSize’ must be available [-fpermissive]
235 | for (size_t i = 0; i < sampleSize(); ++i)
| ^~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:269:30: error: ‘squared_homography_threshold’ was not declared in this scope
269 | if (squared_residual < squared_homography_threshold)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:289:38: error: ‘HomographyEstimator’ in namespace ‘magsac::estimator’ does not name a template type
289 | static const magsac::estimator::HomographyEstimator<
| ^~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:301:11: error: ‘homography_estimator’ was not declared in this scope
301 | if (homography_estimator.squaredResidual(data_.row(inlier_idx), best_homography) < squared_homography_threshold)
| ^~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:301:90: error: ‘squared_homography_threshold’ was not declared in this scope
301 | (homography_estimator.squaredResidual(data_.row(inlier_idx), best_homography) < squared_homography_threshold)
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~

/home/artcs/Downloads/magsac-master/include/estimators.h:305:38: error: ‘homography_estimator’ was not declared in this scope
305 | if (homography_inliers.size() < homography_estimator.nonMinimalSampleSize())
| ^~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:310:18: error: ‘Model’ was not declared in this scope; did you mean ‘gcransac::Model’?
310 | std::vector homographies;
| ^~~~~
| gcransac::Model
In file included from /home/artcs/Downloads/magsac-master/include/magsac_utils.h:9,
from /home/artcs/Downloads/magsac-master/src/main.cpp:15:
/home/artcs/Downloads/magsac-master/graph-cut-ransac/src/pygcransac/include/model.h:43:8: note: ‘gcransac::Model’ declared here
43 | class Model
| ^~~~~
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:25:
/home/artcs/Downloads/magsac-master/include/estimators.h:310:23: error: template argument 1 is invalid
310 | std::vector homographies;
| ^
/home/artcs/Downloads/magsac-master/include/estimators.h:310:23: error: template argument 2 is invalid
/home/artcs/Downloads/magsac-master/include/estimators.h:313:6: error: ‘homography_estimator’ was not declared in this scope
313 | homography_estimator.estimateModelNonminimal(data_, // All data points
| ^~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:320:23: error: request for member ‘size’ in ‘homographies’, which is of non-class type ‘int’
320 | if (homographies.size() != 1)
| ^~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:325:21: error: invalid types ‘int[int]’ for array subscript
325 | homographies[0].descriptor;
| ^
/home/artcs/Downloads/magsac-master/include/estimators.h:335:11: error: expected ‘;’ before ‘model’
335 | Model model;
| ^~~~~~
| ;
/home/artcs/Downloads/magsac-master/include/estimators.h:352:7: error: ‘model’ was not declared in this scope; did you mean ‘modfl’?
352 | model, // The estimated model
| ^~~~~
| modfl
/home/artcs/Downloads/magsac-master/include/estimators.h: In member function ‘double magsac::estimator::EssentialMatrixEstimator<MinimalSolverEngine, NonMinimalSolverEngine>::residualForScoring(const cv::Mat&, const gcransac::Model&) const’:
/home/artcs/Downloads/magsac-master/include/estimators.h:396:12: warning: there are no arguments to ‘squaredSymmetricEpipolarDistance’ that depend on a template parameter, so a declaration of ‘squaredSymmetricEpipolarDistance’ must be available [-fpermissive]
396 | return squaredSymmetricEpipolarDistance(point
, model
.descriptor);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h: In member function ‘double magsac::estimator::HomographyEstimator<MinimalSolverEngine, NonMinimalSolverEngine>::residualForScoring(const cv::Mat&, const gcransac::Model&) const’:
/home/artcs/Downloads/magsac-master/include/estimators.h:454:12: warning: there are no arguments to ‘residual’ that depend on a template parameter, so a declaration of ‘residual’ must be available [-fpermissive]
454 | return residual(point
, model
.descriptor);
| ^~~~~~~~
/home/artcs/Downloads/magsac-master/src/main.cpp: In function ‘void testEssentialMatrixFitting(double, double, const string&, bool, double)’:
/home/artcs/Downloads/magsac-master/src/main.cpp:430:48: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
430 | printf("\tNumber of points closer than %f is %d\n",
| ~^
| |
| int
| %ld
431 | drawing_threshold_, inlier_number);
| ~~~~~~~~~~~~~
| |
| size_t {aka long unsigned int}
/home/artcs/Downloads/magsac-master/src/main.cpp: In function ‘void opencvEssentialMatrixFitting(double, double, const string&, bool)’:
/home/artcs/Downloads/magsac-master/src/main.cpp:1160:47: warning: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘size_t’ {aka ‘long unsigned int’} [-Wformat=]
1160 | printf("\tNumber of points closer than %f = %d\n",
| ~^
| |
| int
| %ld
1161 | threshold_, inlier_number);
| ~~~~~~~~~~~~~
| |
| size_t {aka long unsigned int}
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:17:
/home/artcs/Downloads/magsac-master/include/magsac.h: In instantiation of ‘bool MAGSAC<DatumType, ModelEstimator>::sigmaConsensus(const cv::Mat&, const gcransac::Model&, gcransac::Model&, ModelScore&, const ModelEstimator&, const ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::FundamentalMatrixEstimator<gcransac::estimator::solver::FundamentalMatrixSevenPointSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’:
/home/artcs/Downloads/magsac-master/include/magsac.h:266:15: required from ‘bool MAGSAC<DatumType, ModelEstimator>::run(const cv::Mat&, double, ModelEstimator&, gcransac::sampler::Sampler<cv::Mat, long unsigned int>&, gcransac::Model&, int&, ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::FundamentalMatrixEstimator<gcransac::estimator::solver::FundamentalMatrixSevenPointSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’
/home/artcs/Downloads/magsac-master/src/main.cpp:539:8: required from here
/home/artcs/Downloads/magsac-master/include/magsac.h:537:31: error: cannot convert ‘__gnu_cxx::__alloc_traits<std::allocatorgcransac::Model, gcransac::Model>::value_type’ {aka ‘gcransac::Model’} to ‘int&’
537 | if (sigma_models.size() == 1 && // If only a single model is estimated
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:25:
/home/artcs/Downloads/magsac-master/include/estimators.h:83:29: note: initializing argument 1 of ‘bool magsac::estimator::FundamentalMatrixEstimator<_MinimalSolverEngine, _NonMinimalSolverEngine>::isValidModel(int&, const cv::Mat&, const std::vector&, const size_t*, double, bool&) const [with MinimalSolverEngine = gcransac::estimator::solver::FundamentalMatrixSevenPointSolver; NonMinimalSolverEngine = gcransac::estimator::solver::FundamentalMatrixEightPointSolver; size_t = long unsigned int]’
83 | bool isValidModel(Model& model
,
| ~~~~~~~^~~~~~
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:17:
/home/artcs/Downloads/magsac-master/include/magsac.h: In instantiation of ‘bool MAGSAC<DatumType, ModelEstimator>::sigmaConsensusPlusPlus(const cv::Mat&, const gcransac::Model&, gcransac::Model&, ModelScore&, const ModelEstimator&, const ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::FundamentalMatrixEstimator<gcransac::estimator::solver::FundamentalMatrixSevenPointSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’:
/home/artcs/Downloads/magsac-master/include/magsac.h:273:15: required from ‘bool MAGSAC<DatumType, ModelEstimator>::run(const cv::Mat&, double, ModelEstimator&, gcransac::sampler::Sampler<cv::Mat, long unsigned int>&, gcransac::Model&, int&, ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::FundamentalMatrixEstimator<gcransac::estimator::solver::FundamentalMatrixSevenPointSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’
/home/artcs/Downloads/magsac-master/src/main.cpp:539:8: required from here
/home/artcs/Downloads/magsac-master/include/magsac.h:804:27: error: cannot convert ‘gcransac::Model’ to ‘int&’
804 | estimator
.isValidModel(polished_model,
| ^~~~~~~~~~~~~~
| |
| gcransac::Model
In file included from /home/artcs/Downloads/magsac-master/src/main.cpp:25:
/home/artcs/Downloads/magsac-master/include/estimators.h:83:29: note: initializing argument 1 of ‘bool magsac::estimator::FundamentalMatrixEstimator<_MinimalSolverEngine, _NonMinimalSolverEngine>::isValidModel(int&, const cv::Mat&, const std::vector&, const size_t*, double, bool&) const [with _MinimalSolverEngine = gcransac::estimator::solver::FundamentalMatrixSevenPointSolver; NonMinimalSolverEngine = gcransac::estimator::solver::FundamentalMatrixEightPointSolver; size_t = long unsigned int]’
83 | bool isValidModel(Model& model
,
| ~~~~~~~^~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h: In instantiation of ‘double magsac::estimator::EssentialMatrixEstimator<_MinimalSolverEngine, _NonMinimalSolverEngine>::residualForScoring(const cv::Mat&, const gcransac::Model&) const [with MinimalSolverEngine = gcransac::estimator::solver::EssentialMatrixFivePointSteweniusSolver; NonMinimalSolverEngine = gcransac::estimator::solver::FundamentalMatrixEightPointSolver]’:
/home/artcs/Downloads/magsac-master/include/magsac.h:951:16: required from ‘void MAGSAC<DatumType, ModelEstimator>::getModelQuality(const cv::Mat&, const gcransac::Model&, const ModelEstimator&, double&, double&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::EssentialMatrixEstimator<gcransac::estimator::solver::EssentialMatrixFivePointSteweniusSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’
/home/artcs/Downloads/magsac-master/include/magsac.h:550:3: required from ‘bool MAGSAC<DatumType, ModelEstimator>::sigmaConsensus(const cv::Mat&, const gcransac::Model&, gcransac::Model&, ModelScore&, const ModelEstimator&, const ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::EssentialMatrixEstimator<gcransac::estimator::solver::EssentialMatrixFivePointSteweniusSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’
/home/artcs/Downloads/magsac-master/include/magsac.h:266:15: required from ‘bool MAGSAC<DatumType, ModelEstimator>::run(const cv::Mat&, double, ModelEstimator&, gcransac::sampler::Sampler<cv::Mat, long unsigned int>&, gcransac::Model&, int&, ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::EssentialMatrixEstimator<gcransac::estimator::solver::EssentialMatrixFivePointSteweniusSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>]’
/home/artcs/Downloads/magsac-master/src/main.cpp:401:8: required from here
/home/artcs/Downloads/magsac-master/include/estimators.h:396:44: warning: ‘squaredSymmetricEpipolarDistance’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
396 | return squaredSymmetricEpipolarDistance(point
, model
.descriptor);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:396:44: note: declarations in dependent base ‘gcransac::estimator::EssentialMatrixEstimator<gcransac::estimator::solver::EssentialMatrixFivePointSteweniusSolver, gcransac::estimator::solver::FundamentalMatrixEightPointSolver>’ are not found by unqualified lookup
/home/artcs/Downloads/magsac-master/include/estimators.h:396:44: note: use ‘this->squaredSymmetricEpipolarDistance’ instead
/home/artcs/Downloads/magsac-master/include/estimators.h: In instantiation of ‘double magsac::estimator::HomographyEstimator<_MinimalSolverEngine, _NonMinimalSolverEngine>::residualForScoring(const cv::Mat&, const gcransac::Model&) const [with MinimalSolverEngine = gcransac::estimator::solver::HomographyFourPointSolver; NonMinimalSolverEngine = gcransac::estimator::solver::HomographyFourPointSolver]’:
/home/artcs/Downloads/magsac-master/include/magsac.h:951:16: required from ‘void MAGSAC<DatumType, ModelEstimator>::getModelQuality(const cv::Mat&, const gcransac::Model&, const ModelEstimator&, double&, double&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::HomographyEstimator<gcransac::estimator::solver::HomographyFourPointSolver, gcransac::estimator::solver::HomographyFourPointSolver>]’
/home/artcs/Downloads/magsac-master/include/magsac.h:550:3: required from ‘bool MAGSAC<DatumType, ModelEstimator>::sigmaConsensus(const cv::Mat&, const gcransac::Model&, gcransac::Model&, ModelScore&, const ModelEstimator&, const ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::HomographyEstimator<gcransac::estimator::solver::HomographyFourPointSolver, gcransac::estimator::solver::HomographyFourPointSolver>]’
/home/artcs/Downloads/magsac-master/include/magsac.h:266:15: required from ‘bool MAGSAC<DatumType, ModelEstimator>::run(const cv::Mat&, double, ModelEstimator&, gcransac::sampler::Sampler<cv::Mat, long unsigned int>&, gcransac::Model&, int&, ModelScore&) [with DatumType = cv::Mat; ModelEstimator = magsac::estimator::HomographyEstimator<gcransac::estimator::solver::HomographyFourPointSolver, gcransac::estimator::solver::HomographyFourPointSolver>]’
/home/artcs/Downloads/magsac-master/src/main.cpp:686:8: required from here
/home/artcs/Downloads/magsac-master/include/estimators.h:454:20: warning: ‘residual’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
454 | return residual(point
, model
.descriptor);
| ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/artcs/Downloads/magsac-master/include/estimators.h:454:20: note: declarations in dependent base ‘gcransac::estimator::RobustHomographyEstimator<gcransac::estimator::solver::HomographyFourPointSolver, gcransac::estimator::solver::HomographyFourPointSolver>’ are not found by unqualified lookup
/home/artcs/Downloads/magsac-master/include/estimators.h:454:20: note: use ‘this->residual’ instead
CMakeFiles/MAGSAC.dir/build.make:134: recipe for target 'CMakeFiles/MAGSAC.dir/src/main.cpp.o' failed
make[2]: *** [CMakeFiles/MAGSAC.dir/src/main.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/MAGSAC.dir/all' failed
make[1]: *** [CMakeFiles/MAGSAC.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

Can you give me some advice?

Thanks for your help !

Magsac estimating fundamental matrix with 360 images

Hi @danini,
I am trying to aplicate the magsac algorithm with my work, in a part of my work I need to estimate the fundamental matrix, but in my case I need points in 3d, because I am working with 360 images in spherical domain(I project the image points to a sphere) and my z-point is not one, I notice that in the magsac the algorithm for fundamental matrix load only 2d points. It would be great to extend to 3d points. I am trying to do that.

Or Do you have a version with 3d points for the fundamental matrix?

Greetings and thank you,
Jeffri

Make Error!!! Missing header file!!

Hello,everyone,Why the project I downloaded is missing some header files???????????? Can someone post me? like this:

-- The CXX compiler identification is GNU 7.5.0
-- Check for working CXX compiler: /usr/local/bin/c++
-- Check for working CXX compiler: /usr/local/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Warning (dev) at CMakeLists.txt:9 (option):
Policy CMP0077 is not set: option() honors normal variables. Run "cmake
--help-policy CMP0077" for policy details. Use the cmake_policy command to
set the policy and suppress this warning.

For compatibility with older versions of CMake, option is clearing the
normal variable 'CREATE_SAMPLE_PROJECT'.
This warning is for project developers. Use -Wno-dev to suppress it.

-- Found OpenCV: /opt/ros/kinetic (found version "3.3.1")
Found Gflags 2.2.2
-- > GFLAGS_INCLUDE_DIR: /usr/local/include
-- > GFLAGS_LIBRARIES: gflags_shared
Glog library found.
-- Found OpenMP_CXX: -fopenmp (found version "4.5")
-- Found OpenMP: TRUE (found version "4.5")
-- The C compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/local/bin/gcc
-- Check for working C compiler: /usr/local/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Found PythonInterp: /usr/bin/python3.5 (found version "3.5.1")
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.5m.so
-- pybind11 v2.1.1
-- Performing Test HAS_CPP14_FLAG
-- Performing Test HAS_CPP14_FLAG - Success
-- Performing Test HAS_CPP11_FLAG
-- Performing Test HAS_CPP11_FLAG - Success
-- Performing Test HAS_FLTO
-- Performing Test HAS_FLTO - Success
-- LTO enabled
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jjb/envirement/magsac/build
jjb@jjb:~/envirement/magsac/build$ make
Scanning dependencies of target GraphCutRANSAC
[ 5%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/GCoptimization.cpp.o
[ 10%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/LinkedBlockList.cpp.o
[ 15%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/gamma_values.cpp.o
/home/jjb/envirement/magsac/graph-cut-ransac/src/pygcransac/include/gamma_values.cpp:1:9: 警告:#pragma once 出现在主文件中
#pragma once
^~~~
[ 21%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/graph.cpp.o
[ 26%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/maxflow.cpp.o
[ 31%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/relative_pose/bundle.cpp.o
[ 36%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/relative_pose/colmap_models.cpp.o
[ 42%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/relative_pose/essential.cpp.o
[ 47%] Linking CXX static library libGraphCutRANSAC.a
[ 47%] Built target GraphCutRANSAC
Scanning dependencies of target pymagsac
[ 52%] Building CXX object CMakeFiles/pymagsac.dir/src/pymagsac/src/bindings.cpp.o
[ 57%] Building CXX object CMakeFiles/pymagsac.dir/src/pymagsac/src/magsac_python.cpp.o
/home/jjb/envirement/magsac/src/pymagsac/src/magsac_python.cpp:3:10: 致命错误:fundamental_estimator.h:没有那个文件或目录
#include "fundamental_estimator.h"

code for essential matrix estimation

Hello authors,
Thanks much for sharing the code.
Actually, I am looking for the code for estimating the essential matrix but fail to figure out. Do you release the code for essential matrix as described in the paper?

Solving a Linear System of equations with MAGSAC

Hi @danini and @ducha-aiki ,

I have a problem with the kind A * x = y, where I have A and y, and I want to find x. The vector x has dimension 3, and I can get up to 110 measurements to build A and y. Currently, I am solving this using RANSAC available on the scikit-learn library. However, I would like to do the same with MAGSAC, which is state-of-the-art for such tasks. I tried to implement such an estimator by myself using the 2D Line example, but I couldn't find a solution.

Is it possible to solve such a problem using the public MAGSAC code? If so, can you explain where/how to modify the files?

Thank you,
Paulo Araujo

Just out of curiosity

Hi,
your paper is very interesting, thanks for sharing the code!

Just out of curiosity. In some of my old experiments (see "noRANSAC for fundamental matrix estimation", Table 5), I found that the geometric epipolar error (i.e. sqrt(e12^2+e21^2)) is usually more robust than the symmetric epipolar error. Did you also try some kind of similar error with MAGSAC?

Thanks again,
Fabio

Essential matrix example code fails

Hi,

When I'm running the example code in example_essential_matrix.ipynb i receive the following error

image

I have experimented a bit with trying to find the correct arguments, but with no luck so I am posting it here.

Thanks in advance for any help!

Make failed due to C++17 standard thing ....

Hi, @danini and @ducha-aiki ,

Thanks for sharing your great work!

Unfortunatelly, issues raised when I compile it on linux machine with gcc 5.2.0. I am stuck and any advice would be appreciated!

Thanks!

Appended is the error:

$ make -j4

[ 10%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/GCoptimization.cpp.o
[ 20%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/graph.cpp.o
[ 30%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/LinkedBlockList.cpp.o
[ 40%] Building CXX object CMakeFiles/MAGSAC.dir/include/gamma_values.cpp.o
[ 50%] Building CXX object CMakeFiles/MAGSAC.dir/include/magsac.cpp.o
[ 60%] Building CXX object CMakeFiles/MAGSAC.dir/include/model_score.cpp.o
[ 70%] Building CXX object CMakeFiles/GraphCutRANSAC.dir/graph-cut-ransac/src/pygcransac/include/maxflow.cpp.o
[ 80%] Building CXX object CMakeFiles/MAGSAC.dir/src/main.cpp.o
[ 90%] Linking CXX static library libGraphCutRANSAC.a
[ 90%] Built target GraphCutRANSAC
In file included from /home/Code/magsac/include/magsac.cpp:1:0:
/home/Code/magsac/include/magsac.h: In member function ‘bool MAGSAC<DatumType, ModelEstimator>::sigmaConsensusPlusPlus(const cv::Mat&, const gcransac::Model&, gcransac::Model&, ModelScore&, const ModelEstimator&, const ModelScore&)’:
/home/Code/magsac/include/magsac.h:743:20: error: expected unqualified-id before ‘[’ token
for (const auto &[residual, idx] : residuals)
^
/home/Code/magsac/include/magsac.h:743:20: error: expected ‘;’ before ‘[’ token
/home/Code/magsac/include/magsac.h:743:21: error: ‘residual’ was not declared in this scope
for (const auto &[residual, idx] : residuals)
^
/home/Code/magsac/include/magsac.h:743:31: error: ‘idx’ was not declared in this scope
for (const auto &[residual, idx] : residuals)
^
/home/Code/magsac/include/magsac.h: In lambda function:
/home/Code/magsac/include/magsac.h:743:36: error: expected ‘{’ before ‘:’ token
for (const auto &[residual, idx] : residuals)
^
/home/Code/magsac/include/magsac.h: In member function ‘bool MAGSAC<DatumType, ModelEstimator>::sigmaConsensusPlusPlus(const cv::Mat&, const gcransac::Model&, gcransac::Model&, ModelScore&, const ModelEstimator&, const ModelScore&)’:
/home/Code/magsac/include/magsac.h:743:36: error: expected ‘;’ before ‘:’ token
/home/Code/magsac/include/magsac.h:743:36: error: expected primary-expression before ‘:’ token
/home/Code/magsac/include/magsac.h:743:36: error: expected ‘)’ before ‘:’ token
/home/Code/magsac/include/magsac.h:743:36: error: expected primary-expression before ‘:’ token
make[2]: *** [CMakeFiles/MAGSAC.dir/include/magsac.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /home/Code/magsac/graph-cut-ransac/src/pygcransac/include/fundamental_estimator.h:52:0,
from /home/Code/magsac/graph-cut-ransac/src/pygcransac/include/types.h:39,
from /home/Code/magsac/graph-cut-ransac/src/pygcransac/include/utils.h:48,
from /home/Code/magsac/src/main.cpp:16:
/home/Code/magsac/graph-cut-ransac/src/pygcransac/include/GCRANSAC.h: In member function ‘void gcransac::GCRANSAC<_ModelEstimator, _NeighborhoodGraph, _ScoringFunction, _PreemptiveModelVerification>::run(const cv::Mat&, const _ModelEstimator&, gcransac::sampler::Sampler<cv::Mat, long unsigned int>, gcransac::sampler::Sampler<cv::Mat, long unsigned int>, const _NeighborhoodGraph*, gcransac::Model&, _PreemptiveModelVerification&)’:
/home/Code/magsac/graph-cut-ransac/src/pygcransac/include/GCRANSAC.h:305:8: error: expected ‘(’ before ‘constexpr’
if constexpr (!std::is_same<preemption::EmptyPreemptiveVerfication<_ModelEstimator>, _PreemptiveModelVerification>())
^
/home/Code/magsac/src/main.cpp:1181:1: error: expected ‘}’ at end of input
}
^
/home/Code/magsac/src/main.cpp:1181:1: error: expected ‘}’ at end of input
/home/Code/magsac/src/main.cpp:1181:1: error: expected ‘}’ at end of input
/home/Code/magsac/src/main.cpp: At global scope:
/home/Code/magsac/src/main.cpp:1181:1: error: expected ‘}’ at end of input
make[2]: *** [CMakeFiles/MAGSAC.dir/src/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/MAGSAC.dir/all] Error 2
make: *** [all] Error 2

Difference between pymagsac.findHomography() and cv2.findHomography()

Thank you for sharing your great work. I am trying to understand and utilize magsac and related functions.
What do you intend is the difference between pymagsac.findHomography() and cv2.findHomography (with the method option specified to be “cv2.USAC_MAGSAC”)?
Thank you.

Very verbose MAGSAC++ - is it possible to turn it off?

Hello. Whenever I run pymagsac.findHomography' with use_magsac_plus_plus=True` I always get really verbose prints:

Setting the core number for MAGSAC++ is deprecated.
Setting the partition number for MAGSAC++ is deprecated.

Is there a way to suppress this? I believe the prints are coming from here, but it's been hard-coded here.

Perhaps the following lines (L33-34) can be deleted if use_magsac_plus_plus is false?

    magsac->setCoreNumber(1); // The number of cores used to speed up sigma-consensus
    magsac->setPartitionNumber(partition_num); // The number partitions used for speeding up sigma consensus. As the value grows, the algorithm become slower and, usually, more accurate.

I'd be happy to create a PR if you think it'd be useful.

Cmake problems with CREATE_SAMPLE_PROJECT var, C++

Hello Daniel,

I saw your talk at EECVC and I tried to clone your C++ MAGSAC project and get it to run on Ubuntu 18.04. I was unable to do so w/o some alterations, some notes:

1- it is not obvious from the README that one has to clone and then copy the src folder from your graph-cut-ransac repo to the folder in magsac/graph-cut-ransac (which is empty when cloning magsac). By reading through the CMakeLists.txt file I figured it out and was able to configure/generate with Cmake and then build.

2- I set the CREATE_SAMPLE_PROJECT var as follows set(CREATE_SAMPLE_PROJECT ON)` and Cmake generation failed:

CMake Error at CMakeLists.txt:105 (target_link_libraries):
  Target "MAGSAC" of type EXECUTABLE may not be linked into another target.
  One may link only to INTERFACE, OBJECT, STATIC or SHARED libraries, or to
  executables with the ENABLE_EXPORTS property set.

I changed the target_link_libraries() section in CREATE_SAMPLE_PROJECT and it generated, built, and I can run it now:

target_link_libraries(SampleProject 
		${OpenCV_LIBS}
		Eigen3::Eigen
	)

A question, I see that you are linking with OpenMP, but I didn't see anywhere in the paper where you mention parallelization or implementation details (but I only did a high-level read). Is the OpenMP for speeding up the OpenCV parts of the code, or do you use parallelization currently in the MAGSAC++ algo?

Difference between paper and code

Hi,

I have been studying your paper, thanks for uploading your code with it !

I was wondering, when you apply SigmaConsensus, in the paper you use the formula (6) to compute weights, but in the code you only use the exponential part of this formula. Why is the factor \sigma^{-\rho} D(\theta, \sigma)^{\rho - 1} ignored in the computation of the weights ?

Best regards,
Clément Riu.

License?

Hi @danini - thank you for making the code to your research available! I'm curious if you'd be willing to add an explicit license to this repository (MIT, BSD, Public Domain, etc).

running example_homography occur error

Hi, @danini and @ducha-aiki ,

Thanks for sharing your great work!

Unfortunatelly, issues raised when I run the example_homography.I never modify the content of this file.

Appended is the error:
TypeError: findHomography(): incompatible function arguments. The following argument types are supported:
1. (x1y1: numpy.ndarray[float64], x2y2: numpy.ndarray[float64], w1: float, h1: float, w2: float, h2: float, use_magsac_plus_plus: bool=True, sigma_th: float=1.0, conf: float=0.99, max_iters: int=1000, partition_num: int=5) -> tuple

It works in OpenCV 3.4.2

Hi,

I think, the 3.4.6 is too strict. I haven`t checked if it would work with 3.0, but 3.4.2 is OK for sure

C++ Installation with CREATE_SAMPLE_PROJECT ON

I am having issues building when CREATE_SAMPLE_PROJECT is set to ON.

/magsac/examples/cpp_example.cpp: In function 'void testEssentialMatrixFitting(double, double, const string&, bool, bool, double)': /magsac/examples/cpp_example.cpp:403:24: error: 'loadMatrix' is not a member of 'gcransac::utils'; did you mean 'loadMatrix'? 403 | if (!gcransac::utils::loadMatrix<double, 3, 3>(source_intrinsics_path, | ^~~~~~~~~~ In file included from /magsac/examples/cpp_example.cpp:16: /magsac/src/pymagsac/include/magsac_utils.h:115:6: note: 'loadMatrix' declared here 115 | void loadMatrix( | ^~~~~~~~~~ /magsac/examples/cpp_example.cpp:403:35: error: expected primary-expression before 'double' 403 | if (!gcransac::utils::loadMatrix<double, 3, 3>(source_intrinsics_path, | ^~~~~~ /magsac/examples/cpp_example.cpp:403:35: error: expected ')' before 'double' 403 | if (!gcransac::utils::loadMatrix<double, 3, 3>(source_intrinsics_path, | ~ ^~~~~~ | ) /magsac/examples/cpp_example.cpp:411:24: error: 'loadMatrix' is not a member of 'gcransac::utils'; did you mean 'loadMatrix'? 411 | if (!gcransac::utils::loadMatrix<double, 3, 3>(destination_intrinsics_path, | ^~~~~~~~~~ In file included from /magsac/examples/cpp_example.cpp:16: /magsac/src/pymagsac/include/magsac_utils.h:115:6: note: 'loadMatrix' declared here 115 | void loadMatrix( | ^~~~~~~~~~ /magsac/examples/cpp_example.cpp:411:35: error: expected primary-expression before 'double' 411 | if (!gcransac::utils::loadMatrix<double, 3, 3>(destination_intrinsics_path, | ^~~~~~ /magsac/examples/cpp_example.cpp:411:35: error: expected ')' before 'double' 411 | if (!gcransac::utils::loadMatrix<double, 3, 3>(destination_intrinsics_path, | ~ ^~~~~~ | ) /magsac/examples/cpp_example.cpp: In function 'void opencvEssentialMatrixFitting(double, double, const string&, bool)': /magsac/examples/cpp_example.cpp:1205:24: error: 'loadMatrix' is not a member of 'gcransac::utils'; did you mean 'loadMatrix'? 1205 | if (!gcransac::utils::loadMatrix<double, 3, 3>(source_intrinsics_path, | ^~~~~~~~~~ In file included from /magsac/examples/cpp_example.cpp:16: /magsac/src/pymagsac/include/magsac_utils.h:115:6: note: 'loadMatrix' declared here 115 | void loadMatrix( | ^~~~~~~~~~ /magsac/examples/cpp_example.cpp:1205:35: error: expected primary-expression before 'double' 1205 | if (!gcransac::utils::loadMatrix<double, 3, 3>(source_intrinsics_path, | ^~~~~~ /magsac/examples/cpp_example.cpp:1205:35: error: expected ')' before 'double' 1205 | if (!gcransac::utils::loadMatrix<double, 3, 3>(source_intrinsics_path, | ~ ^~~~~~ | ) /magsac/examples/cpp_example.cpp:1213:24: error: 'loadMatrix' is not a member of 'gcransac::utils'; did you mean 'loadMatrix'? 1213 | if (!gcransac::utils::loadMatrix<double, 3, 3>(destination_intrinsics_path, | ^~~~~~~~~~ In file included from /magsac/examples/cpp_example.cpp:16: /magsac/src/pymagsac/include/magsac_utils.h:115:6: note: 'loadMatrix' declared here 115 | void loadMatrix( | ^~~~~~~~~~ /magsac/examples/cpp_example.cpp:1213:35: error: expected primary-expression before 'double' 1213 | if (!gcransac::utils::loadMatrix<double, 3, 3>(destination_intrinsics_path, | ^~~~~~ /magsac/examples/cpp_example.cpp:1213:35: error: expected ')' before 'double' 1213 | if (!gcransac::utils::loadMatrix<double, 3, 3>(destination_intrinsics_path, | ~ ^~~~~~ | ) In file included from /magsac/graph-cut-ransac/src/pygcransac/include/estimators/fundamental_estimator.h:49, from /magsac/graph-cut-ransac/src/pygcransac/include/estimators/solver_essential_matrix_five_point_stewenius.h:37, from /magsac/src/pymagsac/src/magsac_python.cpp:3:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.