Skip to content

Instantly share code, notes, and snippets.

@sherwoac
Created April 27, 2025 12:52
Show Gist options
  • Save sherwoac/65c14e819fed1a081d5eba2b62973384 to your computer and use it in GitHub Desktop.
Save sherwoac/65c14e819fed1a081d5eba2b62973384 to your computer and use it in GitHub Desktop.
k4a camera intrinsics
import os
import json
import numpy as np
class Intrinsics(object):
def __init__(self, json_file):
assert os.path.isfile(json_file), f'{json_file=} not found'
with open(json_file, 'r') as f:
intrinsics_data = json.load(f)
if 'CalibrationInformation' in intrinsics_data:
self._intrinsics_data = Intrinsics.k4a_intrinsics(intrinsics_data)
# turn it back into arrays
self._intrinsics_data = {k: np.array(v) for k, v in intrinsics_data.items()}
def __get_item__(self, key):
assert key in self._intrinsics_data, f'{key=} not in _intrinsics_data'
return self._intrinsics_data[key]
@staticmethod
def k4a_intrinsics(k4a_json_data):
""" cf: https://github.com/microsoft/Azure-Kinect-Sensor-SDK/blob/develop/examples/calibration_registration/camera_tools.py#L151
intrinsics = [camera_matrix[0][2]/img_size[0][0], #Px
camera_matrix[1][2]/img_size[1][0], #Py
camera_matrix[0][0]/img_size[0][0], #Fx
camera_matrix[1][1]/img_size[1][0], #Fy
dist[0][0], #K1
dist[1][0], #K2
dist[4][0], #K3
dist[5][0], #K4
dist[6][0], #K5
dist[7][0], #K6
0, #Cx always Zero. (BrownConrady)
0, #Cy always Zero. (BrownConrady)
dist[3][0], #P2/Tx
dist[2][0]] #P1/Ty
"""
bc_model_parameters = k4a_json_data['CalibrationInformation']['Cameras'][1]['Intrinsics']['ModelParameters']
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment