Cameras have lenses and do usually not resemble perfect pinhole cameras. Therefore, lens distortion models have been developed that allow a lens correction on the input images of a camera and warp them to undistorted cameras of the corresponding pinhole camera.
A widely used distortion model is described on the documentation page of the OpenCV library and the homepage of the Camera Calibration Toolbox for Matlab of Jean-Yves Bouguet.
To generate synthetic images containing lens distortion, one usually has to apply the distortion after the rendering process, at least with POV-Ray. To overcome this drawback, I have written a patch to POV-Ray 3.6.1 that introduces a new camera type.
Installation
To install the patch, download the source archive of POV-Ray 3.6.1 and extract it:
tar xfj povray-3.6.tar.bz2
Then download the patch into the same directory and execute:
patch -p0 < ../povray-3.6.1_LenseDistortion.patch
Now you can build and install your own version of POV-Ray:
cd povray-3.6.1
./configure COMPILED_BY="someone"
make
make install
Usage
To use the new camera, take a look at the following example snippet:
#local f = 800.0;
#local sx = 1.0;
#local sy = 1.0;
#local fx = f / sx;
#local fy = -f / sy;
#local w = 800.0;
#local h = 600.0;
#local cx = w/2.0 - 0.5;
#local cy = h/2.0 - 0.5;
camera {
distorted
location <0,0,0>
direction <0,0,1>
up <0,1,0>
right <1,0,0>
focal_length <fx, fy>
principal_point <cx, cy>
distortion_k1 -0.2908670
distortion_k2 0.1094130
distortion_k3 0.0
distortion_p1 -0.0006320
distortion_p2 -0.0007160
rotate <0.0, -120.0, 0.0>
translate <50,10,30>
}
Note:
The pixel coordinate system is assumed to have its origin at the center of the upper left pixel!