Manolis Lourakis
Institute of Computer Science,
Foundation for Research and Technology - Hellas,
Heraklion, Crete, Greece
Last updated Feb. 14, 2016
This page concerns fundest, a C/C++ library for fundamental matrix estimation that is distributed
under the GNU General Public License (GPL).
The fundamental matrix
is a singular 3x3 matrix which relates corresponding points in two views according to the
epipolar constraint. A fundamental
matrix has rank two and is defined up to an unknown scale, hence has seven degrees of freedom.
fundest implements a technique for non-linear, robust fundamental matrix estimation from
matched image point features. This technique computes an estimate that minimizes an appropriate
cost function defined on matching points (currently either algebraic error with rank-2 enforcement,
symmetric distances from epipolar lines or Sampson error) and includes robust regression techniques
for coping with outliers. Briefly, the algorithm implemented by fundest is the following:
In all cases, the minimization is performed using the Levenberg-Marquardt algorithm, see M.I.A. Lourakis, “levmar: Levenberg-Marquardt Nonlinear Least Squares Algorithms in C/C++”, [web page] http://www.ics.forth.gr/~lourakis/levmar/.
To cope with degenerate data, model selection using the so-called Geometric Robust Information Criterion (GRIC) is included to facilitate the assesment of the likelihood of a fundamental matrix fit vs. that of a homography. The latter is estimated with homest and requires the symbol HAVE_HOMEST to be defined during compilation.
More details on fundamental matrix estimation can be found in chapters 9 & 11 of R. Hartley and A. Zisserman's textbook titled “Multiple View Geometry in Computer Vision”, Cambridge University Press, 2003. Note that fundest does not include any means for detecting and matching point features between images. Such functionality can be supplied by other software such as D. Lowe's SIFT detector & descriptor, the VLFeat and OpenSURF libraries or, in some cases, the KLT tracker.To compile, fundest requires the levmar Levenberg-Marquardt non-linear least squares package, which in turn relies on BLAS/LAPACK. Precompiled LAPACK/BLAS binaries for Windows are available here and here.
The source code is distributed in a gzip'ed tar file. It has been tested under linux with gcc/lcc and under windows with MSVC but should compile with any ANSI compliant C compiler. Remember to include fundest.h from your C/C++ code.
Current version: fundest-1.2
For historical reasons, older versions of fundest are also available:
hits since Sat Jun 30 23:40:15 EEST 2012 |
![]() |