Camera Calibration

B.A.R.D. requires a calibrated camera. The calibration is necessary for two reasons.

  • Augmented reality, which is overlaying virtual models over live video, requires it. Discuss why.

  • BARD uses the video camera to track objects in the real world, converting detected pixel coordinates to model coordinates in 3D space requires a model of the camera.

The following instructions will guide you through calibrating your webcam.

Camera calibration with BARD can be summarised as:

  • Capture a number (>3) images of a physical object of known geometry.

  • Extract salient features from these images using computer vision (OpenCV)

  • Fit a model to your camera that best fits the relationship between the features on your physical object and the features detected in the images.

See Camera calibration with OpenCV for a more complete explanation of camera calibration and the physics of a pin hole camera.

Get hold of a suitably sized calibration chessboard. The should be one in the data directory (e.g. data/calibrationGrids/calibrationgrid-6mm.pdf), or write a script to make one.

Take 5-20 pictures of chessboard using:

python bardVideoCalibration.py -c config/video_calib_chessboard.json

Hit the ‘c’ key to capture an image. Press the ‘q’ key to quite the application.

Take a look in the video_calib_chessboard.json file. Here we specify the number of internal corners (14x10), and also the size of each square (6mm). This matches the provided image in data/calibrationGrids/calibrationgrid-6mm.pdf.

Make sure you have printed the image at the correct scale. If you are using a different image, adjust the values accordingly.

Once you have captured enough images, the calibration runs each time you press the ‘c’ key and capture a new image. The calibration results are shown in the terminal window.

Often, in a research setting, it is best to save the data for later analysis. The same program can be used to save the data to a given folder.

Use the ‘-o’ option to specify a directory to save to, the ‘-p’ option to specify a filename prefix, and ‘-h’ option to show help message and exit.

For example:

python bardVideoCalibration.py -c config/video_calib_chessboard.json -s 0 -o tests/output -p myresults
#usage: bardVideoCalibration.py [-h] -c CONFIG [-s SOURCE] [-o OUTPUT] [-p PREFIX] [-ni] [-v]

Then, each time the program recalibrates, the results will be saved to the ‘tests/output’ folder, with the filename prefix ‘myresults’.

Tasks

Repeat calibration 2,3,4 times.

  • which parameters vary the most?

  • Is there a link between the reprojection error returned and the calibration accuracy?

  • Does the number and range of views affect the result?

  • What happens if the chessboard is upside down?