표준 카메라 캘리브레이션
카메라 캘리브레이션 형식은 OpenCV의 형식과 이 논문을 기반으로 합니다. 지원되는 카메라 타입은 PINHOLE, FISHEYE, KANNALA, PRINCIPALPOINTDIST, FUSEDCYLINDRICAL입니다. 사용 중인 캘리브레이션 모델이 지원되지 않는 경우, WebAssembly 모듈 형태로 구현을 제공하는 사용자 정의 카메라 캘리브레이션을 제공할 수도 있습니다.

공통
모든 카메라 캘리브레이션은 다음 속성을 가집니다.
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
PINHOLE 카메라 모델은 공통 모델을 다음과 같이 확장합니다.
Key | Value | Parameters |
|---|---|---|
distortion_coefficients | A DistortionCoefficients object | 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 모델을 다음과 같이 확장합니다.
Key | Value | Parameters |
|---|---|---|
xi | Float | 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을 다음과 같이 변경 및 확장합니다.
Key | Value | Parameters |
|---|---|---|
distortion_coefficients | A KannalaDistortionCoefficients object. k3, k4 왜곡 파라미터가 있는 경우 각각 p1과 p2에 할당할 수 있습니다. 즉, p1=k3, p2=k4입니다. | k1, k2, p1, p2 |
undistortion_coefficients | A UndistortionCoefficients object. | 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 모델은 공통 속성에 다음이 추가됩니다.
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 |
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 모델은 공통 속성에 다음이 추가됩니다.
Key | Value | Parameters |
|---|---|---|
cut_angles_degree | A CutAngles object. 이 각도는 도(degree) 단위로 표현되어야 합니다. | upper, lower |
vertical_fov_degree (optional. Default 72.5 degrees) | Float. 이 각도는 도(degree) 단위로 표현되어야 합니다. | NA |
horizontal_fov_degree (optional. Default 93 degrees) | Float. 이 각도는 도(degree) 단위로 표현되어야 합니다. | NA |
max_altitude_angle_degree (optional. Default 90 degrees) | Float. 이 각도는 도(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 모델은 공통 속성에 다음이 추가됩니다.
Key | Value | Parameters |
|---|---|---|
principal_point_fisheye_coefficients | A PrincipalPointFisheyeCoefficients object | 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,
)