Basic Image AlgorithmS Library
2.8.0

The projection concept in BIAS follows the idea to represent a camera including all internal (such camera matrix and radial distortion parameters) and external (such as rotation and translation) camera parameters as projection parameters.
The thoughts behind this concept are that it is nice to have one class in which everything is encapsulated which makes it very convenient to represent the projection of points and camera transformations.
The concept is to have a base class BIAS::ProjectionParametersBase from which all specialized projection parameters for different camera types are derived. Generally speaking it is a generalization of the PMatrix concept to other camera types:
The base class BIAS::ProjectionParametersBase has these main functions which can be used to project 2D points to 3D coordinates and 3D coordinates to 2D image points:
There are also many other functions which can be used to calculate rays from the camera center through image coordinates and to calculate 3D points on unit spheres around the camera. Consult the class documentation for further details.
Multicamera setups in BIAS are represented as rigs, consisting of multiple instances of BIAS::ProjectionParametersBase. A rig is BIAS is represented by the class BIAS::Projection. In general it only is a container which internally holds a vector of pointers to BIAS::ProjectionParameterBase objects. The Projection is responsible to maintain the relative transformations between the cameras. In a BIAS::Projection the first camera is considered the "master" camera and is given in absolute world coordinates. All other cameras are considered "slave" cameras and are stored using external parameters relative to this master camera (translation, rotation). Adding ProjectionParameters to the Projection can therefore be done with relative or absolute camera externals and the appropriate function has to be used. Analog to the ProjectionParameters the Projection also has Read and Write functions.
Author: Ingo Schiller