如何将OSDaR23数据集相机标定数据转换为指定格式?
一、内在矩阵(Intrinsic)转换
原始数据里的camera_matrix是12元素的4x3投影矩阵,目标格式的intrinsic是9元素的3x3内参矩阵,直接提取有效部分即可:
映射规则
原始camera_matrix结构为:[fx, 0, cx, 0, 0, fy, cy, 0, 0, 0, 1, 0]
对应4x3矩阵里的前3行3列就是核心内参矩阵K,按行展开成9元素数组就是目标intrinsic:[fx, 0, cx, 0, fy, cy, 0, 0, 1]
你的数据转换结果
原始camera_matrix:[7265.854580654392, 0.0, 2093.506452810741, 0.0, 0.0, 7265.854580654392, 1228.255759518024, 0.0, 0.0, 0.0, 1.0, 0.0]
提取后得到目标intrinsic:[7265.854580654392, 0.0, 2093.506452810741, 0.0, 7265.854580654392, 1228.255759518024, 0.0, 0.0, 1.0]
二、外在矩阵(Extrinsic)转换
目标extrinsic是16元素的4x4齐次变换矩阵,由原始的平移向量和四元数转换而来:
转换步骤
从四元数生成3x3旋转矩阵
原始四元数为[x, y, z, w]格式,用以下公式计算旋转矩阵R:R = [ [1-2y²-2z², 2xy-2zw, 2xz+2yw], [2xy+2zw, 1-2x²-2z², 2yz-2xw], [2xz-2yw, 2yz+2xw, 1-2x²-2y²] ]代入你的四元数
[0.0217394, 0.0639103, -0.182324, 0.980918]即可算出旋转矩阵。组合平移向量生成4x4齐次矩阵
平移向量为[tx, ty, tz],将旋转矩阵R和平移向量拼接成4x4齐次变换矩阵:T = [ [R[0][0], R[0][1], R[0][2], tx], [R[1][0], R[1][1], R[1][2], ty], [R[2][0], R[2][1], R[2][2], tz], [0, 0, 0, 1] ]这里tx、ty、tz使用你的数据
[0.0510683, -0.525541, 3.51628]。按行展开成16元素数组
将4x4矩阵的元素按行依次排列,就是目标的extrinsic数组。
补充说明
OSDaR23数据集的标定数据包含描述从激光雷达到非光学相机坐标系变换的外参参数(平移向量和四元数),非光学系统轴与激光雷达对齐,光学系统轴与图像坐标系对齐。因此转换后的外参矩阵直接对应激光雷达到相机坐标系的齐次变换,内参矩阵则是相机的针孔投影内参。
内容的提问来源于stack exchange,提问作者Subee Na

