C++ source code and datasets from my PhD research

License - Download - Browse Source - Pre-requisites - Features - Install - Binaries - Datasets - Parameter documentation - Coming Soon - Known issues - Associated publications


License: my code is free for any use. the two closed-form 5-point essential matrix solvers are for academic use only (based on MATLAB and C code from Henrik Stewenius), also includes code based on Edward Rosten's FAST code with BSD license. Please email ( ) and let me know if you find it useful or find any bugs or can't get something working.


Works in Linux, using gcc and the Netbeans ID for c++. May work in Windows (Windows/VS solution files are not currently maintained).

BoWSLAM currently only works in Linux. Important Additional instructions here.

Linux: Code now on Github:

git clone https://github.com/kayak-tom/tom-cv/

Windows: Use Github Windows

Try the latest revision first, revision 1069 may work on older systems (with boost 1.39.0 or earlier).

Browse Source


gcc or clang, boost (version 1.54 or later, compiled), Eigen 3.1 or later (matrix library). OpenCV (version 2.4 or later)


(more details here)

BaySAC (and RANSAC and PROSAC and SimSAC and WaldSAC) for Essential Matrix estimation and Homography estimation. Topdown refinement of solution. Nonlinear refinement of E on hypothesis sets found by RANSAC. Example...

Fast 5-point Essential Matrix estimation and refinement.

Estimate Homography and decompose into translation, rotation, plane-normal (Levenberg-Marquardt)

Bag-of-Words library: Real-time performance and dynamic retraining. Supports 10k+ images. Fast pairwise correspondences.

K-medoids clustering.

Real-time mosaicing (generates a locally accurate seamless mosaic in real-time. Does not generate a globally accurate mosaic you need to do incremental bundle adjustment to do this!)


See License_and_Installation_Readme.txt. To use one simple function just copy the relevent code. To build libraries use cmake

Install in Linux

Make sure include files and libraries for boost, Eigen, and OpenCV (if needed) are visible to gcc. If Eigen is not visible then make a symlink to it in your checkout dir: ln -s PATH_TO_YOUR_EIGEN_DIR Eigen

Install in Linux (use cmake)

cd to the tom-cv directory.

mkdir build

cd build

cmake ..

make -j8

Install in Windows

Use cmake GUI (not fully tested)

You can use the Bag-of-Words code from any programming language under Windows


Four datasets are available via my google docs account (too large to put here). To download them please email me ( ) and I will provide access. Most are low framerate, fairly high resolution and from a single camera, and some have GPS ground truth (as NMEA data or in an openoffice spreadsheet) and camera calibration data.

Parameter documentation

Documentation for all parameters is online here. Some headers are documented, e.g. ransac.h for BaySAC, E estimation, H estimation.

Coming soon

1) Seperate out clustering functionality (CLARA k-medoids)

2) More examples and documentation :-)

Known issues

BoWSLAM has additional requirements (and does not work reliably with gcc versions 4.4 or earlier, or early versions of boost)

K-medoids has hard-coded limit of 450 data-points in Windows, and stack allocation will fail with more than about 1000 in Linux.