相机内参数据要求
相机内参不是“为了跑标定算法才需要的附属文件”。它定义了一张图里的像素,究竟对应相机前方的哪一条三维视线。没有这层关系,图像当然仍可用于二维分类或语言模型;但一旦任务需要深度、三维重建、跨相机对齐、SLAM、抓取、位姿标注或把视觉结果交给机器人执行,像素位置就不再足够。
为什么需要相机内参
Section titled “为什么需要相机内参”相机把三维世界压成二维图像时,丢掉了距离和尺度。内参提供了这台相机的投影规则:同样位于相机前方一米的物体,使用广角镜头和长焦镜头会落在完全不同的像素位置;即使是同一镜头,图像经过裁剪或缩放后,像素中心和有效焦距也会改变。
最常用的针孔近似是:
u = fx * X / Z + cxv = fy * Y / Z + cy其中 (X, Y, Z) 是相机坐标系中的三维点,(u, v) 是像素坐标;fx、fy 是以像素表示的有效焦距,cx、cy 是主点。真实镜头还会使直线弯曲或视角被压缩,因此公式前后通常还要按畸变模型处理。相关术语见相机内参、畸变模型和重投影误差。
对具身智能数据而言,内参解决的是“这条视觉证据从哪里来”的问题:
- 三维几何:由深度图、双目视差或多帧匹配恢复点云、物体尺寸和表面位置。
- 空间对齐:将图像中的 2D 框、关键点或分割区域投成相机射线,再与相机外参、机器人基座或世界坐标系相连。
- 定位与建图:SLAM 与视觉惯性系统用内参解释特征点的观测方向;内参错误会表现为轨迹漂移、地图弯曲或边缘特征难以匹配。
- 操作学习:将“画面中杯子的位置”变成可比较的空间目标,或复核相机看到的手、夹爪和物体是否与动作、位姿标签一致。
- 公平评估:不同镜头、分辨率和预处理方式下,不能直接比较像素误差;内参可将误差归一到可解释的视角或三维关系中。
最小数据要求
Section titled “最小数据要求”内参不是只保存一个 3x3 矩阵。数据集需要同时保存“数值是什么”和“它对哪一种图像有效”。下表是一份面向采集与交付的最小契约。
| 字段 | 数据要求 | 为什么要保存 |
|---|---|---|
camera_id / sensor_serial |
稳定、可追溯的相机身份;多摄时不可用文件名代替 | 防止把一台相机的参数用于另一台 |
image_width, image_height |
参数生效时的实际像素尺寸 | 焦距和主点以像素为单位,尺寸变了就可能失效 |
model |
明确模型名称、实现来源、参数顺序 | k1...k4 在不同模型中含义不一定相同 |
fx, fy, cx, cy |
浮点值、像素单位、明确坐标原点与轴方向 | 支撑基础投影、反投影与几何标注 |
distortion |
全量畸变系数及其顺序;无畸变也显式声明 | 避免边缘区域出现系统性偏差 |
image_state |
原始、裁剪、缩放、旋转或去畸变后的图像状态 | 防止标定文件与训练帧不是同一像素坐标 |
calibration_version |
标定日期、工具/配置版本、适用硬件配置 | 支撑回溯、重跑和设备改装后的隔离 |
quality |
重投影误差统计、样本覆盖与验收结论 | 让下游知道能否用于三维任务 |
一个便于交换的记录可以是:
{ "camera_id": "wrist_rgb_01", "image_size_px": [1920, 1080], "projection_model": "pinhole_radtan", "K": [[1418.2, 0.0, 960.4], [0.0, 1416.8, 538.7], [0.0, 0.0, 1.0]], "distortion": { "order": ["k1", "k2", "p1", "p2", "k3"], "values": [-0.12, 0.03, 0.001, -0.0007, 0.0] }, "image_state": "raw_sensor_orientation", "calibration_version": "calib-2026-08-14", "quality": { "mean_reprojection_error_px": 0.31, "p95_reprojection_error_px": 0.74 }}数值本身不应被当作通用模板。不同设备、分辨率、去畸变管线和标定模型的参数都不同;尤其不要把示例数值复制到新相机上。
采集与处理中的适用边界
Section titled “采集与处理中的适用边界”标定一次并不意味着从此永久有效。以下变化会使“原有参数 + 新图像”不再是同一套几何:
- 切换相机、镜头、对焦距离或可变焦档位。
- 改变传感器输出分辨率、binning、数字变焦、裁剪或稳定模式。
- 将原始画面旋转、缩放、裁剪、拼接,或使用了不同的去畸变流程。
- 更换防水壳、加装镜头、碰撞后镜头位置变化,或设备报告了新的标定版本。
其中缩放和裁剪最容易被忽略。若原图整体按 sx、sy 缩放,新的 fx、fy、cx、cy 也应按相同因子缩放;若从左上角裁掉 (x0, y0),主点应变为 cx - x0、cy - y0。旋转、镜像和去畸变则不应靠猜测改矩阵,应记录变换并用与图像处理一致的相机模型。
对于鱼眼、全景或多相机拼接图,优先使用设备或工具链明确声明的模型。把鱼眼当作普通针孔相机,中心可能“看起来能用”,但画面边缘的空间定位会持续偏离。
标注、训练与评估怎样使用
Section titled “标注、训练与评估怎样使用”二维标签可以直接附着在像素上,但若要复用为三维监督,标注记录必须知道它基于哪种图像状态和哪版内参。例如标注员在已去畸变的 1280×720 预览上圈出的物体,不能直接拿原始 1920×1080 鱼眼帧的内参反投影。
建议每条几何相关标注至少关联:frame_id、camera_id、image_state、calibration_version 和坐标约定。深度、姿态、点云、机器人 TCP 或世界坐标等派生结果,还要关联相机外参和时间戳。这样在发现内参错误时,才能精确定位需要重算的标注、训练分片和评估结果。
训练和评估可按内参质量分桶:分别报告标定正常、边缘误差偏高、参数缺失和预处理不明的样本表现。这样可区分模型本身的泛化问题与数据几何问题,也能避免把有系统性投影误差的样本当成可靠监督。
质量控制清单
Section titled “质量控制清单”| 检查 | 合格证据 | 常见风险 |
|---|---|---|
| 身份匹配 | camera_id、序列号、硬件配置与标定记录一致 |
多相机文件名相似导致串用 |
| 尺寸匹配 | 标定尺寸等于实际解码后尺寸,或存在已验证的变换 | 视频转码、裁剪后仍沿用原参数 |
| 模型完整 | 模型名、参数顺序、畸变系数和图像状态齐全 | 只留 K,丢失鱼眼模型 |
| 标定覆盖 | 标定板角点覆盖中心、四角和不同距离/姿态 | 只在中心取样,边缘误差被掩盖 |
| 重投影残差 | 保存均值、分位数和空间分布,不只保存一个均值 | 局部失败被平均值掩盖 |
| 现场复核 | 用已知尺寸或固定标记板重投影检查 | 运输、改装或设置变化后继续使用旧参数 |
| 版本追溯 | 派生帧、标签和样本能定位到内参版本 | 内参修正后无法判断哪些数据需重算 |
验收阈值应服务于下游任务,不宜套用一个通用像素数。抓取、三维测量和高精度定位应依据工作距离、容许的末端误差和画面边缘使用比例制定更严格阈值;只做粗粒度二维识别的资料可降低几何要求,但仍应明确标注“不可用于空间换算”。
与外参、深度和时间的关系
Section titled “与外参、深度和时间的关系”内参回答“相机如何看”;外参回答“相机相对机器人、另一台相机或世界坐标系在哪里”;时间戳回答“这张图对应什么时候”。三者缺一不可:内参正确而外参错误,三维点仍会落在错误位置;内外参正确而图像和动作不同步,动态操作的标签仍会错位。
在数据集发布时,建议将内参视为每个相机流的必备元数据,并将外参、时间对齐、图像预处理和质量标记作为可连接的独立记录。有关多传感器记录的版本与坐标契约,可继续参考 Meta VRS 多传感器数据规范;有关视觉定位的输入与质量问题,可参考 视觉惯性 SLAM 数据整理。
- OpenCV Camera Calibration and 3D Reconstruction:针孔投影、畸变、标定与重投影的 API 和概念参考。
- OpenCV Fisheye module:鱼眼模型及其标定、去畸变接口。
- Project Aria Tools Calibration:多相机设备中读取与使用标定数据的示例。