手动校准
自动校准您的相机
如果您只需要校准外参,可以通过使用我们的动态校准节点动态完成。
关于相机校准
内参参数
- 焦距 (fx, fy): 设置视野范围。焦距越高,视野越窄;焦距越低,视野 越宽。
- 光心 (cx, cy): 光轴与传感器相交的主点。略有偏移(约20像素)是可接受的。这是由于镜头-传感器对齐的微小变化(如小移位或倾斜)造成的。正确校准可以补偿这些偏移,使其不影响相机的精度或性能。
- 畸变系数: 调整镜头缺陷:
- 径向畸变 (k1, k2, k3, k4, k5, k6): 校正桶形或枕形效应。
- 切向畸变 (p1, p2): 补偿镜头-传感器未对准。
- 薄棱镜/倾斜畸变 (s1, s2, s3, s4, τx, τy): 解决倾斜问题,尤其在广角镜头中。
外参参数
- 旋转: 相机的方向。
- 平移: 相机相对于参考点的位置。
校准流程
- 基于标记的校准: 使用Charuco标记(棋盘和Aruco标记的组合),在不同距离和角度下放置,以获得高精度。
- 受控环境: 在稳定的环境中进行校准,覆盖所有相关的姿态和角度。这种方法有助于实现可重复的校准结果。
- 模型特定定制: 根据特定相机型号调整校准过程,以提高可靠性。
畸变模型
- 普通视场(NFOV):
使用标准透视模型校正径向畸变 (k1, k2, k3, …) 和切向畸变 (p1, p2)。 - 宽视场(WFOV):
使用扩展透视模型,可包含多达 14个总畸变参数:- 径向畸变: k1, k2, k3, k4, k5, k6
- 切向畸变: p1, p2
- 薄棱镜: s1, s2, s3, s4
- 倾斜参数: τx, τy
注意: 在实践中,我们不会启用全部14个参数。对于广角镜头,我们启用两个额外参数(通常是τx和τy)来解决观察到的倾斜问题。这个扩展透视模型非常适用于我们的宽视场(WFOV)镜头。
- 鱼眼镜头:
使用专门模型处理极端的圆形畸变。我们通常避免鱼眼校准,因为OpenCV的鱼眼支持无法满足我们的所有需求,而扩展透视模型已经能有效覆盖WFOV应用。
立体相机重新校准
所有OAK相机(除模组系列外)在出厂前均已校准,因此无需重新校准。对于OAK FFC相机模组,安装相机至所需配置后需进行相机校准。
./calibrate.py --help 查看所有可用校准选项。前提条件
depthai 仓库,需先克隆并安装依赖:Command Line
1git clone https://github.com/luxonis/depthai.git --branch main
2cd depthai
3git submodule update --init --recursive
4python3 install_requirements.py准备Charuco标定板
- 24英寸屏幕Charuco标定板
- 28英寸屏幕Charuco标定板
- 32英寸屏幕Charuco标定板
- 36英寸屏幕Charuco标定板
- 42英寸屏幕Charuco标定板
- 50英寸屏幕Charuco标定板
- 55英寸屏幕Charuco标定板
- 65英寸屏幕Charuco标定板
- 75英寸屏幕Charuco标定板
显示Charuco标定板
- 避免屏幕过亮或过暗。
- 避免屏幕受到强烈光线或阳光直射。
- 全屏显示Charuco标定板。

SQUARE_SIZE_IN_CM 参数。
校准
| 参数 | 参数别名 | 参数描述 |
|---|---|---|
-s | --squareSizeCm | 打印的 charuco 板的正方形尺寸(厘米) |
-brd | --board | 相机名称(来自 depthai-boards,不区分大小写),或自定义 .json 板配置文件路径 |
-nx | --squaresX | X 方向的正方形数量。squaresX 在 准备 Charuco 板 中指定,取决于您的屏幕尺寸。 |
-ny | --squaresY | Y 方向的正方形数量。squaresY 在 准备 Charuco 板 中指定,取决于您的屏幕尺寸。 |
-cm | --cameraMode | 相机模式,perspective(默认)或 fisheye。 |
-mdmp | --minDetectedMarkersPercent | 一帧中检测到的标记的最小百分比,用于将该帧视为有效。默认值为 0.5(50%)。如果您想更严格,可以增加此值,但这可能会导致获取足够有效帧的时间变长。 |
-ep | --maxEpipolarError | 最大极线误差(像素),用于将该帧视为有效。默认值为 0.7。如果您想更严格,可以减小此值。 |
Command Line
1python3 calibrate.py --help校准过程中的相机定位
- 正面视图,校准板位于 FOV 中央。
- 不移动相机,旋转以将相机 FOV 与校准板边缘对齐。拍摄 4 张图像,分别对应屏幕的四个边缘。
- 正面视图,校准板位于 FOV 中央。
- 与靠近屏幕的位置类似,旋转相机以将 FOV 与校准板边缘对齐。
- 正面视图,校准板位于 FOV 中央。
- 拍摄 4 张图像,将相机 FOV 与所有四 个边缘对齐,类似于靠近和中等距离的位置。
- 另外,拍摄 4 张图像,与屏幕的四个角对齐。

运行处理阶段
s 键运行校准处理阶段。脚本会显示每张图像的极线,您应验证它们是否正确对齐。检查完所有图像后,校准结果(如果成功)将刷写到设备的 EEPROM 中。 每张拍摄的图像都保存在 dataset 文件夹中,因此您无需重新拍摄图像即可重新运行校准过程。如果您想对已拍摄的图像重新运行校准过程,请使用 -m process 参数:Command Line
1python3 calibrate.py -s [SQUARE_SIZE_IN_CM] --board [BOARD] -nx [squaresX] -ny [squaresY] -m processresources/ 文件夹中,可在以后用于测试或调试。您也可以将此本地校准文件加载或刷写到设备。有关更多详细信息,请参阅 校准加载示例。测试深度
故障排除
- 如果校准失败并出现错误:
High reprojection error!,通常的原因是板配置文件配置错误,通常是由于指定了错误的相机模块 HFOV。 - 如果校准成功但深度仍然不正确,可能是您的左右相机接反了。请使用更改后的板配置文件重新尝试校准,或交换相机插入的板接口。
ToF 重新校准
请注意,此校准不会提高深度精度,因为该方面由设备的固件管理。
校准步骤
Command Line
1git checkout new_tof_calib
2git submodule update --init --recursiveCommand Line
1python3 ./install_requirements.pycalibrate.py。例如:Command Line
1python3 calibrate.py -db -nx 12 -ny 9 -c 1 -cd 0 -s 6 -ms 4.7 -brd OAK-D-SR-POE-db:表示默认板,即您正在使用 Charuco 标记。-nx:x 方向上的 Charuco 标记数量。-ny:y 方向上的 Charuco 标记数量。-c:每次显示多边形时拍摄的图片数量(可选)。-cd:拍摄图片前的倒计时时间(秒,可选)。-s:Charuco 标记周围正方形的边长(厘米)。-ms:标记的边长(厘米)。-brd:设备的板型(此处为 OAK-D-SR-POE)。
division by zero 或 Failed to detect markers in the image dataset/rgb/rgb_p3_10.png 的错误,请从所有相机文件夹中删除 Charuco 板检测效果不佳的图像,然后使用添加了 -m process 参数的相同命令再次运行。这样只会启动处理阶段,因此您无需重新拍摄板图像。Command Line
1python3 calibrate.py -db -nx 12 -ny 9 -c 1 -cd 0 -s 6 -ms 4.7 -brd OAK-D-SR-POE -m process