---
title: Standard Camera Calibrations
slug: api-guide/standard-camera-calibrations
docTags: 
createdAt: 2024-12-17T10:17:00.508Z
---

The Camera calibration format is based on [OpenCVs](https://docs.opencv.org/3.4/d4/d94/tutorial_camera_calibration.html) format and this [paper](http://www.robots.ox.ac.uk/~cmei/articles/single_viewpoint_calib_mei_07.pdf). 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](docId\:F_jarCzytV6CXwZc675zK) where you provide the implementation in the form of a WebAssembly module.

![](https://api.archbee.com/api/optimize/wLEz_RbWP6nIMpY-prjlm/YTQ9f_IgNoIxDhdwxUqcr_camera-calibration.jpg)

### 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` |

```python
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         |

```python
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` |

```python
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`                         |

```python
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               |

```python
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.

```python
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` |

```python
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,
    )
```

