The Laser-Camera Calibration Toolbox

What and Why?

External calibration of a camera to a laser rangefinder is a common pre-requisite on today's multi-sensor mobile robot platforms. However, the process of doing so is relatively poorly documented and almost always time-consuming. 

To bridge this gap we've developed the Laser-Camera Calibration Toolbox (LCCT), a Matlab® -based graphical user interface to an easy and portable technique for external calibration of a camera to a laser rangefinder.


Selecting a planar region in GUI

Selecting a planar region
in range-image viewer 

Main GUI window

Main GUI command window

Test imageCorresponding colorized test scan

Result of using the test image (left) 
to colorize a ladar scan (right) 


The latest version 1.1 (last updated on 10th Nov, 2006) may be downloaded in separate modules as:

  1. LCCT source files (68 KB) - here

  2. LCCT documentation (1.3 MB) - here

  3. LCCT sample data and result files (5.3 MB) - here

  4. LCCT test data files (2.5 MB) - here

OR as a complete self-contained bundle (9.1 MB) here containing software, documentation as well as all the sample laser and image data files.


Q: Help! When previewing a range image, my viewer turns blank and shows nothing !

The software assumes a certain convention for the xyz points in order to project it to 2d. It assumes that x-axis faces to the right of the laser, y-axis faces forward and z-axis is the upright direction facing "up" from the ground to the sky.
If this is not the same as your convention, then do the following:

Figure out what is the vector corresponding to the "up" direction in the coordinate system of your laser points. e.g. in what I described earlier, it is the z-axis, so the vector is [0 0 1]. Then appropriately change the line in view_range_image.m that goes:

handles.up_vector = [0 0 1]';

It should work then.

Q: Will this work on my platform / in my old version of Matlab ?

The above software has been tested on the following Matlab® versions/platforms : (R14) SP2 (on windows) (on windows) (R13) (on linux) and (R14) SP 3 (on linux)
All potential incompatibilities between v6 and v7 have been taken care of as far I can tell. So in principle, you shouldn't have any trouble.

Q: This is swell! How can I return the favor ?

A citation of the tech report would be much appreciated. Sponsorship of vodka-based refreshments even more so.

Do email me in case there's some useful feature that you'd like to have added. Enjoy!


Version 1.1
(11/10/2006) : Linux bug fix

  • Apparently the uigetfile function sometimes does not work correctly on linux (search for 'uigetfile linux bug' for details). It is currently fixed by forcing Matlab to not use native system dialogs, and the appropriate instruction has been added to the select_calibfile_fn callback.
  • Documentation has been updated with a (hopefully) better explanation of the math through an added appendix.

(03/01/2006) : backward compatibility

  • Set MAT file preferences to support Matlab v6 compatiblity. This will make the fig files larger as v7 uses some sort of compression scheme.
  • Some of the fig files seemed corrupted and unreadable in Matlab on windows. Checking them with matcat.m seems to fix the problem. I added a script check_fig_files to look at each of them and print out status messages.

Version 1.0 - the "inaugral release"
Improvements from previous (internal) beta version include:

  • Automatic alignment for correct rendering of range images
  • Ability to specify vector corresponding to "up" direction
  • Ability to load calibration file from GUI
  • Fixed bug with writing .m output
  • Added "About" info
  • Guard against exiting without saving calibration results


Valid HTML 4.01!