---
title: 표준 카메라 캘리브레이션
slug: api-guide/ko/C4nEgFZnAaAPTBXUDUVbr
docTags: 
createdAt: 2024-12-17T10:17:00.000Z
---

카메라 캘리브레이션 형식은 [OpenCV](https://docs.opencv.org/3.4/d4/d94/tutorial_camera_calibration.html)의 형식과 이 [논문](http://www.robots.ox.ac.uk/~cmei/articles/single_viewpoint_calib_mei_07.pdf)을 기반으로 합니다. 지원되는 카메라 타입은 `PINHOLE`, `FISHEYE`, `KANNALA`, `PRINCIPALPOINTDIST`, `FUSEDCYLINDRICAL`입니다. 사용 중인 캘리브레이션 모델이 지원되지 않는 경우, WebAssembly 모듈 형태로 구현을 제공하는 [커스텀 카메라 캘리브레이션](docId\:NLbKN4QKT33FCf8D68zNm)을 제공할 수도 있습니다.

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

### 공통

모든 카메라 캘리브레이션은 다음 속성을 가집니다.

| 키                     | 값                       | 파라미터                   |
| --------------------- | ----------------------- | ---------------------- |
| `rotation_quaternion` | `RotationQuaternion` 객체 | `w`, `x`, `y`, `z`     |
| `position`            | `Position` 객체           | `x`, `y`, `z`          |
| `camera_matrix`       | `CameraMatrix` 객체       | `fx`, `fy`, `cx`, `cy` |
| `image_width`         | 정수                      | NA                     |
| `image_height`        | 정수                      | NA                     |
| `field_of_view`       | 실수                      | NA                     |

### Pinhole

`PINHOLE` 카메라 모델은 공통 모델을 다음과 같이 확장합니다.

| 키                         | 값                           | 파라미터                         |
| ------------------------- | --------------------------- | ---------------------------- |
| `distortion_coefficients` | `DistortionCoefficients` 객체 | `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

Fisheye 카메라 모델은 `PINHOLE` 모델을 다음과 같이 확장합니다.

| 키    | 값  | 파라미터 |
| ---- | -- | ---- |
| `xi` | 실수 | 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

`KANNALA` 카메라 모델은 `PINHOLE`을 다음과 같이 변경 및 확장합니다.

| 키                           | 값                                                                                                                | 파라미터                   |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------- |
| `distortion_coefficients`   | `KannalaDistortionCoefficients` 객체. `k3`, `k4` 왜곡 파라미터가 있는 경우 각각 `p1`과 `p2`에 할당할 수 있습니다. 즉, `p1=k3`, `p2=k4`입니다. | `k1`, `k2`, `p1`, `p2` |
| `undistortion_coefficients` | `UndistortionCoefficients` 객체.                                                                                   | `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

Principal point distortion 모델은 공통 속성에 다음이 추가됩니다.

| 키                                                        | 값                                         | 파라미터                             |
| -------------------------------------------------------- | ----------------------------------------- | -------------------------------- |
| `principal_point_distortion_coefficients`                | `PrincipalPointDistortionCoefficients` 객체 | `k1`, `k2`                       |
| `lens_projection_coefficients` (선택 사항, 기본값은 SF806 모델의 값) | `LensProjectionCoefficients` 객체           | `c1`, `c2`,`c3`, `c4`,`c5`, `c6` |
| `distortion_center`                                      | `DistortionCenter` 객체                     | `x`, `y`                         |
| `principal_point`                                        | `PrincipalPoint` 객체                       | `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

Fused cylindrical 모델은 공통 속성에 다음이 추가됩니다.

| 키                                            | 값                                              | 파라미터             |
| -------------------------------------------- | ---------------------------------------------- | ---------------- |
| `cut_angles_degree`                          | `CutAngles` 객체. 이 각도는 도(degree) 단위로 표현되어야 합니다. | `upper`, `lower` |
| `vertical_fov_degree` (선택 사항, 기본값 72.5도)     | 실수. 이 각도는 도(degree) 단위로 표현되어야 합니다.             | NA               |
| `horizontal_fov_degree` (선택 사항, 기본값 93도)     | 실수. 이 각도는 도(degree) 단위로 표현되어야 합니다.             | NA               |
| `max_altitude_angle_degree` (선택 사항, 기본값 90도) | 실수. 이 각도는 도(degree) 단위로 표현되어야 합니다.             | 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

Cylindrical 모델은 공통 속성만으로 구성됩니다. 별도로 설정할 추가 속성이 없습니다.

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

Principal point fisheye 모델은 공통 속성에 다음이 추가됩니다.

| 키                                      | 값                                      | 파라미터                                     |
| -------------------------------------- | -------------------------------------- | ---------------------------------------- |
| `principal_point_fisheye_coefficients` | `PrincipalPointFisheyeCoefficients` 객체 | `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,
    )
```
