Joao P. Barreto, Kostas Daniilidis, Nikhil Kelshikar, Rana Molana,
Xenophon Zabulis Contact Email: jpbar@grasp.cis.upenn.edu /
nikhil@grasp.cis.upenn.edu
Click Here to download the Toolbox and dot
extractor.
The EasyCal Toolbox can be used to calibrate a large cluster of
cameras easily eliminating the need to click tediously on multiple
images. The basic idea behind this notion is to propagate the
Euclidean calibration obtained using the Camera Calibration Toolbox by
Jean-Yves Bouguet from a subset of cameras to a larger number of
cameras. A brief mathematical basis is available
here.
Image Requirements: A typical image would look like this. You will need to acquire a sequence of
atleast 1000 images (ideally 5000) at a high acquisition rate
(>=15fps). To acquire the data set the room lighting should be turned
off and images should be acquired. Try and move the point light
source so that it covers the entire acquisition area.
Apart from point images we need images using the checkerboard
pattern from at least 2 cameras. You should acquire 640x480 size
images from two cameras out of the entire cluster. 40 images per
camera should be sufficient. Follow the rules for grabbing images
for the bouguet calibration toolbox. A thing to note would be that we
desire a large baseline between these cameras.
Usage: Download the zip file.
There are two directories under DotCalib viz. -
CalibToolbox
- lasercalib
Dot Extractor: the directory lasercalib
contains the Visual Studio Project (.NET 2003) for extracting the dots
using the saved PGM files. To execute simply run
Release\lasercalib
e.g. Release\lasercalib 50 5000 1
c:\data\lasercalib_ 0
will accept a threshold of 50 for the intensity, which
implies any pixel over intensity value 50 will be considered the
dot. We save the extent of the dot and use the values to accept /
reject its use in calibration. numimages is the number
of images in the sequence and camnum is the camera
number. prefix is the image name prefix which will be
'c:/data/dot'. camtype = 1 for color
images(ppm files), else it will assume grayscale pgm files. Repeat
this for all the cameras you wish to calibrate. The program will write
a file like c01.txt, c02.txt, etc. for each
camera. We are now ready for the next step which is final
calibration.
EasyCal: Under Matlab change to the CalibToolbox
directory. You will have to edit the GoCalib script. Following things
need to changed in the GoCalib script to adapt to your
enviornment:
- rootdir Set rootdir variable to point to actual
location where the CalibToolbox directory is located. We do this to
add the appropriate matlabpath's.
- numcams Set
numcams to the total number of cameras you wish to calibrate.
- cams2cal cams2cal should be reflect the camera
numbers of the (2) cameras you will be clicking on to propagate their
Euclidean calibration to rest of the cameras. If you use camera
numbers 5 and 11 set cams2cal = [5 11].
- imageoutputdir Output dir for the Bouguet
Calibration parameters
- imageinputdir Input dir for
the Bouguet Calibration images
- imrootname Prefix
of the image names cal_ will be the prefix for cal_c04f004.pgm
- format_bw Image format for grayscale images
- format_col Image format for color images
- dX, dY Check size along X and Y axis (same as for
old bouguetcal)
- inputdir The directory where you
have saved all the ouput files from the dot extractors
That should be the settings you need to make and then you are ready
for the calibration. Run GoCalib. Happy clicking on
the two or more cameras you might have selected. After you are
finished clicking it will calibrate the rest and give you the output
in a matrix MMCal. This is a collection of all the projection matrices
for all the cameras. MMCal is our own format for storing the matrix.
You can use the function litem to extract indiviual
matrices as follows:
P1 = litem(MMCal,1); P2 = litem(MMCal,2); , and so on..
Remember the first and the second rows are interchanged as against the
standard format for Projection Matrices. So if you are not used to
this particular format you might have to interchange them.
We will be updating this document. Currently we do not estimate radial
distortion parameters or account for them. We should be able to do
that soon.
|