IPOL_AC_RANSAC
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);