Standard Camera Calibrations
The Camera calibration format is based on OpenCVs format and this paper. The different camera types supported are: PINHOLE, FISHEYE, KANNALA, PRINCIPALPOINTDIST, and FUSEDCYLINDRICAL. If your calibration model is not supported, you can also provide a Custom Camera Calibrations where you provide the implementation in the form of a WebAssembly module.

Common
All camera calibrations have the following attributes
Key | Value | Parameters |
|---|---|---|
rotation_quaternion | A RotationQuaternion object | w, x, y, z |
position | A Position object | x, y, z |
camera_matrix | A CameraMatrix object | fx, fy, cx, cy |
image_width | Integer | NA |
image_height | Integer | NA |
field_of_view | Float | NA |
Pinhole
The PINHOLE camera model expands the common model with:
Key | Value | Parameters |
|---|---|---|
distortion_coefficients | A DistortionCoefficients object | k1, k2, p1, p2, k3 |
from kognic.io.model.calibration.camera.common import CameraMatrix, DistortionCoefficients
from kognic.io.model.calibration.camera.pinhole_calibration import PinholeCalibration
from kognic.io.model.calibration.common import Position, RotationQuaternion
def unity_pinhole_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0)
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0)
camera_camera_matrix = CameraMatrix(fx=3450, fy=3250, cx=622, cy=400)
camera_distortion_coefficients = DistortionCoefficients(k1=0.0, k2=0.0, p1=0.0, p2=0.0, k3=1.0)
return PinholeCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
distortion_coefficients=camera_distortion_coefficients,
image_height=1080,
image_width=1920,
field_of_view=190.0,
)Fisheye
The Fisheye camera model expands the PINHOLE model with the following
Key | Value | Parameters |
|---|---|---|
xi | Float | NA |
from kognic.io.model.calibration.camera.common import CameraMatrix, DistortionCoefficients
from kognic.io.model.calibration.camera.fisheye_calibration import FisheyeCalibration
from kognic.io.model.calibration.common import Position, RotationQuaternion
def unity_fisheye_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0)
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0)
camera_camera_matrix = CameraMatrix(fx=3450, fy=3250, cx=622, cy=400)
camera_distortion_coefficients = DistortionCoefficients(k1=0.0, k2=0.0, p1=0.0, p2=0.0, k3=0.1)
return FisheyeCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
distortion_coefficients=camera_distortion_coefficients,
image_height=1080,
image_width=1920,
xi=123.456,
field_of_view=190.0,
)Kannala
The KANNALA camera model changes and expands the PINHOLE with the following
Key | Value | Parameters |
|---|---|---|
distortion_coefficients | A KannalaDistortionCoefficients object. The distortion parameters k3, k4, if available, can be assigned to p1 and p2 respectively. That is p1=k3 and p2=k4. | k1, k2, p1, p2 |
undistortion_coefficients | A UndistortionCoefficients object. | l1, l2, l3, l4 |
from kognic.io.model.calibration.camera.common import CameraMatrix
from kognic.io.model.calibration.camera.kannala_calibration import (
KannalaCalibration,
KannalaDistortionCoefficients,
UndistortionCoefficients,
)
from kognic.io.model.calibration.common import Position, RotationQuaternion
def unity_kannala_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0) # similar to Lidar
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0) # similar to Lidar
camera_camera_matrix = CameraMatrix(fx=3450, fy=3250, cx=622, cy=400)
camera_distortion_coefficients = KannalaDistortionCoefficients(k1=0.0, k2=0.0, p1=0.0, p2=0.0)
camera_undistortion_coefficients = UndistortionCoefficients(l1=0.0, l2=0.0, l3=0.0, l4=0.0)
return KannalaCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
distortion_coefficients=camera_distortion_coefficients,
undistortion_coefficients=camera_undistortion_coefficients,
image_height=1080,
image_width=1920,
field_of_view=180.0,
)Principal point distortion
The principal point distortion model consists of the common attributes plus
Key | Value | Parameters |
|---|---|---|
principal_point_distortion_coefficients | A PrincipalPointDistortionCoefficients object | k1, k2 |
lens_projection_coefficients (optional. Default to values for model SF806) | A LensProjectionCoefficients object | c1, c2,c3, c4,c5, c6 |
distortion_center | A DistortionCenter object | x, y |
principal_point | A PrincipalPoint object | x, y |
from kognic.io.model.calibration.camera.common import CameraMatrix
from kognic.io.model.calibration.camera.principal_point_distortion_calibration import (
DistortionCenter,
LensProjectionCoefficients,
PrincipalPoint,
PrincipalPointDistortionCalibration,
PrincipalPointDistortionCoefficients,
)
from kognic.io.model.calibration.common import Position, RotationQuaternion
def unity_principal_point_distortion_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0)
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0)
camera_camera_matrix = CameraMatrix(fx=3450, fy=3250, cx=622, cy=400)
camera_distortion_coefficients = PrincipalPointDistortionCoefficients(k1=0.0, k2=0.0)
principal_point = PrincipalPoint(x=0.0, y=0.0)
distortion_center = DistortionCenter(x=0.0, y=0.0)
lens_projection_coefficients = LensProjectionCoefficients(c1=0.0, c2=0.0, c3=0.0, c4=0.0, c5=0.0, c6=0.0)
return PrincipalPointDistortionCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
principal_point_distortion_coefficients=camera_distortion_coefficients,
lens_projection_coefficients=lens_projection_coefficients,
principal_point=principal_point,
distortion_center=distortion_center,
image_height=1080,
image_width=1920,
field_of_view=180.0,
)Fused cylindrical
The fused cylindrical model consists of the common attributes plus
Key | Value | Parameters |
|---|---|---|
cut_angles_degree | A CutAngles object. Note these angles should be expressed in degrees. | upper, lower |
vertical_fov_degree (optional. Default 72.5 degrees) | Float. Note this angle should be expressed in degrees. | NA |
horizontal_fov_degree (optional. Default 93 degrees) | Float. Note this angle should be expressed in degrees. | NA |
max_altitude_angle_degree (optional. Default 90 degrees) | Float. Note this angle should be expressed in degrees. | NA |
from kognic.io.model.calibration.camera.common import CameraMatrix
from kognic.io.model.calibration.camera.fused_cylindrical_calibration import CutAngles, FusedCylindricalCalibration
from kognic.io.model.calibration.common import Position, RotationQuaternion
def example_fused_cylindrical_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0)
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0)
camera_camera_matrix = CameraMatrix(fx=400, fy=400, cx=600, cy=450)
cut_angles_degree = CutAngles(upper=-40.0, lower=30.0)
return FusedCylindricalCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
image_height=1080,
image_width=1920,
cut_angles_degree=cut_angles_degree,
vertical_fov_degree=70,
horizontal_fov_degree=90.0,
max_altitude_angle_degree=90.0,
)Cylindrical
The cylindrical model consists only of the common attributes. There are no extra attributes to set for this model.
from kognic.io.model.calibration.camera.common import CameraMatrix
from kognic.io.model.calibration.camera.cylindrical_calibration import CylindricalCalibration
from kognic.io.model.calibration.common import Position, RotationQuaternion
def example_cylindrical_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0)
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0)
camera_camera_matrix = CameraMatrix(fx=400, fy=400, cx=600, cy=450)
return CylindricalCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
image_height=1080,
image_width=1920,
)Principal point fisheye
The principal point fisheye model consists of the common attributes plus
Key | Value | Parameters |
|---|---|---|
principal_point_fisheye_coefficients | A PrincipalPointFisheyeCoefficients object | alpha_l, alpha_r, beta_u, beta_l |
from kognic.io.model.calibration.camera.common import CameraMatrix
from kognic.io.model.calibration.camera.principal_point_fisheye_calibration import (
PrincipalPointFisheyeCalibration,
PrincipalPointFisheyeCoefficients,
)
from kognic.io.model.calibration.common import Position, RotationQuaternion
def unity_principal_point_fisheye_calibration():
camera_position = Position(x=0.0, y=0.0, z=0.0)
camera_rotation = RotationQuaternion(w=1.0, x=0.0, y=0.0, z=0.0)
camera_camera_matrix = CameraMatrix(fx=3450, fy=3250, cx=622, cy=400)
principal_point_fisheye_coefficients = PrincipalPointFisheyeCoefficients(alpha_l=0.0, alpha_r=0.0, beta_u=0.0, beta_l=0.0)
return PrincipalPointFisheyeCalibration(
position=camera_position,
rotation_quaternion=camera_rotation,
camera_matrix=camera_camera_matrix,
principal_point_fisheye_coefficients=principal_point_fisheye_coefficients,
image_height=1080,
image_width=1920,
field_of_view=180.0,
)