標準カメラキャリブレーション
カメラキャリブレーションのフォーマットはOpenCVのフォーマットとこの論文に基づいています。サポートされているカメラタイプは、PINHOLE、FISHEYE、KANNALA、PRINCIPALPOINTDIST、FUSEDCYLINDRICALです。キャリブレーションモデルがサポートさ れていない場合は、WebAssemblyモジュールの形式で実装を提供するカスタムカメラキャリブレーションを使用することもできます。

共通
すべてのカメラキャリブレーションには以下の属性があります。
キー | 値 | パラメータ |
|---|---|---|
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 |
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 | 浮動小数点数 | なし |
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 |
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,
)主点歪み
主点歪みモデルは共通属性に加えて以下の属性で構成されます。
Key | Value | Parameters |
|---|---|---|
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 |
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,
)フューズドシリンドリカル
フューズドシリンドリカルモデルは共通属性に加えて以下の属性で構成されます。
キー | 値 | パラメータ |
|---|---|---|
cut_angles_degree | CutAnglesオブジェクト。これらの角度は度数で表す必要があります。 | upper, lower |
vertical_fov_degree (オプション。デフォルト72.5度) | 浮動小数点数。この角度は度数で表す必要があります。 | なし |
horizontal_fov_degree (optional. Default 93 degrees) | 浮動小数点数。この角度は度数で表す必要があります。 | なし |
max_altitude_angle_degree (optional. Default 90 degrees) | 浮動小数点数。この角度は度数で表す必要があります。 | なし |
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,
)シリンドリカル
シリンドリカルモデルは共通属性のみで構成されます。このモデルには追加で設定する属性はありません。
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_coefficients | PrincipalPointFisheyeCoefficientsオブジェクト | 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,
)