---
title: 標準カメラキャリブレーション
slug: api-guide/ja/4k8hY5qwKCGPokfnw2loP
docTags: 
createdAt: 2024-12-17T10:17:00.508Z
---

カメラキャリブレーションのフォーマットは[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\:HG1KrvPudpiHYSJ2CL1hO)を使用することもできます。

![](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`         | 整数                         | なし                     |
| `image_height`        | 整数                         | なし                     |
| `field_of_view`       | 浮動小数点数                     | なし                     |

### 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` | 浮動小数点数 | なし    |

```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）単位で指定してください。              | なし               |
| `horizontal_fov_degree`（オプション。デフォルト93度）     | 浮動小数点数。この角度は度（degree）単位で指定してください。              | なし               |
| `max_altitude_angle_degree`（オプション。デフォルト90度） | 浮動小数点数。この角度は度（degree）単位で指定してください。              | なし               |

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