IPOL_AC_RANSAC icon indicating copy to clipboard operation
IPOL_AC_RANSAC copied to clipboard

Automatic Homographic Registration of a Pair of Images, with A Contrario Elimination of Outliers IPOL 2012. http://www.ipol.im/pub/art/2012/mmm-oh/

ORSA - A RANSAC variant with a contrario elimination of outliers

Lionel Moisan [email protected] MAP5, Universite Paris Descartes Pierre Moulon [email protected] IMAGINE/LIGM, Universite Paris Est Pascal Monasse [email protected] IMAGINE/LIGM, Universite Paris Est

The generic framework is applied to two model estimations (IPOL publications):

  • homography matrix (https://doi.org/10.5201/ipol.2012.mmm-oh)
  • fundamental matrix (https://doi.org/10.5201/ipol.2016.147)

Future releases and updates: http://imagine.enpc.fr/~moulonp/AC_Ransac.html

  • Description: This provides a variant, called ORSA, of the well known RANSAC method for model parameter estimation. It is based on an a contrario criterion of inlier/outlier discrimination, is parameter free and relies on an optimized random sampling procedure.

  • Licensing: See LICENSE.txt file

  • Build, usage: See BUILD.txt file.

  • Reviewed files in IPOL: src/libOrsa/libNumerics/cubicRoots.h src/libOrsa/sampling.{hpp,cpp} src/libOrsa/model_estimator.{hpp,cpp} src/libOrsa/homography_model.{hpp,cpp} src/libOrsa/fundamental_model.{hpp.cpp} src/libOrsa/eval_model.{hpp,cpp} src/demo/demo_orsa_homography.cpp src/demo/demo_orsa_fundamental.cpp src/demo/homography_graphical_output.{hpp,cpp} src/demo/fundamental_graphical_output.{hpp,cpp} src/demo/put_epipolar.cpp src/demo/Rect.{hpp,cpp}

  • The SIFT algorithm used by the demo is based on sift_anatomy_20141201 from the article Ives Rey Otero, and Mauricio Delbracio, Anatomy of the SIFT Method, Image Processing On Line, 4 (2014), pp. 370–396. https://doi.org/10.5201/ipol.2014.82

  • Reusing the libOrsa library: This library itself is self-contained and has no external dependencies. To reuse it in your own program, just copy the folder along with its sub-folder libNumerics in your program. You may need to remove the UNIT_TEST instructions in the CMakeLists.txt files if you do not want to take along the third-party CppUnitLite. The simplest usage is through the function

  • Homography: bool orsa_homography(const std::vector<Match>& vec_matchings, int w1,int h1, int w2,int h2, double precision, int nbIter, libNumerics::matrix& H, std::vector& vec_inliers); A lower-level function, just applying ORSA with no refinement: HomographyModel model(xA, w1, h1, xB, w2, h2); Orsa orsa(&model, M_PI/(w1h1), M_PI/(w2h2)); orsa.run(vec_inliers, 10000, 0, &H);

  • Fundamental: bool orsa_fundamental(const std::vector<Match>& vec_matchings, int w1,int h1, int w2,int h2, double precision, int nbIter, libNumerics::matrix& F, std::vector& vec_inliers); A lower-level function, just applying ORSA with no refinement: FundamentalModel model(xA, w1, h1, xB, w2, h2); Orsa orsa(&model, 2hypot(w1,h1)/(w1h1), 2hypot(w2,h2)/(w2h2)); orsa.run(vec_inliers, 10000, 0, &F);