手动校准
手动校准
Stereo camera recalibration
Estimate intrinsics and extrinsics of all camera sensors
ToF recalibration
Calibrate for ToF extrinsics
自动校准您的相机
如果您只需要校准外参,可以使用我们的 动态校准节点动态进行。
关于相机校准
内参
- 焦距 (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 应用。
立体相机重新校准
除FFC 系列外,所有 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 个边缘对齐,类似于近距离和中等距离的位置。
- 此外,拍摄 4 张图像以与屏幕的角落对齐。

运行处理阶段
s 键运行校准处理阶段。脚本会显示每张图像的对极线,您应该验证它们是否正确对齐。一旦所有图像都经过检查,如果成功,校准结果将被刷写到设备 EEPROM。 捕获的每张图像都保存在 dataset 文件夹中,因此您无需再次捕获图像即可重新运行校准过程。如果您想在捕获的图像上重新运行校准过程,请使用 -m process 参数:Command Line
1python3 calibrate.py -s [厘米单位的方块尺寸] --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