표준 카메라 캘리브레이션
카메라 캘리브레이션 형식은 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 | 정수 | NA |
image_height | 정수 | NA |
field_of_view | 실수 | NA |
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 | 실수 | 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
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,
)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 |
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 |
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 모델은 공통 속성만으로 구성됩니다. 별도로 설정할 추가 속성이 없습니다.
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 |
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,
)