My piece of vision

VPClib a library for video projector calibration.

Written By: urbeller

What is it ?

The VPC library provides routines for geometric video projector calibration (licenced under general GPL). Here, geometric calibration refers to the process of retrieving the projector’s intrinsic parameters (focal, aspect ratio and principal point) and not the keystoning parameters as it is often misunderstood. Some VPClib features include:

  • Fully implemented in C++ on top of OpenCV.
  • Suited for ProCam systems as it uses only a camera.
  • Provides calibration routines for several scenarios.
  • Relies on marker-less planar scenes (like walls).
  • A complete and stand-alone bundle adjustment routine to optimize both intrinsic and extrinsic parameters.

Details of the algorithms can be found in  [1], see also the corresponding publication entry.

How does it work?

Because they are active devices, VPs need an external sensor to carry their intrinsic calibration. VPC uses only a regular camera as a sensor (and a projector, obviously!). Before digging into the full description of the provided routines, bare in mind that we distinguish two major families of VP calibration techniques whether  they use a physical calibration object (rig, printed chessboard…) or not. And whether the camera is fully, partially or not calibrated. The real challenge in calibrating a VP is to estimate the orientation camera ↔ projection_surface. Once this information inferred, the remaining step  is simply a plane-based calibration.

Unless otherwise stated, the calibration setup consists of a moving VP projecting patterns on a flat surface (referred to as the wall) and a static camera imaging the projected features.

Direct method: This method is an extension of the plane-based calibration for pinhole cameras. It uses a physical chessboard to infer the orientation of the wall w.r.t the camera. No knowledge of the camera is required.

Sampling method: This method does not require a physical pattern but the camera’s intrinsic parameters. This method can also work if the user provides only the camera’s principal point (which is usually in the vicinity of the image centre). The sought camera↔wall orientation is found by sampling on the unit half-sphere.

AutoCalibration method: For this method to work, the user must identify at least one projector front-parallel to the wall. In practice, several front-parallel configurations could be used to ensure an optimal result.

Method Physical PatternMoverExtra Knowledge
SamplingNoProjectorCamera intrinsic or principal point
Auto-CalibrationNoProjector1 projector fronto-// pose

How to download and build ?

To get the library, please send me an email ( stating the nature of your projects. You can also get the associated dataset demo vpc_data_0.1.tgz to try the library.

    • Make sur cake knows where OpenCV is. Presently, CMakeList.txt look for the env variable CMAKE_DIR which points to the directory where OpenCVConfig.cmake is.
    • The build should be straightforward. Please read the Individual README’s for documentation.

 What is missing ?

Probably a lot ! There must be a fief of bugs that is waiting to be discovered :-). In the meantime, this is a list of some features we plan to add :

  • A wrapper for python.
  • An intuitive UI front-end.
  • A database of known projectors along with their manufacturer’s info.

Last but not least

I would like to thank Peter STURM for his advices throughout the drafting of this software and for helping me deriving the bundle adjustment equations.


[1] [pdf] J. Draréni, S. Roy, and P. Sturm, “Methods for Geometrical Video Projector Calibration ,” Machine Vision and Applications, 2012.
  author = {Draréni, J. and  Roy, S. and Sturm, P.},
  title = {Methods for Geometrical Video Projector Calibration },
  journal = {Machine Vision and Applications},
  year = {2012}

Leave a Reply

Your email address will not be published. Required fields are marked *

nine − = five