返回专辑
·Johan·4 分钟阅读

张正友标定:板子怎么摆

calibrateCamera 联合优化 K、dist 和每帧外参;姿势覆盖不足时 fx 与 k1 互借误差,RMS 低但外推畸变大。

张正友标定:板子怎么摆

1. RMS 0.18 px,1.5 m 外仍偏 4%

OpenCV calibrateCamera 三行能跑通。桌面平拍十几张 RMS 零点一八像素,以为标定完成——一点五米外 AprilTag 深度系统性偏百分之四。根因是姿势覆盖不足:fx 与 k1 互借误差,内参在训练分布内拟合好,外推畸变大。拉开差距的是板子怎么摆、采多少张、怎么筛——不是算法选型。镜头热机三十分钟再采;产线季度复标写 SOP,温漂和机械冲击都会让 K/dist 漂移。

2. 流程与精度

python
flags, corners = cv2.findChessboardCorners(gray, (cols, rows), None)
corners = cv2.cornerSubPix(gray, corners, (11, 11), (-1, -1),
    (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001))
ret, K, dist, rvecs, tvecs = cv2.calibrateCamera(
    objpoints, imgpoints, imageSize, None, None,
    flags=cv2.CALIB_RATIONAL_MODEL)
print('RMS px', ret)

objpoints 是棋盘三维角点(Z 等于零平面);imgpoints 是二维检测角点。ret 是总体 RMS 重投影误差。cornerSubPix 窗口十一乘十一,epsilon 零点零零一是常见起点;motion blur 图 subpix 会漂,是 outlier 常见源——单张 RMS 大于两倍中位数的图剔除后重跑。

3. 摆姿原则

覆盖视场:角点进四角和中心,边缘畸变区必须有样本。倾角:至少三分之一图有明显 pitch/yaw 二十到四十五度,纯正面板解耦不了 fx 与板距。距离:近中远分层。数量:十五到二十五张常够;重复姿势只增计算不增信息。OpenCV 四可用 Charuco/ArUco board 替代纯棋盘,partial occlusion 更稳。object points 单位任意,但 tvec 随 object 单位;棋盘 square size 必须 caliper 实测,不信 PDF 标称——单位错 scale 全错。

4. flags 与模型选择

CALIB_RATIONAL_MODEL:广角边缘,k4/k5/k6 参与。CALIB_FIX_ASPECT_RATIO:fx/fy 锁定比例。CALIB_USE_INTRINSIC_GUESS:出厂 K 当初值,加速收敛。fx 与 fy 差大于百分之一说明姿势少或非方像素传感器。去畸变仍弯:remap 用了另一套 K/dist,或标定与使用镜头不一致。

5. 失败模式

现象原因
边缘 RMS 大畸变模型/覆盖不足
fx≠fy 差 >1%姿势少
外推 depth 偏fx 与 k1 互借
去畸变仍弯remap K/dist 不一致

6. 验收

RMS 加 per-point 热图;hold-out 已知长度 metric 误差(尺子在画面里量);undistort 直线场景。标定是覆盖设计实验——姿势对了,PnP、立体、VO 少一半玄学调试。RMS 低只说明拟合域内好,不代表外推可信。

7. 案例:平拍十几张 RMS 低但外推偏

某项目只平拍桌面十几张,RMS 零点二像素,以为标定完美。一点五米外 Tag 深度偏百分之四——fx 与 k1 互借,边缘和远距离外推畸变大。补采倾斜、边缘、远距各五张后重跑,RMS 略升到零点二五,外推误差降到百分之一以内。覆盖比 RMS 数字重要。

8. 与 downstream 联动

标定 K/dist 是 PnP、stereoRectify、undistort 的共同输入。remap 用了另一套参数是 silent failure——启动时打印 K 摘要、fx/fy/dist 前几项,与 yaml 配置对比。产线季度复标写 SOP,温漂和冲击后必须复标,不能假设一次标定用终身。

9. 离群图与 Charuco

单张 RMS 大于两倍中位数的图剔除后重跑。Charuco/ArUco board 对 partial occlusion 更稳;纯 chessboard 必须 full corners visible。motion blur 图 cornerSubPix 漂是常见 outlier 源。我会把 flags、cornerSubPix 窗口、square size 实测值写进标定记录。

10. 验收清单

RMS 加 per-point 热图;hold-out 已知长度 metric;undistort 直线场景;外推距离(一点五米外 Tag)metric 误差。RMS 低只说明拟合域内好,不代表外推可信。标定是覆盖设计实验,姿势对了 downstream 少一半玄学。我会把标定日期、镜头 SN、square size 实测值、flags 写进标定 yaml,与 remap 节点绑定版本,避免「标定一套、运行另一套」。

11. 案例:square size 信 PDF

某项目 square size 用 PDF 标称二十毫米,caliper 实测十九点七毫米——scale 偏百分之一点五,PnP 深度全偏。object 单位任意但 tvec 随其缩放;square size 必须实测,这是 silent failure 经典源。镜头热机三十分钟再采;产线季度复标写 SOP,温漂后 K/dist 漂移是常态不是例外。findChessboardCorners 失败图直接丢,别凑张数;Charuco 板 partial view 仍可用,纯棋盘必须 full corners visible 或精度降。

← 全部文章

johan's blog